March, 2012

  • Отвечая на вопросы: Lync и несколько телефонных шлюзов

     

    Недавно провел тренинг по Lync Voice для партнеров в ходе которого получил ряд вопросов. Отвечая на них, я увидел необходимость более подробного освещения некоторых моментов, особенно в части маршрутизации голоса. Особенно много вопросов было по обеспечению отказоустойчивости между Lync и шлюзами. Давайте рассмотр��м пару сценариев и поймем как Lync работает при различных настройках.

    Дано

    Lync и несколько шлюзов выхода в телефонную сеть, два шлюза находятся в Москве, один шлюз находится в Киеве.

    Задача.

    Обеспечить при нормальной работе звонки по России для всех пользователей, включая киевских через два шлюза в Москве, при этом в случае отказа одного из шлюзов, звонки должны все равно проходить по России (для этого два шлюза), в случае отказа обоих шлюзов звонки совершать через киевский шлюз.

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

    Давайте попробуем реализовать заданный сценарий.

    В моей инфраструктуре три шлюза

    Ucgw9.msucdemo.local – шлюз в Москве

    Ucgw4.msucdemo.local – второй шлюз в Москве

    Ucgw8.msucdemo.local – шлюз в Киеве

    Вариант 1

    Добавляем маршруты.

    1. Звонок на телефонный номер, начинающийся на +7 и, содержащий не менее 10 цифр отправить на шлюзы в Москве, для этого оба шлюза регистрируем в одном маршруте

    clip_image002

    Рис 1. Создание маршрутов для звонков по России

    Мы указали два шлюза, а какой же шлюз будет выбираться при конкретном звонке. В этом случае Lync будет распределять звонки между шлюзами и в случае отказа одного из шлюзов все звонки будут идти через тот шлюз, который работает. Мало того, если шлюз работает, но канал в телефонную сеть в нем на данный момент отказал, то Lync опять же не будет отправлять через него звонки. Вот так простым указанием двух шлюзов в одном маршруте мы настроили отказоустойчивость.

    2. Создадим резервный маршрут для звонков по России через киевский шлюз в случае отказа обоих московских.

    clip_image004

    Рис 2. Резервный маршрут

    Теперь я объединю маршруты в PSTN записи в соответствии с условиями задачи.

    Напомню, что мне необходимо реализовать при нормальной работе прохождение звонков по России через московские шлюзы и в случае отказа обоих шлюзов отправить звонок через киевский шлюз. Я создам две PSTN записи и назову их Russia Long Distance for Russia и Backup Russia Long Distance for Russia

    clip_image006

    Рис 3. PSTN записи

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

    Вариант 2

    Однако мы можем не объединять оба московских шлюза в один маршрут, а сделать три маршрута.

    1. Маршрут до шлюза Ucgw9.msucdemo.local (Москва)

    2. Маршрут до шлюза Ucgw4.msucdemo.local (Москва)

    3. Маршрут до шлюза Ucgw8.msucdemo.local (Киев)

    И, затем, распределить требуемый порядок выбора шлюзов с помощью PSTN записи

    clip_image008

    Рис 4. PSTN записи, сравните с рис 3.

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

    А если оба эти сценарии равнозначны, какой же подход выбрать?

    Я предпочитаю второй, так как части пользователей я могу создать PSTN запись с отказоустойчивостью (добавив два маршрута) а части создать PSTN запись только с одним маршрутом (добавив в первую запись только один маршрут)

    Отследить работу можно только с помощью снятия SIP логов, в тест кейсах Lync эта логика отображаться не будет.

    Буду рад любым комментариям, в следующих заметках я постараюсь ответить на интересные вопросы, которые я получаю в ходе своей работы.

  • Маршрутизируем звонки в Lync: как отловить, преобразовать телефонный номер и направить его по нужному маршруту.

     

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

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

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

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

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

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

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

    clip_image002

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

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

    clip_image004

    Рис 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

    clip_image006

    Рис 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 нормализован не будет

    clip_image007

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

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

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

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

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

    clip_image008

    Рис 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

    clip_image010

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

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

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

    clip_image012

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

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

    clip_image014

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

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

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

    clip_image016

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

    clip_image018

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

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

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

    clip_image020

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

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

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

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

  • Мониторинг Lync с помощью синтетических транзакций или как выявить источник проблемы не выходя из кабинета.

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

    По сути транзакции позволяют убедиться, что тестируемый сервис работает корректно. Так, например комадлет Test-CSRegistration позволяет убедиться, что пользователи могу зарегистрироваться в Lync, а Test-CsIM что сервис обмена мгновенными сообщениями работает. Всего в Lync включено 33 синтетических командлета (список и краткое описание можно посмотреть, набрав команду Get-Help “Test-Cs*” | Select Name, Synopsis | FL)

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

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

    Выявляем проблемы не выходя из кабинета.

    При запуске с помощью реальных учетных записей необходимо просто запустить командет, указав учетную запись. Пользователь даже не будет знать, что какая-то операция была выполнена от его имени.

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

    Ниже приведен результаты выполнения некоторых командетов (в первом примере пользователь andvis@contoso.ru временно отключен в панели управления Lync).

    clip_image001

    Рис.1 Проверка возможности регистрации пользователями на сервере

    clip_image002

    Рис 2. Проверка возможности обмена аудио и видео трафиком между пользователями

    Обратите внимание, что командлеты также отображают скорость выполнения операции.

    В моем случае командлеты не запросили паролей пользователей. Это связано с тем, что его запуск я производил на сервере Lync. Если вы запускаете командлеты с компьютера, на котором установлены только инструменты управления, вам необходимо будет ввести пароль пользователя. Но существуют транзакции, в которых ввод пароля потребуется обязательно. Например, в командлете Test-CSAuth, так как он запрашивает сертификат от имени пользователя и с его помощью проверяет корректность аутентификации.

    Мониторим сервер.

    Второй сценарий подразумевает запуск командлета с помощью тестовых учетных записей и пригодится для мониторинга сервера, например как часть ежедневной задачи по мониторингу. Следует упомянуть, что транзакции могут быть запущены как вручную, так и автоматически с помощью продукта Microsoft System Center Operation Manager.

    Для настройки таких тестовых учетных записей служит командлет New-CsHealthMonitoringConfiguration в котором вы указываете учетные данные для выполнения транзакций, эти данные будут сохранены.

    Примечание: можно создать эти данные на один раз с помощью добавления параметра -memory

    clip_image003

    Рис 3. Создание тестовой конфигурации

    Теперь можно не указывать пользователей для проверки – будут использоваться тестовые пользователи

    clip_image004

    Рис 4. Проверка возможности обмена сообщениями с между тестовыми пользователями

    Автоматизация – друг админа.

    Выполнение этих командлетов и анализ подробных результатов хорош при разрешении проблем. Однако поммимо проблем у каждого администратора стоит задача ежедневного мониторинга.

    Неплохо было бы прийдя с утра на работу запустить скрипт который сказал бы все хорошо с Lync или не очень.

    Я для себя создал следующий скрипт проверяющий состояние трех сервисов – регистрации, обмена мгновенными сообщениями и конференций (естественно вы можете добавить любые командлеты) который выводит результаты на экран (естественно можно вывести в файл, журнал событий Windows или отправить почтой – справка по PowerShell в помощь)

     

    $Test_Reg=Test-CSRegistration –TargetFQDN gc-lync-ls1.corp.contoso.ru

    $Test_IM=Test_CSIM –TargetFQDN gc-lync-ls1.corp.contoso.ru

    $Test_AV=Test-CSAVConference -TargetFQDN gc-lync-ls1.corp.contoso.ru

    $a=$Test_Reg.TargetFQDN+” “+$Test_Reg.Error

    $b=$Test_IM.TargetFQDN+” “+$Test_IM.Error

    $c=$Test_AV.TargetFQDN+” “+$Test_AV.Error

    If($Test_Reg.Result –eq “Success”)

    {

    Write-host “Registration Working” –ForegroundColor “Green”

    }

    Else

    {

    Write-host “Registration Failed with Error:” –foregroundcolor “Magenta”

    Write-host $a –Foregroundcolor “Red”

    }

    If($Test_IM.Result –eq “Success”)

    {

    Write-host “IM Working” –ForegroundColor “Green”

    }

    Else

    {

    Write-host “IM Failed with Error:” –foregroundcolor “Magenta”

    Write-host $b –Foregroundcolor “Red”

    }

    If($Test_AV.Result –eq “Success”)

    {

    Write-host “AV Working” –ForegroundColor “Green”

    }

    Else

    {

    Write-host “AV Failed with Error:” –foregroundcolor “Magenta”

    Write-host $c –Foregroundcolor “Red”

    }

    Ну и собственно результаты выполнения двух тестов –в первом случае все работало штатно, во втором я запретил новые соединения к сервису Конференций

    clip_image005

    Рис 5. Тестирование работоспособности скрипта

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

  • Что произошло с Lync в феврале- марте 2012. Дайджест событий.

     

    Давно веду для себя список, какие обновления и изменения происходят с Lync. Я думаю, все сталкивались со сложностью отслеживания изменений с продуктом, так как информации очень много.

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

    Дайджест будет выпускаться по 20 числам

    Итак

    31 января (добавил январское событие вследствие его важности)

    Лимит количества участников в одной конференции увеличен с 250 до 1000 пользователей (не забудьте о том, что это требует отдельного пула серверов A/V)

    http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=28775

    3 февраля

    Добавлено видео по настройке федерации Lync Online и Exchange Online

    Lync and Learn - Federation with Exchange Online and Lync Online

    10 февраля

    Добавлены изменения в консоль Lync Online в Office 365, появились возможности просмотра статистики ��обраний и звонков, добавлена возможность управления push настройками мобильного клиента, возможность устанавливать информацию о доступности в режиме privacy

    http://community.office365.com/en-us/b/office_365_technical_blog/archive/2012/02/10/new-changes-to-the-lync-online-control-panel.aspx

    24 февраля

    В Lync Capacity Calculator добавлен расчет для мобильных устройств

    http://www.microsoft.com/download/en/details.aspx?id=12295

    27 февраля

    Обновлена документация по виртуализации Lync клиента

    http://www.microsoft.com/download/en/details.aspx?id=21129

    Внесен ряд поправок и в секции 2.5 приведена ссылка по передаче Audio с помощью RemoteFX и USBR

    27 февраля

    Выпущен клиент Skype Beta для Windows Phone

    http://blogs.skype.com/en/2012/02/skype_brings_voice_and_video_c.html

    1 марта

    Выпущено обновление, позволяющее использовать видео пользователям, сконфигурированным в режиме RCC http://support.microsoft.com/kb/2666709

    Опубликован документ по настройке Lync в режиме Multitenant. Режим позволяет настроить Lync для сдачи его в аренду (несколько разных организаций в одном Lync) http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29045

    9 марта

    Опубликованы материалы по обучению Lync для пользователей.

    С помощью набора Lync Training Kit можно провести обучение в зависимости от роли пользователя и времени, которое допускается выделить на обучение.

    После скачивания набора первым дело надо запустить документ Excel в котором приведены планы по обучению для работников, руководителей, новых сотрудников, администраторов, секретарей, Early Adopters (не могу подобрать правильный перевод) и того времени которое допускается инвестировать в обучение. На мой взгляд получился исчерпывающий источник информации. Используем http://www.microsoft.com/download/en/details.aspx?id=9642&WT.mc_id=rss_office_allproducts

    Второй тренинг рассчитан на проведение обучения по участию в конференциях пользователей. Тренинг можно скачать в виде презентации Power Point, которая содержит как теоретический материал, так и практические задания для пользователей.

    Скачать http://www.microsoft.com/download/en/details.aspx?id=7606&WT.mc_id=rss_office_allproducts

    15 марта

    Вышло обновление для клиента Lync под Windows Phone. Обновление исправляет ошибки с японским языком, более подробно http://support.microsoft.com/kb/2673226/en-us

    16 марта

    В список квалифицированных балансировщиков добавлены решения от компании Radware http://technet.microsoft.com/en-us/lync/gg269419