Logstash: Useful grok patterns for asterisk
Где живут grok-patterns (Ubuntu):
1 |
/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns |
Версия в пути может изменяться, но основная идея ясна
Суть: по умолчанию в filters для asterisk.json для описания имени транка и канала используется grok BASE16FLOAT, который, если у вас, как у меня, в имени транка есть BASE64FLOAT-последовательность (например как у меня -сс-) — откусит имя транка по ней.
| Рубрики: Asterisk, Elastic stack, Logstash| Метки: Asterisk, Elasticsearch, elk, Logstash
Регистрация мультииндексного транка на 1 register
Как подключиться по протоколу SIP к поставщику услуг при одиночной регистрации, но с возможностью принятия звонков с более 1 линии. Или «SIP-транк с регистрацией»
От оператора получаем: LoginId, Secret, Registrar.
LoginID – 7-и значный номер в виде 1234567, он и юзернейм для регистрации, и идентификатор линии.
Также в данную регистрацию оператор предоставляет пул номеров: 1234568-1234599
Если произвести регистрацию как для обычной линии:
1 |
Register => 1234567:PWD@operator/1234567 |
то все входящие звонки будут поступать исключительно с индексом 1234567 и обработать в dial plan остальной пул номеров будет не возможно т.к. вызовы будут отбиваться с сообщением fake auth rejected.
На самом деле, это абсолютно верное поведение астериска, так и должно быть (хотя в новых версиях insecure=port,invite позволяет начхать на то, какой там exten прописан в register string)
Во избежание головной боли, приводим строку регистрации в следующий вид:
1 2 3 4 5 6 7 8 9 10 11 12 |
Register => 1234567:PWD@operator/s [operator] host=_IP Address type=peer defaultuser=1234567 fromuser=1234567 fromdoamin=Registrar secret=_PWD insecure=port,invite context=from-trunk qualify=no |
Все входящие звонки будут поступать в контекст from-trunk на обработчик s.
Достанем из SIP_HEADER идентификатор линии:
1 2 3 4 5 6 7 |
[from-trunk] exten => s,1,Set(ID=${SIP_HEADER(TO):5:10}) exten => s,2,Set(ID=${CUT(ID,@,1)}) exten => s,3,Goto(${ID},1) exten => 1234567,1,Dial(SIP/111) exten => 1234568,1,Dial(SIP/222) exten => _12345[789]X,1,Queue(internet, 600) |
PROFIT!
Автоинформатор с произвольным текстом

Пришла с час назад идея облегчить жизнь нашему персоналу — по ночам уведомлять их о падении оборудования телефонным звонком. При чем так, чтобы не просто «у вас что-то сломалось», а с указанием точного адреса.
Модуль мониторинга — где-то у админов, по событию они могут сгенерировать строку с адресом и номером телефона ответственного, так что задача сводится к тому, чтобы:
- Получить параметры
- Сформировать коллбек
- После поднятия трубки — продиктовать полученный адрес.
Нам потребуются:
- Сервер с астериском
- ffmpeg. Можно в дефолтной конфигурации
- apache (у меня с mod_rewrite чтобы ограничить доступ к функционалу только конкретным инстансам)
- 15 минут времени
Итак, приступим.
Обзор ATA Dragino DT-01

В качестве альтернативы существующим в Украине АТАшкам заказал на aliexpress вот такое чудо:
Dragino DT01 (линк кликабелен)
Из описания:
— Hardware System:
· Processor: 400MHz, 24K MIPS
· 64MB RAM
· 16MB Flash
· DC Input: 9 ~ 12v or 5V
— Interface:
· 1 x FXS port
· 2 x RJ45 ports
· USB 2.0 Host port to connect 3G dongle or USB flash
— WiFi Spec:
· IEEE 802.11b/g/n
· Frenquency Band: 2.4 ~ 2.462GHz
· Chip Antenna or External antenna
Features:
o Open Source OpenWrt system
o Asterisk 11.16.0
o Support SIP / IAX2 server/client.
o Support multiply SIP / IAX2 entries
o Easy configure SIP/IAX2/dial-plan in Web UI
o Managed by Web GUI or SSH
o Firmware upgrade via Web
o Support WiFi AP, Client or Ad-Hoc(Mesh) mode
o Optional external antenna for long distance connection
o Support USB dongle for 3G/4G dial up
o Support USB flash for extend storage
По сути — это ардуина с Wifi, ethernet и платой FXS.
Дальше будет немного сухого текста (честно говоря было лениво переписывать отчет, который я по ней предоставлял по работе), а затем личные впечатления.
Читать далее »
Получение количества входящих звонков с 1 транка из asterisk в консоль Linux

Сегодня прилетела задача — писать в лог раз в 5 минут количество активных входящих звонков с каждого из транков.
И вот возник вопрос: как передать в bash значение переменной asterisk без использования AMI.
Получилось следующее:
В контексте incoming транка делаем следующее:
1 2 3 4 |
;создаем группу exten => _XX.,106,Set(GROUP()=IncomingCall) ;складываем текущее значение кол-ва звонков группы во внутреннюю БД, семейство test, параметр count exten => _XX.,107,Set(DB(test/count)=${GROUP_COUNT(IncomingCall)}) |
и из консоли добываем так:
1 |
asterisk -rx 'database get test count' | grep Value | awk ' {print $2} ' |
PROFIT