Привет!
Цель данного поста на примере показать как в FreePBX с помощью Custom Destination регистрировать кастомные контексты, созданные пользователем (обычно в файле /etc/asterisk/extensions_custom.conf).
Зачастую стандартных функций FreePBX вполне хватает что бы удовлетворить нужды заказчиков. Но иногда бывают очень специфичные запросы, для реализации которых приходится писать разные custom context-ы. И вроде бы все хорошо, пока не встает задача направлять звонки в эти контексты посредством админ-панели FreePBX. Тут нам на помощь приходит функция Custom Destination!
К примеру:
Дано:
Допустим наш заказчик имеет 2 магазина в городе. В одном из них стоит сервер с AsteriskNow на борту, который обрабатывает звонки для обоих магазинов. Заказчик купил у sip провайдера красивый номер на 8 каналов вида 560560.
В городе 4 района:
Плюшкино — телефонные номера начинаются на 33
Черемушка — телефонные номера начинаются на 45
Мотыльки — телефонные номера начинаются на 77
Бобры — телефонные номера начинаются на 31
Географически они расположены как на рисунке.
Один магазин находится в районе Плюшкино, где номер ринг-группы продавцов будет 600.
Другой магазин в районе Черемушка, где номер ринг-группы продавцов будет 601.
Задача
Нам нужно, что бы все входящие звонки от потенциальных покупателей обрабатывались тем магазином, который ближе к ним географически. К примеру если звонок поступил с номера 312323, это значит что звонящий находится в районе Бобры, соответственно ближайший к нему магазин находится в районе Черемушка, т.е. звонок должен быть направлен на номер ринг-группы продавцов 601.
Т.е. в зависимости от первых 2-х цифр Caller-ID покупателя мы должны направлять звонок на нужную нам ринг-группу.
Решение
Для этого добавляем в файл /etc/asterisk/extensions_custom.conf новый контекст с именем check-tel-location-mag, следующего вида:
[check-tel-location-mag]
exten => s,1,Set(telnum=${CALLERID(num)})
exten => s,n,GotoIf($[ $["${telnum:0:2}" = "33"] | $["${telnum:0:2}" = "77"] ]?pluwki)
exten => s,n,GotoIf($[ $["${telnum:0:2}" = "31"] | $["${telnum:0:2}" = "45"] ]?ceremuska)
exten => s,n(pluwki),Goto(ext-group,600,1)
exten => s,n(ceremuska),Goto(ext-group,601,1)
Теперь мы можем зарегистрировать созданный нами контекст в FreePBX.
Для этого нужно:
1. Зайти в админ-панель FreePBX -> Tools -> Custom Destination
в поле Custom Destination вписать контекст — check-tel-location-mag,s,1
остальные поля заполняйте как удобно:
2. Нажать Submit Changes
Теперь можно создать входящий маршрут на номер 560560, в котором можно выбрать созданный ранее Custom Destination:
В результате — заказчик доволен, он получил требуемый функционал, а мы научились создавать Custom Destination.
Ссылки:
FreePBX Extension Registry HOW-TO
Автор: ironsf