Инструменты пользователя

Инструменты сайта


faq:did-routs

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
faq:did-routs [2021/08/30 13:18]
Портнов Алексей создано
faq:did-routs [2024/02/01 12:40] (текущий)
Портнов Алексей [Манго офис]
Строка 1: Строка 1:
  
 ====== Маршрутизация звонков по DID ====== ====== Маршрутизация звонков по DID ======
 +[[faq:​|Обратно к инструкциям]]
  
 ===== Введение ===== ===== Введение =====
Строка 10: Строка 11:
   * +7(499)638-25-84   * +7(499)638-25-84
  
-В интерфейсе MikoPBX создана только одна учетная запись "​[[providers|Провайдер телефонии]]"​.+В интерфейсе MikoPBX создана только одна учетная запись "[[:providers|Провайдер телефонии]]"​.
 Каждый номер телефона необходимо направить на свой маршрут,​ к примеру на различные IVR.  Каждый номер телефона необходимо направить на свой маршрут,​ к примеру на различные IVR. 
  
Строка 41: Строка 42:
 ===== Возможные проблемы ===== ===== Возможные проблемы =====
  
 +==== DID в заголовке To ====
  
 +На практике,​ не всегда все так просто. К примеру я встречал провайдера,​ который присылает следующий INVITE:
  
 +<​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:​84996382584@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
 +Content-Length:​ 351
 +</​code>​
 +
 +В этом случае в строке "​INVITE"​ описывается логин учетной записи,​ в вот DID уже описывается в заголовке "​To"​. ​
 +Для корректной настройки достаточно в разделе [[:​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_PARSE_URI(${PJSIP_HEADER(read,​To)},​user)})
 + same => n,​ExecIf($["​${toNum}"​ != "​${EXTEN}"​]?​Gosub(${CUT(CONTEXT,,​1-3)},​${toNum},​1))
 + same => n,return
 +</​code>​
 +  - функция "​**PJSIP_HEADER**"​ считывает значение заголовка "​**To**"​
 +  - функция "​**PJSIP_PARSE_URI**"​ получает из значения заголовка поле "​**user**",​ которое соответствует значению DID
 +  - 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:​|Обратно к инструкциям]]
  
faq/did-routs.1630329524.txt.gz · Последние изменения: 2021/08/30 13:18 — Портнов Алексей