Голосовые меню в Lync Server 2010

2011-03-30, 01:01 / Argon

В этой заметке я расскажу о такой, как мне казалось, банальной вещи, как организация традиционного интерактивного голосового меню средствами Lync Server 2010. В реальности, всё оказалось не так банально и просто.

Материалы, рекламирующие Lync, позиционируют его как полную замену традиционным IP АТС. Голосовые меню, очереди и группы вызовов, гибкая маршрутизация и полная интеграция с другими системами — все номинально имеется в наличии. Однако, когда дело доходит до реального применения Lync Server 2010 для выполнения конкретных бизнес-задач, я регулярно:

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

Способы навигации по голосовому меню

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

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

Поэтому, несмотря на «вау-эффект», производимый распознавателем голоса, в реальном мире (даже в Microsoft) для навигации по интерактивным голосовым меню используется тоновый набор DTMF.

И здесь приходит очередное разочарование: без использования сторонних модулей в Lync Server 2010 нет возможности создавать принимающие DTMF-сигналы голосовые меню. Чтобы таки получить понимающее DTMF голосовое меню, предлагается использовать Auto Attendant из функционала Exchange Server 2010 Unified Messaging.

Лирическое отступление

Принято считать, что внедрение Lync Server 2010 без Exchange UM является бессмысленным. С этим я согласен, Lync без Exchange действительно не раскрывает своего функционала. Но необходимость использования Unified Messaging для организации голосового меню, понимающего DTMF, мне кажется абсурдной.

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

  • общая надежность телефонии от появления еще одного звена не повышается
  • требуется обеспечение высокой доступности и для Unified Messaging, так как эта роль становится частью критичной для бизнеса системы

Настройка Auto Attendant

Итак, задача: средствами Auto Attendant в Exchange UM настроить традиционное интерактивное голосовое меню, понимающее DTMF. Под традиционным меню понимается такой шаблон: «Добро пожаловать в Компанию! Введите внутренний номер абонента или дождитесь ответа оператора».

Чтобы этого достичь, попытаемся настроить Auto Attendant следующим образом:

  • отключить Auto Attendant is speech-enabled — не будет пытаться разобрать голосовые команды и будет работать в режиме DTMF
  • отключить Auto Attendant is enabled for directory lookups — не будет запрашивать ввод имени абонента с телефонной клавиатуры, только внутренний номер
  • включить Allow caller to transfer to users — разрешит звонить на внутренние номера
  • отключить Allow callers to send voice messages — не будет спрашивать, хотите ли вы оставить голосовое сообщение
  • включить Allow transfer to operator — на случай, если звонящий не знает внутреннего номера
  • настроить Operator extension — очевидно зачем

На выходе имеем следующие: Автоответчик ждет ввода либо внутреннего номера абонента, либо 0 для вызова оператора. Если от звонящего не поступает нужных сигналов — переспрашивает до бесконечности.

Перевод на оператора

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

  • на аппарате абонента нет тонового набора
  • провайдер телефонии режет или искажает DTMF сигналы (невероятно, но я с этим встречался)

Для того, чтобы включить перевод на оператора по истечению времени, придется включить Key Mapping и добавить действие Transfer to extension [номер оператора] для события Press no key (time-out). При этом мы получим следующие побочные эффекты:

  • так как теперь включено меню Key Mappings, автоответчик ждет от звонящего в первую очередь выбора элементов этого меню, а для ввода внутреннего номера необходимо нажимать решетку
  • поскольку функции «перевода на оператора по кнопке 0» и «перевода по истечению времени» оглашаются автоответчиком как разные пункты, это звучит не логично, придется отказаться от стандартных голосовых приветствий Exchange UM и записать свои

Возможность звонка на произвольный номер

При включенных в Auto Attendant возможностях Allow caller to transfer to users и Allow calls to extensions обнаруживается следующие: никакие ограничения к вызываемым номерам не применяются, то есть в качестве внутреннего номера можно ввести что угодно, хоть международный номер. Таким образом, наше голосовое меню потенциально смогут использовать как бесплатный шлюз для звонков в Америку.

Казалось бы, Dialing Restrictions в настройках Auto Attendant для того и созданы, чтобы запретить нежелательные звонки. Но, как выяснилось, эти ограничения не применяются к набираемым «внутренним номерам», а применяются они только к номерам оператора и Key Mappings.

Обновление: Service Pack 2 для Exchange 2010 кардинально решает эту проблему: Auto Attendant теперь может звонить только на те номера, длина которых соответствует настройкам в диалплане.

Вот такой Epic Fail, придется либо смириться с такой недокументированной возможностью, либо настраивать запрет звонков от Auto Attendant на произвольные номера где-то дальше (например в Lync Server Voice Policy):

  • Создаем в интерфейсе Lync Control Panel новую Voice Policy, в которой ограничиваем вызовы только локальными маршрутами
  • Находим Identity нашего Auto Attendant с помощью Get-CsExUmContact
  • Назначаем на Auto Attendant созданную политику:
    Grant-CsVoicePolicy -Identity ExUMAAWelcome -PolicyName InternalOnly

Выводы

Похоже, некоторый опыт работы с телефонией на базе Asterisk слишком избаловал меня, и от Lync Server 2010 я требую слишком многого. Общий тон заметки получился печальным: вопросов больше, чем ответов. Я буду рад узнать из комментариев об элегантных решениях описанных выше проблем.

Полезные ссылки



2 комментария

Тимур
# Комментарий от 2011-05-24, 16:45

Насчет отсутствия поддержки DTMF в Lync — это вы погоряились. В UCMA, например, обработка DTMF поддерживается http://channel9.msdn.com/Series/Unified-Communications-14-Labs/Session-7-Part-3-UCMA-30-Workflow-SDK-Speech-and-DTMF-Grammars

Argon
# Комментарий от 2011-05-24, 16:50

Спасибо, исправил «нет в принципе» на «без использования сторонних решений».

Добавить комментарий