MySQL ORDER BY / LIMIT performance: late row lookups
Оптимизация запросов, для большой выборки и исключения повторений крайне полезная статья.
вкраце можно использовать вот такую конструкцию:
15.07.2019SELECT
distinctl.id
FROM
(
SELECT
id
FROM
t_limit
WHERE columnA='53') o
JOIN
t_limit l
ON
l.id = o.id
zoiper IOS ANDROID PUSH notification
чтобы получить push уведомления, необходимо на своем телефоне при установке Zoiper
1. разрешить использовать сервис push уведомлений
2. разрешить на своём SIP сервере подсети
IP – 185.117.83.192/27 , port 443
У zoiper Это стоит 75 рублей в месяц., других способов отправить push уведомление на чужое приложение я не вижу.
6.07.2019Приложение supervisor для контроля выполнения скриптов.
Работа AMI скриптов может быть не стабильна, особенно когда вы не обладаете большим опытом. Подсмотрел хорошее приложение supervisor, которое устанавливается из репозиториев и включается за пять секунд. Опять же ваш скрипт будет запускаться автоматически. А управление выглядит очень удобным:
Бонусы это автозапуск, логи в определенные папки.
старт: supervisorctl start pami.php
стоп: supervisorctl stop pami-hangup.php
Логи лежат в /var/log/pami
[program:pami]
user = root
command = php pami.php 127.0.0.1 5038 testuser passwd 10000 10000
directory = /var/lib/asterisk/agi-bin
numprocs = 1
autorestart = true
autostart = true
stdout_logfile = /var/log/pami/pami.log
stderr_logfile = /var/log/pami/pami_errors.log
stopwaitsecs = 60
startsecs=5
startretries=10000000
ну, прекрасно же. Примеры и статья
Asterisk as Wholesale. PAMI instead of AGI. Stable AMI connection.
Во время выполнения диалплана необходимо уточнять маршруты для звонка и делать то нужно из базы Mysql. Классический вариант использовать AGI Либо FastAGI, Но здесь я рассмотрю вариант запуска в фоне скрипта который, получая информацию о звонке, будет устанавливать переменную обратно в диалплан.
Asterisk адаптированный для wholesale, кстати, достаточно быстро всё обрабатывает используя минимум модулей и запросы в базу через ODBC. на удивление. Но всё равно с Opensips И Kamailio не сравнится.
Используем: PAMI library при установке пришлось повозиться т.к. не очень знаком с composer, но почитав про него – всё получилось. библиотеки ставятся в текущую директорию agi-bin, тогда будет доступ.
Основная проблема это поддержка коннекта между скриптом и астером, а также отсутствие ошибок между ними. Если вы запустите по умолчанию скрипты с ами, то вы наверняка получите внезапное завершение программы при анализе event от астериска. Есть несколько факторов, которые влияют на стабильность соединения:
- read timeout\read error – возникает на стороне скрипта, нужно обрабатывать такие события, в скрипте для этого будет try { } catch {}.
- Снизить поток событий из Астериска. В manager.conf Использовать eventfilter=Event: Newchannel тогда пользователю будет прилетать только определенный события.
- Не подключаться каждый раз при чтении и записи. В рамках библиотеки PAMI пришлось разбираться с классами в php.
- Астериск должен подождать в диалплане пока AMI скрипт установит переменную в канал, вот тут я не нашел ничего лучше чем просто подвесить его на 1500 циклов присвоения переменной – это ужасно я знаю.
Пример pami.php
Пример extensions.conf
Пример manager.conf
1.07.2019Autostart python script
Замечательная статьяо том как запускать python скрипты, стандартными командами sytsemctl.
Freepbx – Google Speech API – Directory recognition
Задача: При входящем звонке распознавать Имя или Фамилию сотрудника и переводить на него.
Особенностью является то, что распознавание имён удалось улучшить подключив параметры:
model:phone,
useEnhanced: true,
phrases: [{"слово1", "Фраза из слов"}],
Используемые статьи:
- Приложение на базе node.js и bash скрипта которое позволяет быстро развернуть систему и провести первые тесты: https://github.com/phsultan/asterisk-eagi-google-speech-recognition
- процесс подключения телефона есть много разных статей но самая удобная и работающая у меня вот эта: Распознавание речи в Asterisk – Voxlink
- Докуметация от гугла
Проблемы: 1. установка окружения Node.js для меня в новинку была поэтому, пришлось сначала понять как устроено приложение Node.js.
отладка:
- asterisk -r – покажет исполнение скрипта и распознанные слова, если распознанных слов нет, то пункт 2
- в папке /usr/local/node_programs/node_speech/samples выполнить: “node recognize.js listen”.
- если выдаст “Error: Could not load the default credentials.” то выполнить команду “export GOOGLE_APPLICATION_CREDENTIALS=/usr/local/node_programs/service_account_file.json” – Она добавит данные по авторизации. и снова выполнить пункт 2.
- Если выдаст ошибку “invalid_grant: Invalid JWT Signature” то у вас проблемы с ключем от гугла. Решение создать ключ в JSON формате для вашего проекта через https://console.cloud.google.com
| Posted in Asterisk, Готовые решения | No Comments »
PUSH NOTIFICATIONS API
От вас необходим ключ .p8 от apple, id ключа, и team id.
Посылаете к нам HTTP запрос, мы отправляем его в эппл.
Полная статистика в реальном времени запросов и ответов.
2.05.2019custom script AGI freepbx per each call
to do any custom dialplan per call (inbound from trunk to extensions) use
macro-dialout-one-predial-hook
to do any custom macro action for outgoing from trunk use:
macro-dialout-trunk-predial-hook
1.05.2019Черный список ip адресов для voip
sh скрипт который
!/bin/bash10.04.2019
BADIPSFILE="badips.list"
BADIPSFILETEMP="$BADIPSFILE".temp
ADDLISTFILE="$BADIPSFILE".load
# get new list
wget https://www.badips.com/get/list/voip/0 -O $BADIPSFILETEMP
# sort new list
sort $BADIPSFILETEMP -o $BADIPSFILETEMP
# touch to be sure that file exist
touch $BADIPSFILE
# diff old ans new file
diff $BADIPSFILE $BADIPSFILETEMP | grep -Po '\d+.\d+.\d+.\d+' > $ADDLISTFILE
# copy new file to old for next ips going fast
cp -f $BADIPSFILETEMP $BADIPSFILE
cp -f drop_temp.xml drop_temp_.xml
BLOCKED_IP=$ADDLISTFILE
IPTABLES="iptables"
if [ -f $BLOCKED_IP ]; then
while read BLOCKED; do
$IPTABLES -A INPUT_direct -i ens192 -s $BLOCKED -p udp -j DROP
done < $BLOCKED_IP
fi
opensips. dispatcher. loadbalancing. wrong destination.
По установке по умолчания, если вы добавите несколько шлюзов в dispatcher то про запросе авторизации, Opensips будет пересылать новый invite на новый шлюз.
решается выставлением hash механизма ‘0’ в функции ds_select_dst который учитывает callid.
| Posted in kamailio, opensips | No Comments »
| Posted in SQL запросы | No Comments »