Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
faq:did-routs [2021/08/30 13:27] Портнов Алексей |
faq:did-routs [2024/02/01 12:40] (текущий) Портнов Алексей [Манго офис] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Маршрутизация звонков по DID ====== | ====== Маршрутизация звонков по DID ====== | ||
+ | [[faq:|Обратно к инструкциям]] | ||
===== Введение ===== | ===== Введение ===== | ||
Строка 40: | Строка 41: | ||
===== Возможные проблемы ===== | ===== Возможные проблемы ===== | ||
+ | |||
+ | ==== DID в заголовке To ==== | ||
На практике, не всегда все так просто. К примеру я встречал провайдера, который присылает следующий INVITE: | На практике, не всегда все так просто. К примеру я встречал провайдера, который присылает следующий INVITE: | ||
Строка 71: | Строка 74: | ||
- функция "**PJSIP_PARSE_URI**" получает из значения заголовка поле "**user**", которое соответствует значению DID | - функция "**PJSIP_PARSE_URI**" получает из значения заголовка поле "**user**", которое соответствует значению DID | ||
- Gosub перемещает канал в начало, для повторной инициализации маршрута | - Gosub перемещает канал в начало, для повторной инициализации маршрута | ||
+ | - **SIP-1622040384** - это ID учетной записи провайдера MikoPBX, можно подсмотреть в адресной строке браузера при редактировании учетки | ||
+ | ==== DID произвольном заголовке ==== | ||
+ | |||
+ | Такое встречается при использовании сервиса **roistat**. Сервис при входящем может прислать следующий запрос: | ||
+ | <code> | ||
+ | INVITE sip:mikoteam@93.188.XX.XX SIP/2.0 | ||
+ | Via: SIP/2.0/UDP 81.88.86.65:5060;branch=z9hG4bK1cf7.16247c44.0;cid=2 | ||
+ | Max-Forwards: 67 | ||
+ | Contact: <sip:81.88.86.65> | ||
+ | To: <sip:mikoteam@93.188.XX.XX> | ||
+ | From: "79260577653"<sip:79260577653@mangosip.ru>;tag=5e1a5a28 | ||
+ | Call-ID: JUm-E_ISk4DPaL8Npv2Hlw.. | ||
+ | CSeq: 1 INVITE | ||
+ | Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, UPDATE, UPDATE, INFO, REFER, MESSAGE | ||
+ | Content-Type: application/sdp | ||
+ | Supported: replaces | ||
+ | User-Agent: Softswitch3 | ||
+ | x-roistat-phone: 84996382584 | ||
+ | Content-Length: 351 | ||
+ | </code> | ||
+ | Корректного DID нет ни в **INVITE**, ни в поле **To**, но при этом появился новый заголовок "x-roistat-phone". | ||
+ | |||
+ | Для корректной настройки достаточно в разделе [[:custom-files|Кастомизация системных файлов]] добавить в конец файла "extensions.conf" следующие строки: | ||
+ | <code> | ||
+ | [SIP-1622040384-incoming-custom] | ||
+ | exten => _[0-9*#+a-zA-Z][0-9*#+a-zA-Z]!,1,NoOp(------) | ||
+ | same => n,Set(toNum=${PJSIP_HEADER(read,x-roistat-phone)}) | ||
+ | same => n,ExecIf($["${toNum}x" != "x" && "${toNum}" != "${EXTEN}"]?Gosub(${CUT(CONTEXT,,1-3)},${toNum},1)) | ||
+ | same => n,return | ||
+ | </code> | ||
+ | - функция "**PJSIP_HEADER**" считывает значение заголовка "**x-roistat-phone**" | ||
+ | - Gosub перемещает канал в начало, для повторной инициализации маршрута | ||
+ | |||
+ | |||
+ | ==== Манго офис ==== | ||
+ | |||
+ | Получение номера, на который позвонил клиент из поля "Diversion": | ||
+ | |||
+ | <code> | ||
+ | [SIP-1622040384-incoming-custom] | ||
+ | exten => _[0-9*#+a-zA-Z][0-9*#+a-zA-Z]!,1,NoOp(------) | ||
+ | same => n,Set(tmpDiversion=${PJSIP_HEADER(read,Diversion)}) | ||
+ | same => n,ExecIf($["x${tmpDiversion}" != "x"]?Set(toNum=${CUT(CUT(tmpDiversion,>,1),:,2)})) | ||
+ | same => n,ExecIf($["${toNum}x" != "x" && "${toNum}" != "${EXTEN}"]?Gosub(${CUT(CONTEXT,,1-3)},${toNum},1)) | ||
+ | same => n,return | ||
+ | </code> | ||
+ | |||
+ | Более универсальный вариант: | ||
+ | <code>[add-trim-prefix-clid-custom] | ||
+ | exten => _[0-9*#+a-zA-Z][0-9*#+a-zA-Z]!,1,NoOp(------) | ||
+ | same => n,Set(tmpDiversion=${PJSIP_HEADER(read,Diversion)}) | ||
+ | same => n,ExecIf($["x${tmpDiversion}" != "x"]?Set(toNum=${CUT(CUT(tmpDiversion,@,1),:,2)})) | ||
+ | same => n,ExecIf($["${toNum}x" != "x" && "${toNum}" != "${EXTEN}"]?Gosub(${contextID},${toNum},1)) | ||
+ | same => n,return</code> | ||
+ | ==== Novafon (zadarma) ==== | ||
+ | |||
+ | Получение номера, на который позвонил клиент из заголовка "CALLED_DID": | ||
+ | <code> | ||
+ | [SIP-1622040384-incoming-custom] | ||
+ | exten => _[0-9*#+a-zA-Z][0-9*#+a-zA-Z]!,1,NoOp(------) | ||
+ | same => n,Set(toNum=${PJSIP_HEADER(read,CALLED_DID)}) | ||
+ | same => n,ExecIf($["${toNum}x" != "x" && "${toNum}" != "${EXTEN}"]?Gosub(${CUT(CONTEXT,,1-3)},${toNum},1)) | ||
+ | same => n,return | ||
+ | </code> | ||
+ | [[faq:|Обратно к инструкциям]] | ||