12.08.2019

Colored Fax with raspberry and hylafax+.

Для работа цветных факсов нужно использовать hylafax+ , не путать с обычным Hylafax. В целом установка проходит по порядку, основные проблемы это как обычно поставить все нужные пакеты аккуратно.

Для работы используются следующие статьи:

Hylafax+ на sourceforge скачать нужно последнюю версию 7+.

hylafax+ installation from svn.

hylafax+ about colored fax – во время ./configure необходимо обратить внимание на то, что нужные библиотеки присутствуют в системе.

для работы понадобится iaxmodem и две библиотеки spandsp и libiax2, которые идут вместе с iaxmodem.

  1. Скачать hylafax+ и скомпилировать, во время компиляции gs программа была не найдена, но я просто создал symlink на то место где hylfax+ её искала. хотя это не обязательно.
  2. скачать iaxmodem и скомпилировать две библиотеки идущие с ним в папке Lib. (кстати вероятно этот шаг можно облегчить, если использовать готовые пакеты с iaxmodem )
  3. Сконнектить iaxmodem с астериском, статьи которые помогут это сделать: статья про обычный hylafax и связке с астериском, у меня в прицнипе получилось всё сделать через web freepbx, единственное, что если Host для iax пользователя установить как 127.0.0.1 то, регистрация не проходила, либо проходила с ошибкой, поэтому я сделал dynamic, но permit выставил для 127.0.0.1/32 . О запуске модема можно также в этой статье почитать, но и описание внутри пакета тоже простое и подробное.
  4. После того как модем появился в системе, можно запустить faxgetty и позвонить на номер модема в примере он указан как iaxmodem0, но я использовал 2000.

Для тестирования факсов использовал кстати, ventafax – Это программа с очень долгой историей, но удивительно робит и сейчас.

9.08.2019

systemd. opensips 1.7. centos7

Чтобы использовать автозагрузку на centos7 без понимания как работает systemd можно взять файл из новых версий opensips для systemd доработать его и добавить к себе в систему

  1. разместить файл opensips.service в /etc/systemd/multi-user.target.wants
  2. отредактировать файл:

[Unit]
Description=OpenSIPS is a very fast and flexible SIP (RFC3261) server
Documentation=man:opensips
After=network.target mariadb.service postgresql.service rtpproxy.service
Requires=mariadb.service

[Service]
Type=forking
User=root
Group=root
RuntimeDirectory=opensips
RuntimeDirectoryMode=775
Environment=P_MEMORY=32 S_MEMORY=32
EnvironmentFile=-/etc/sysconfig/opensips
PermissionsStartOnly=yes
PIDFile=%t/opensips/opensips.pid
ExecStart=/usr/local/sbin/opensips -P %t/opensips/opensips.pid -f /etc/opensips/opensips.cfg
ExecStop=/usr/bin/pkill –pidfile %t/opensips/opensips.pid
Restart=always
TimeoutStopSec=30s
LimitNOFILE=262144

[Install]
WantedBy=multi-user.target

3. выполнить systemctl enable openspis.service

по идее это всё, можно перезагружать, если ошибки будут, то проверить можно в логах journalctl -xe

полезная статья.

3.08.2019

MySQL ORDER BY / LIMIT performance: late row lookups

Оптимизация запросов, для большой выборки и исключения повторений крайне полезная статья.

вкраце можно использовать вот такую конструкцию:

SELECT  distinctl.id
FROM    (
SELECT  id
FROM    t_limit
WHERE columnA='53'
) o
JOIN    t_limit l
ON      l.id = o.id

15.07.2019

zoiper IOS ANDROID PUSH notification

чтобы получить push уведомления, необходимо на своем телефоне при установке Zoiper

1. разрешить использовать сервис push уведомлений

2. разрешить на своём SIP сервере подсети
IP – 185.117.83.192/27 , port 443

У zoiper Это стоит 75 рублей в месяц., других способов отправить push уведомление на чужое приложение я не вижу.

Статья zoiper.

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

ну, прекрасно же. Примеры и статья

3.07.2019

Asterisk as Wholesale. PAMI instead of AGI. Stable AMI connection.

Во время выполнения диалплана необходимо уточнять маршруты для звонка и делать то нужно из базы Mysql. Классический вариант использовать AGI Либо FastAGI, Но здесь я рассмотрю вариант запуска в фоне скрипта который, получая информацию о звонке, будет устанавливать переменную обратно в диалплан.

Asterisk адаптированный для wholesale, кстати, достаточно быстро всё обрабатывает используя минимум модулей и запросы в базу через ODBC. на удивление. Но всё равно с Opensips И Kamailio не сравнится.

Используем: PAMI library при установке пришлось повозиться т.к. не очень знаком с composer, но почитав про него – всё получилось. библиотеки ставятся в текущую директорию agi-bin, тогда будет доступ.

Основная проблема это поддержка коннекта между скриптом и астером, а также отсутствие ошибок между ними. Если вы запустите по умолчанию скрипты с ами, то вы наверняка получите внезапное завершение программы при анализе event от астериска. Есть несколько факторов, которые влияют на стабильность соединения:

  1. read timeout\read error – возникает на стороне скрипта, нужно обрабатывать такие события, в скрипте для этого будет try { } catch {}.
  2. Снизить поток событий из Астериска. В manager.conf Использовать eventfilter=Event: Newchannel тогда пользователю будет прилетать только определенный события.
  3. Не подключаться каждый раз при чтении и записи. В рамках библиотеки PAMI пришлось разбираться с классами в php.
  4. Астериск должен подождать в диалплане пока AMI скрипт установит переменную в канал, вот тут я не нашел ничего лучше чем просто подвесить его на 1500 циклов присвоения переменной – это ужасно я знаю.

Пример pami.php

Пример extensions.conf

Пример manager.conf

1.07.2019

Autostart python script

Замечательная статьяо том как запускать python скрипты, стандартными командами sytsemctl.

28.06.2019

Freepbx – Google Speech API – Directory recognition

Задача: При входящем звонке распознавать Имя или Фамилию сотрудника и переводить на него.

Особенностью является то, что распознавание имён удалось улучшить подключив параметры:

 model:phone,
useEnhanced: true,
phrases: [{"слово1", "Фраза из слов"}],

Используемые статьи:

  1. Приложение на базе node.js и bash скрипта которое позволяет быстро развернуть систему и провести первые тесты: https://github.com/phsultan/asterisk-eagi-google-speech-recognition
  2. процесс подключения телефона есть много разных статей но самая удобная и работающая у меня вот эта: Распознавание речи в Asterisk – Voxlink
  3. Докуметация от гугла

Проблемы: 1. установка окружения Node.js для меня в новинку была поэтому, пришлось сначала понять как устроено приложение Node.js.

отладка:

  1. asterisk -r – покажет исполнение скрипта и распознанные слова, если распознанных слов нет, то пункт 2
  2. в папке /usr/local/node_programs/node_speech/samples выполнить: “node recognize.js listen”.
  3. если выдаст “Error: Could not load the default credentials.” то выполнить команду “export GOOGLE_APPLICATION_CREDENTIALS=/usr/local/node_programs/service_account_file.json” – Она добавит данные по авторизации. и снова выполнить пункт 2.
  4. Если выдаст ошибку “invalid_grant: Invalid JWT Signature” то у вас проблемы с ключем от гугла. Решение создать ключ в JSON формате для вашего проекта через https://console.cloud.google.com

19.06.2019

PUSH NOTIFICATIONS API

От вас необходим ключ .p8 от apple, id ключа, и team id.

Посылаете к нам HTTP запрос, мы отправляем его в эппл.

Полная статистика в реальном времени запросов и ответов.

2.05.2019

custom 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

Tags: ,
| Posted in Asterisk | No Comments »