FreePBX — переадресация с уведомлениями в реальном времени через XMPP

Есть маленький ИТ-отдел в средних размерах организации с филиальной структурой. Сотрудники ИТ-отдела практически постоянно в разъездах по разным филиалам и не всегда бывают доступны по мобильному телефону. Для удобства сотрудников организации было принято решение сделать единый (легкозапоминающийся) номер для технической поддержки. В случае, если техподдержка занята или просто никого нет на месте — звонок должен переадресовываться на мобильные телефоны инженеров и информация о звонке должна прийти в виде сообщения в Jabber.

Переадресация на мобильные

Заходим в веб-интерфейс, Applications => Ring Groups => Add Ring Group. Создаём группу переадресации на мобильные телефоны инженеров, например, «922»:

Решётка в конце номера даёт нам возможность звонить из основного контекста FreePBX, где позволены исходящие звонки. Fixed CID Value — нужно, если ваш провайдер отбивает неверные CID, потому что передаются внутренние номера абонентов. Стратегия RingAll позволяет звонить всем одновременно, если кто недоступен — пропускаем, если один берёт трубку — у остальных сразу сбрасывается звонок.

Лучше поставить приятную музыку на группу, так как в разных версиях FreePBX делает странные вещи с гудками в группах. Проверить правильность настройки можно позвонив по номеру 922.

Теперь создаём основную группу технической поддержки, например «911»:

Включение Skip Buzy Agent позволяет нам переходить сразу к Destination if no answer, если все сотрудники заняты.
В Destination if no answer выбираем группу переадресации на мобильные.

В итоге получилось, что звонок поступает на группу 911, если сотрудники заняты или никто не поднимает трубку несколько секунд, звонок переходит в группу 922. Поступив в 922, звонок пробует дозвониться сразу до всех перечисленных мобильных номеров, если никто не поднимает — происходит завершение вызова.

Возникшие проблемы:

Оповещения о поступающем и пропущенном вызове

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

Посмотрев разные решения, определились что самое быстрое среди них XMPP(к тому же ejabberd уже был развёрнут для системы мониторинга). Между отправкой сообщения и приёмом обычно проходит не более секунды.

1) Создайте пользователя на вашем Jabber-сервере для АТС. В нашем случае это пользователь PBX@company-name.su
2) Приведите файл /etc/asterisk/jabber.conf к примерно следующему виду. В более новых версиях Asterisk это файл /etc/asterisk/xmpp_custom.conf

[general]
;debug=yes
;autoprune=yes
;autoregister=yes
;auth_policy=accept

[asteriskjabber]
type=client
serverhost=jabber.company-name.su
username=pbx@company-name.su
secret=Pa$$w0rd
port=5222
usetls=yes
usesasl=yes
status=available
statusmessage=«I am Asterisk!»
buddy=username1@company-name.su,username2@company-name.su,username3@company-name.su
;timeout=100

3) Добавляем свой номер вручную в /etc/asterisk/extensions_custom.conf

exten => 9999,1,JabberSend(asteriskjabber,username1@company-name.su,${CALLERID(all)} звонил(а) в ${STRFTIME(${EPOCH},,%c)}!) / +74951111111)
exten => 9999,n,JabberSend(asteriskjabber,username2@company-name.su,${CALLERID(all)} звонил(а) в ${STRFTIME(${EPOCH},,%c)}!) / +74951111111)
exten => 9999,n,JabberSend(asteriskjabber,username3@company-name.su,${CALLERID(all)} звонил(а) в ${STRFTIME(${EPOCH},,%c)}!) / +74951111111)
exten => 9999,n,Hungup()

В сообщение мы добавили переменные: для отображения времени звонка, в случае если сообщение пришло с опозданием и переменную с внутренним CID абонента, который звонил. В конце для удобства дописали прямой номер офиса, чтобы перезванивать не залезая в телефонную книгу.

4) Перезапускаем сервис астериска, чтобы применились новые конфиги.
service asterisk restart

Смотрим в консоли астериска результат команды jabber show connections. Если нет слова Connected, ищем ошибки. Если не получается, включаем дебаг jabber в файле /etc/asterisk/jabber.conf.

Теперь проверить работу отправки сообщений в Jabber можно просто позвонив по номеру 9999.

5) Заходим обратно в веб-интерфейс и добавляем номер 9999# (обязательно с решеткой) в группу мобильной переадресации 922 (не запрещено добавлять и в другие места, например, такие как Folow Me).

Теперь начиная с поступления вызова на 922, вместе с вызовами на мобильные отправляются сообщения в Jabber. Как правило, сообщения поступают на пару секунд быстрее вызовов. Их можно прочитать даже после поднятия трубки в строке оповещений телефона.

Примечания: если у вас нет своего сервера Jabber, вы можете использовать практически любые публичные сервера. Например, гугловские.

Самая частая проблема jabber-клиента астериска — он не поддерживает некоторые методы шифрования.

Сейчас на сайте

Сейчас на сайте 0 пользователей и 1 гость.