Colored Fax with raspberry and hylafax+.
Для работа цветных факсов нужно использовать hylafax+ , не путать с обычным Hylafax. В целом установка проходит по порядку, основные проблемы это как обычно поставить все нужные пакеты аккуратно.
Для работы используются следующие статьи:
Hylafax+ на sourceforge скачать нужно последнюю версию 7+.
hylafax+ installation from svn.
hylafax+ about colored fax – во время ./configure необходимо обратить внимание на то, что нужные библиотеки присутствуют в системе.
для работы понадобится iaxmodem и две библиотеки spandsp и libiax2, которые идут вместе с iaxmodem.
- Скачать hylafax+ и скомпилировать, во время компиляции gs программа была не найдена, но я просто создал symlink на то место где hylfax+ её искала. хотя это не обязательно.
- скачать iaxmodem и скомпилировать две библиотеки идущие с ним в папке Lib. (кстати вероятно этот шаг можно облегчить, если использовать готовые пакеты с iaxmodem )
- Сконнектить iaxmodem с астериском, статьи которые помогут это сделать: статья про обычный hylafax и связке с астериском, у меня в прицнипе получилось всё сделать через web freepbx, единственное, что если Host для iax пользователя установить как 127.0.0.1 то, регистрация не проходила, либо проходила с ошибкой, поэтому я сделал dynamic, но permit выставил для 127.0.0.1/32 . О запуске модема можно также в этой статье почитать, но и описание внутри пакета тоже простое и подробное.
- После того как модем появился в системе, можно запустить faxgetty и позвонить на номер модема в примере он указан как iaxmodem0, но я использовал 2000.
Для тестирования факсов использовал кстати, ventafax – Это программа с очень долгой историей, но удивительно робит и сейчас.
9.08.2019systemd. opensips 1.7. centos7
Чтобы использовать автозагрузку на centos7 без понимания как работает systemd можно взять файл из новых версий opensips для systemd доработать его и добавить к себе в систему
- разместить файл opensips.service в /etc/systemd/multi-user.target.wants
- отредактировать файл:
[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.2019MySQL 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
| Posted in Asterisk | No Comments »