Есть маленький ИТ-отдел в средних размерах организации с филиальной структурой. Сотрудники ИТ-отдела практически постоянно в разъездах по разным филиалам и не всегда бывают доступны по мобильному телефону. Для удобства сотрудников организации было принято решение сделать единый (легкозапоминающийся) номер для технической поддержки. В случае, если техподдержка занята или просто никого нет на месте — звонок должен переадресовываться на мобильные телефоны инженеров и информация о звонке должна прийти в виде сообщения в 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, звонок пробует дозвониться сразу до всех перечисленных мобильных номеров, если никто не поднимает — происходит завершение вызова.
Пример:
В итоге через месяц все привыкли, прямые звонки инженерам практически прекратились. Сейчас такая схема устраивает даже самых рьяных сторонников «прямых звонков», т.к. по проблеме начинают работать сразу, а не ждут когда кто-нибудь вернётся с обеда или с перекура.
2) Наш провайдер в один прекрасный день перестал пропускать звонки с «кривыми» CID, поэтому пришлось в срочном порядке найти параметр Fixed CID Value. Теперь на любой исходящий из этой группы подставлялся указанный CID.
3) В случае, если звонок переадресовался на мобильный, разговор почти всегда начинался с фразы «А Вы кто?», т.к. действительно непонятно кто звонит, на мобильном определялся номер компании… Навыки узнавания по голосу при качестве GSM связи были развиты не у всех инженеров. Решили эту проблему оповещением в jabber.
Оповещения о поступающем и пропущенном вызове
В случае переадресации на мобильный видно только внешний номер организации, непонятно кому перезванивать в случае разрыва связи.
Посмотрев разные решения, определились что самое быстрое среди них 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-клиента астериска — он не поддерживает некоторые методы шифрования.
Автор: AntiHelper