Маршрутизация по DID номеру
Введение
При настройке входящей маршрутизации часто возникает ситуация, когда провайдер предоставляет учетную одну запись SIP для нескольких купленных номеров телефонов.
К примеру у МИКО есть номера телефонов:
+7(495)229-30-42
+7(499)638-25-84
В интерфейсе MikoPBX создана только одна учетная запись «Провайдер телефонии». Каждый номер телефона необходимо направить на свой маршрут, к примеру на различные IVR.
Тут к приходит на помощь DID номер, который провайдер может передавать при входящих звонках. Зная DID номер, можно для провайдера описать несколько входящие маршрутов, с различными DID, что позволит решить описанную выше задачу.
Как это работает
Для анализа звонков я обычно использую «приложение Sngrep». Вот пример запроса от провайдера при входящем:
При получении такого пакета, MikoPBX проанализирует первую строку с ключевым словом «INVITE
», значение «84996382584
» и будет являться DID номером.
Возможные особенности
DID в заголовке To
На практике, не всегда все так просто. К примеру я встречал провайдера, который присылает следующий INVITE
:
В этом случае в строке «INVITE
» описывается логин учетной записи, в вот DID уже описывается в заголовке «». Для корректной настройки достаточно в разделе Кастомизация системных файлов добавить в конец файла «extensions.conf» следующие строки:
функция «
PJSIP_HEADER
» считывает значение заголовка «To
»функция «
PJSIP_PARSE_URI
» получает из значения заголовка поле «user
», которое соответствует значению DIDGoto
перемещает канал в начало, для повторной инициализации маршрута"
1-3
" - означает, что нужно взять первые три слова из "SIP-1622040384-incoming-custom
", по сути, нужно из этой строки получить все до "-custom
", в старых версиях АТС может потребоваться скорректировать это правилоSIP-1622040384
- это ID учетной записи провайдера MikoPBX, можно подсмотреть в адресной строке браузера при редактировании учетной записи
Замена DID на произвольный
Следующий пример удобно применять, когда провайдер не предоставляет информации по номеру, на который пришел вызов, поступает информация только о логине. При этом, важно, чтобы одному логину соответствовал один DID.
"
user1
" и "admin
" - это примеры популярных логин
Установить CID на основании DID
Если вызов поступен на номер
74952293042
, тоCID (name)
будет установлен в значениеSales
Если вызов поступен на номер
74952291111
, тоCID (name)
будет установлен в значениеSupport
DID произвольном заголовке
Такое встречается при использовании сервиса roistat. Сервис при входящем может прислать следующий запрос:
Корректного DID нет ни в INVITE
, ни в поле To, но при этом появился новый заголовок «x-roistat-phone».
Для корректной настройки достаточно в разделе Кастомизация системных файлов добавить в конец файла «extensions.conf» следующие строки:
функция «
PJSIP_HEADER
» считывает значение заголовка «x-roistat-phone
»Goto
перемещает канал в начало, для повторной инициализации маршрута
Манго офис
Получение номера, на который позвонил клиент из поля «Diversion
»:
Более универсальный вариант:
Novafon (zadarma)
Получение номера, на который позвонил клиент из заголовка «CALLED_DID
»:
Last updated