- PVSM.RU - https://www.pvsm.ru -
В ходе работы над проектом внедрения Lync 2013 я столкнулся с проблемой, связанной с переадресацией (Call Forwarding) и одновременным вызовом (Simultaneous Ring). Тестовая группа жаловалась на то, что не работает переадресация.
Траблшутинг выявил, что данная проблема существует в определенных сценариях. Проблема связана с тем, что провайдер не маршрутизирует исходящии вызовы, где номер звонящего (calling number) не входил в пул номеров, предоставленный клиенту.
Подробное описание и решение проблемы — под катом.
Схема стыковки Lync инфраструктуры с телефонией:
На схеме показаны:
На следующей схеме показаны возможные сценарии переадресации вызовов.
Условные обозначения:
В сценарии #3 провайдер «режет» исходящий звонок от организации, так как calling number «E1» не зарегистрирован за организацией. По хорошему, провайдер должен отработать вызов по соответствующему маршруту и сделать запись в билинговой системе согласно полю History-info. Но в нашем случае, провайдер не принимет поле HISTORY-INFO, работа билинговой системы провайдера построена только на атрибутах FROM, TO.
От Lync Mediation на Audiocodes приходит следующий SIP Invite запрос:
FROM: <sip:"E1";phone-context=enterprise@domain.net;user=phone>;epid=7B11BD1265;tag=8c9e1f2146
TO: <sip"E2"@voice_gw.domain.net;user=phone>CSEQ: 329 INVITE
HISTORY-INFO: <sip:"L1"@lyncmediation1.domain.net;user=phone>;index=1;ms-retarget-reason=forwarding,<sip:"E2"@lyncmediation1.domain.net;user=phone>;index=1.1
Варианты решения:
Первый вариант даже не стали пробовать.
Второй и третий вариант дают больше минустов, чем плюсов. Исправляется сценарий #3, но при этом теряется полезный функционал в сценариях #1, 2, 4 – все переадресованные вызовы приходят с номера, на котором активирована переадресация.
Было принято решение использовать третий вариант, доработов его.
Необходимо, используя Message Manipulations Rule, заменить значение поля FROM c sip:«E1» на sip«L1» для сообщений, где “E1” и «E2» внешнии номера.
Для остальных сценариев данное правило не должно применяться, так как это приведет к потере функциональности. Абонент, получающий переадресованный вызов, не будет видеть действительный caller-id вызывающего.
Таблица активации правила подмены calling number:
# | FROM | Forward TO(History-info) | IsRuleNeedToBeApplied |
---|---|---|---|
1 | internal | interna | FALSE |
2 | external | internal | FALSE |
3 | external | external | TRUE |
4 | internal | external | FALSE |
Пояснение к таблице:
Конфигурация:
Таблица правил:
Indx | ID | MsgType | Condition | ActSubj | ActType | ActValue | RowRole |
---|---|---|---|---|---|---|---|
1 | 1 | invite | header.history-info regex (sip:+7(717212....)@) | var.call.src.0 | modify | $2 | 0 |
2 | 1 | invite | header.to regex (sip:(?!717212)(.*)@) | var.global.0 | modify | '1' | 0 |
3 | 1 | invite | header.from regex (sip:(?!717212)(.*)@) | header.from.url.user | modify | var.call.src.0 | 0 |
Правило №1 проверяет есть ли заголовок HISTORY-INFO, формирует группу, соответствующую шаблону внутреннего номера, записывает эту группу в переменную var.call.src.0. Данная переменная будет использоваться в 3-м правиле для подмены calling number в заголовке header.from.url.user.
Правило №2 проверяет заголовок TO на наличие внешнего номера. Используется функция regex “Negative lookahead”, которая исключает локальные номера по префиксу 717212. В случае положительного результата записывается переменная var.global.0. Данная переменная не несет ни какой роли.
Правило №3 проверяет заголовок FROM на наличие внешнего номера. Используется функция regex “Negative lookahead”, которая исключает локальные номера по префиксу 717212. В случае положительного результата используется переменная var.call.src.0, записанная на шаге 1, для подмены called number в заголовке header.from.url.user.
В сценарии #3 calling number подменяется на номер инициатора переадресации.
В остальных сценариях calling number не изменяется.
GWINBOUNDMANIPULATIONSET = 1
[ MessageManipulations ]
FORMAT MessageManipulations_Index = MessageManipulations_ManSetID, MessageManipulations_MessageType, MessageManipulations_Condition, MessageManipulations_ActionSubject, MessageManipulations_ActionType, MessageManipulations_ActionValue, MessageManipulations_RowRole;
MessageManipulations 1 = 1, "invite", "header.history-info regex (sip:+7(717212....)@)", "var.call.src.0", 2, "$2", 0;
MessageManipulations 2 = 1, "invite", "header.to regex (sip:(?!717212)(.*)@)", "var.global.0", 2, "'1'", 0;
MessageManipulations 3 = 1, "invite", "header.from regex (sip:(?!717212)(.*)@)", "header.from.url.user", 2, "var.call.src.0", 0;
[ MessageManipulations ]
Автор: rumititim
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ip-telefoniya/81643
Ссылки в тексте:
[1] здесь.: https://www.linkedin.com/groups/Who-know-how-setup-Audiocodes-3411197.S.5816062479381315584
[2] x.x.x.x/AdminPage: http://x.x.x.x/AdminPage
[3] Quick Refence Guide. SIP Message Manipulation: http://ftp.bircom.com/AudioCodes_Ailesi/Dokumanlar/Mediant4000/LTRT- 28623 SIP Message Manipulations Quick Reference Guide 6.8.pdf
[4] Regexr.com Online tool to learn, build and test Regular Expressions: http://regexr.com/
[5] Источник: http://habrahabr.ru/post/249711/
Нажмите здесь для печати.