Главная Exchange/UC, Новое Маршрутизируем звонки в Lync: как отловить, преобразовать телефонный номер и направить его по нужному маршрут
  • Маршрутизируем звонки в Lync: как отловить, преобразовать телефонный номер и направить его по нужному маршрут

    Статью изначально я задумывал как справочник по регулярным выражениям, использующимся при маршрутизации звонков в Lync сервере, однако в ходе ее написания я понял, что необходимо помимо описания регулярных выражений, все таки рассказать, как и где они используются. Поэтому получилась довольно объемная заметка, состоящая из описания процесса прохождения телефонного звонка через правила нормализации и маршруты а также из справочника по регулярным выражениям. Я очень надеюсь, что после прочтения статьи появится четкое понимание каким образом звонки проходят через правила Lync и как грамотно настроить правила нормализации и маршрутизации. Буду благодарен за любые отзывы.

     

    Итак, давайте рассмотрим процесс прохождения звонка и какие настройки Lync на него влияют.

    По сути схему прохождения звонка в можно представить в следующем виде

    Пользователь набирает номер в том виде в котором он привык его набирать, допустим 97000000.

    Первым шагом применяются правила нормализации Lync. Основной их целью является прием номера в том виде в котором пользователи привыкли его набирать и изменять его для дальнейшей отправки в том виде, в котором его может принять и понять следующее устройство (например, шлюз). Для пример давайте возмьем случай, когда пользователи вводят городские номера в виде 9ххххххх. Для отправки звонка надо убрать 9 и добавить код страны и города – в итоге номер после правил нормализации должен принять вид +74957000000 – это мы должны получить как итог работы правил нормализации.

    Вторым шагом будет поиск в голосовой политике пользователя маршрута соответствующего этому телефонному номеру. Если есть маршрут который говорит, например что все начинается с +7495 и содержит 11 символов отправить на шлюз, звонок совершен будет, если маршрута в политике пользователя нет, то звонок не сможет быть совершен, даже если маршруты есть в политиках других пользователей. Маршруты в тоже время в политике представлены группами – PSTN Usage. Одну и туже группу PSTN Usage можно использовать в нескольких политиках.

     

    На рисунке 1 отображено прохождение звонка.

     

     

    Рис 1. Схема прохождения звонка

    Давайте посмотрим, где это настраивается в интерфейсе Lync сервера

     

    Рис 2. Lync Control Panel

     

    Несмотря на то, что существуют три вкладки для настройки политики (политика – PSTN запись — маршрут) настраиваться все может с вкладки Voice Policy

    Для создания образцов номеров, как в правилах нормализации, так и в маршрутах используются регулярные выражения. В правилах нормализации мы обычно описываем ими образец что ловить и образец во что преобразовать, в маршрутах мы прописываем образец что ловить (уже нормализованные номера). Без них пришлось бы по сути набивать каждый номер и говорить разрешено ли звонить по нему или нет.

    Рассмотрим регулярные выражения.

    Казалось бы нужно изучать язык регулярных выражений, ведь Lync позволяет использовать помощник, способный с помощью графики строить базовые выражения. Ключевое слово здесь «базовые», если вам надо использовать более сложные и комплексные правила, то их можно создать только руками, кроме того помощник есть только в правилах нормализации, помощника в правилах маршрутов нет.

    Начнем с основ

    ^ означает начало

    $ означает окончание выражения

    По сути дела вам надо использовать ^$ и между ними набивать ваш образец набора номера

    \d этот класс определяет количество цифр вне зависимости от их значения. При этом мы можем использовать как выражение \d\d\d для поиска номера из любых трех цифр, так и выражение \d{3} . Очевидно, что второе выражение более просто написать, особенно когда количество цифр большое.

    () кавычки определяют набор или группу, где ( означает начало группы и ) конец группы. Примером может служить (\d{3}). Все что стоит вне кавычек Lync будет убирать.

    Например, если выражению ^(9\d{3})$ подать на вход номер 9100 то он будет преобразован в 9100, если изменить выражение на ^9 (\d{3})$ то этот же номер будет преобразован в 100

    [] означают диапазон искомых цифр.

    Например, телефонные номера в Иваново могут начинаться с цифр 2,3 и 4 и состоят в целом из 6 цифр, номер не может начинаться с другой цифры

    Выражение ^( [2-4])(\d{5}) будет принимать номер 255555 и не принимать номер 655555

    Второй пример телефонные номера могут начинаться с цифр 2, 4 или 6. Тогда выражение примет следующий вид ^([2,4,6])(\d{5}) Номер 355555 подпадать под него не будет

    Символ \ ставится перед тем символом, который может иметь значение в регулярном выражении, но мы хотим его использовать как просто образец для поиска, например выражение \+501 будет искать номер +501

    Кроме того существует еще ряд символов, встречающихся в выражениях Lync

    Квантификаторы

    * — означает, что могут последовать 0 или большее количество цифр

    Пример ^(\d{3}\d*)$ будет принимать любой номер с количеством цифр не меньше трех

    + — означает, что должна последовать 1 или большее количество цифр

    Пример ^(\d{3}\d+)$ будет принимать номер с количеством цифр не меньше четырех

    ? – означает 0 или одну цифру

    Пример ^(\d{3}\d?)$ будет принимать только трех или четырехзначный номер

    {3} – означает, что номер должен состоять только из трех цифр

    Пример ^(\d{3})$ будет принимать только номер с количеством цифр равным трем

    {3,} –означает, что могут последовать 0 или более цифр

    Пример ^(\d{3,})$ будет принимать номер с количеством цифр не меньше трех

    Обратите внимание, что все квантификаторы следуют за выражением \d

    Утверждения

    ?! – означает кроме этого

    Пример ^(?!46)(\d{6})$ — будет принимать любой шестизначный номер, кроме начинающегося на 46, пример ^(?![4,6])(\d{6})$ любой шестизначный номер, кроме начинающегося на 4 или 6

    ?= цифра – означает искать номера, только начинающиеся с этой цифры

    Пример ^(?=4)(\d{6})$ — будет принимать шестизначный номер, но только если он начинается с четверки

    ?# — после этого утверждения можно поместить комментарий

    Это конечно не все существующие выражения. Я привел только наиболее использующиеся для маршрутизации звонков в Lync.

    Давайте теперь попробуем разобраться с выражениями на примерах из Lync.

    Нормализация

    Пример 1.

    Представим, что нам надо отправлять городской телефонный номер, находясь в Ростове-на-Дону на шлюз в формате +7863xxxxxxx, но пользователи при этом привыкли набирать 97000000

    Мы можем решить это несколькими выражениями

    В поле Pattern to match вводим ^\d{1}(\d{7})$

    В поле Translation Rules вводим +7863$1

     

     

    Рис 3. Пример правила нормализации

    Правило будет принимать номера состоящие из восьми цифр (любых), убирать первую цифру и добавлять перед ними +7861. Но в таком случае и номера начинающиеся не с девятки тоже будут преобразованы по этому правилу, что не всегда подходит.

    Второй способ это отлавливать номера из восьми цифр, только начинающиеся с девятки

    Тогда

    В поле Pattern to match вводим ^9 (\d{7})$

    В поле Translation Rules вводим +7863$1

    Это правило будет принимать и преобразовывать только номера, начинающиеся с девятки и содержащие восемь цифр, при этом девятка будет убрана (она стоит вне кавычек) и вначале будет добавлено +7863

    А вот если у нас номера начинаются только с определённых цифр, например, представим, что в Ростове номера могут начинаться с 2, 3, 4 или 7

    С помощью графического мастера сделать это уже не получится.

    Регулярное выражение в таком случае будет ^9 (?=[2,3,4,7])(\d{7})$

    Номера в виде 92000000 будет нормализован в +78632000000, номер 98000000 нормализован не будет

     

     

    Рис 4. Пример правила нормализации

    Также можно сделать своеобразные «горячие клавиши». Допустим у директора внутренний номер 100, с помощью правил нормализации мы тогда можем сделать чтобы при наборе, например 1 номер преобразовывался в +100

    В таком случае

    В поле Pattern to match вводим ^1$

    В поле Translation Rules вводим +1

     

    Рис 5. Пример создания «горячей клавиши»

    Следует также отметить, что правила нормализации применяются в том порядке, в котором ото��ражаются в консоли, если вы создадите два правила под которые может подходить один и тот же номер, он будет нормализован по правилу, которое находится выше в консоли.

    Просто преобразовывать номера для маршрутизации недостаточно, при маршрутизации Lync нормализует номера и, затем осуществляет поиск в политике пользователя маршрута по которому этот звонок может быть направлен (за исключением внутренних номеров, в этом случае Lync сразу соединит с внутренним абонентом)

    Маршруты

    Давайте продолжим настройку нашей маршрутизации, теперь у нас стоит задача разрешить звонки на местные локальные номера, состоящие из 7 цифр, за исключением номеров начинающихся на 2,3,4 или 7 всем пользователям. Группе Бухгалтерия кроме того будет разрешены звонки по России.

    С помощью правил нормализации (образец — ^9 (?=[2,3,4,7]\d{7}))$ заменяет на +7863$1) к нам будут приходить номера в формате +7863ххххххх

    В маршрутах уже не ставятся скобки перед образцами цифр, таким образом наше выражение для маршрута примет следующий вид +\7863 (?=[2,3,4,7])(\d{7})$

    Это выражение мы добавим в маршрут.

    Идем в Voice Policy, вызываем ее свойства и нажимаем в пункте Associated PSTN Usages кнопку Select

     

    Рис 6. Настройка голосовой политики

    Как мы видим Lync уже содержит три записи, выбираем Local и выбираем свойства этой записи к которой мы привяжем маршрут

    В самом маршруте нам теперь надо прописать выражение и добавить шлюз, через который мы сможем совершить звонок.

     

     

    Рис 7. Настройка маршрута

    Теперь создадим новую политику которая будет применяться для Бухгалтерии и позволять помимо локальных звонков осуществлять звонки по России. При создании политики я выбрал тип User Policy. Я использовал следующее регулярное выражение ^\+7\d{10,}

     

     

    Рис 8. Создание политики для пользователя

    Теперь давайте попробуем как работают наши правила. Сделать это можно с помощью вкладка Create VoiceRouting Test Case. Причем я сразу буду брать populate Form user.

    Пользователь Алексей Еременко, стандартная голосовая политика, пробуем набрать два номера 92440000 и 84957000000

     

     

    Рис 9. Проверяем маршрут на локальный номер

     

     

    Рис 10. Проверяем маршрут на междугородний номер для пользователя Алексей Еременко

    Как видим в первом случае номер из 92440000 будет преобразован в +78632440000 по правилам нормализации и отправлен по маршруту Rostov-on-Don Local. Во втором случае номер из 84957000000 будет преобразован в +74957000000 но отправлен никуда не будет, так как отсутствует подходящий маршрут в голосовой политике пользователя.

    Теперь давайте попробуем проверить маршрут междугороднего звонка для пользователя Дарья Попкова, у нее привязана политика, содержащая маршрут для таких номеров

     

     

    Рис 11. Проверяем маршрут на междугородний номер для пользователя Дарья Попкова

    Как видно Дарья сможет совершить звонок, используя маршрут National.

    Надеюсь что после прочтения этой заметки правила настройки звонков стали более понятными.

    Напомню, что партнеры со статусам Silver и Gold могут воспользоваться техническим консалтингом. Для этого необходимо обратиться по адресу rupts@microsoft.com

     

    Николай Муравлянников

    • Рубрика: Exchange/UC,Новое
    • Автор: Nickolay
    • Дата: Понедельник 11 Апр 2011

Комментарии

  1. Спасибо за статью Николай. Годная!

  2. Спасибо за отзыв

  3. Годная — очень мягко сказанно 🙂

    Николай, спасибо за статью

  4. Господа возник просто глупейше-неразрешимый вопрос касательно нормализации.

    У нас в AD почти все номера вбиты в формате +7. На PSTN следует отправлять номер в 8+abc. Но правило нормализации ^\+7 (\d*)$ не работает.

    Линк просто говорит, что нет совпадений для номеров в формате +7-бла-бла-бла и все.

    И все дело только в проклятом плюсе.

    пытался даже делать дефолтное правило — отрезать первый знак у вводимого номера. И это правило прекрасно срабатывает абсолютно для любого набора кроме начинающегося с «+»

    и в гугле не спросишь 🙁

  5. Немного не понятен вопрос. В парамете Line URI пользователей в Lync что стоит? Откда и куда звонки не идут?

  6. Речь идет именно о набираемом номере в Линке. Т.е. прежде чем его отдать звонок на PSTN gate мне следует из набираемого номера (а набирают его +7) заменить +7 на 8. И правила нормализации для + не работают.

  7. В принципе вопрос закрыт. Решил убирать + в правиле «trunk configuration». Хотя конечно хотелось бы чтобы все правила изменения номеров были бы в одном месте, именно в разделе Dial-plan «нормализация».

  8. «\d этот класс определяет количество цифр вне зависимости от их значения.»

    я бы сказал что это и есть цифра... а не количество цифр... странно...

  9. Спасибо за статью! По этой же теме для тех, кто сопрагает Lync с Asterisk и другими голосовыми, может оказаться полезной моя статья

    Маршрутизация вызовов в Lync Server 2010.

  10. Сайт обрезал мою ссылку в предудущем посте, даю в чистом виде: argon.pro/blog/2011/03/lync-call-routing/

  11. Спасибо! Стала намного понятнее эта тема!

  12. Добрый день.

    Вопрос: Есть скажем три пользователя, к ним от внешнего оператора должны дозваниваться по номеру tel: +79453336666, но по причине, что номер скажем всего один и нужно чтобы внутри организации пользователи звонили друг другу по короткому номеру (ext), тогда для всех трех прописываю в Line URI:

    tel: +79453336666;ext=1234

    tel: +79453336666;ext=1235

    tel: +79453336666;ext=1236

    совсем запутался с Dial Plan, кто знает подскажите как для такого случая будет выглядеть Dial Plan?

    т.е. при звонке на +79453336666 у всех трех пользователей должен поступать вызов, т.е. нужно что то типа — ^(\d{4})$ -> +7945333$;ext=$1 (не срабатывает)

    заранее благодарен

    P.S. с учетом того что в Dial Plan уже имеются закрепляющие правила:

    ^(\d{7})$ -> $1

    ^\+7 (\d{10})$ -> 8$1

    ^(8\d{10})$ -> $1

Опубликовать

Я не робот.