MS Lync: идентификация личных звонков

в 10:32, , рубрики: audiocodes, freeswitch, Lync 2013, sip, voip, ит-инфраструктура, Разработка систем связи, метки:

Наш офис недавно перешел на использование MS Lync в качестве решения для телефонии: PABX от Siemens (кстати очень качественный и надежный) давно устарел и должен был быть заменен. Выяснилось, что из всех альтернатив MS Lync с Enterprise Voice является наиболее выгодным. Помимо цены, на выбор оказало влияние то, что некоторые филиалы компании в других странах уже использовали Lync, правда без телефонии, так как это Lync Online от Office 365. Тем не менее, возможность сосуществования этих систем (Lync Hybrid) показалась руководству полезной.

Так или иначе, решение было принято; и помимо множества других проблем возникла необходимость идентификации личных звонков. Работникам разрешается использовать телефон в личных целях, но, конечно, и оплачивать их самим. Со «старым» PABX реализация была такая: после ввода личного пин-кода и до набора номера требовалось ввести 0 для звонка «по работе» или 1 для личных звонков. Эта информация сохранялась и периодически экспортировалась в формате CSV для последующего импорта в SAP с помощью WinShuttle. С MS Lync можно реализовать все точно так же (ну или почти), однако здесь есть одна существенная особенность: в отличии от классической телефонии, большинство звонков из Lync осуществляется не набором номера, а через поиск контакта (например, по имени) или даже кликом по полю отправителя электронного письма в Outlook — так что, идентификация личных номеров с помощью префикса больше не кажется идеальным решением. Кроме того, так как Lync клиент использует ту же базу контактов, что, например, и мобильный телефон пользователя, подключенный к корпоративному Exchange серверу, добавление префикса к номеру контакта будет мешать/усложнять совершать обычные (не Lync) звонки с помощью мобильного телефона.

Мы пришли к трем вариантам решения этой проблемы. Подробная информация под катом.

Вариант №1 — Использование префиксов

Версия Lync – Lync 2013 Standard Edition
Шлюз – Audiocodes Mediant 1000
Выход на PSTN — E1 или SIP транк через интернет с авторизацией по IP
Источник информации по биллингу: Lync Server Monitoring Reports + биллинг провайдера

В этом варианте решения проблемы мы будем использовать две замены, а именно 1) «нормализация» номера, введенного пользователем в Lync Control Panel; и, 2) нормализация номера до передачи звонка на SIP trunk в Audiocodes SBC. Причина простая: Lync понимает только номера стандарта e.164, так что звонок на номер «10041221234567» никак не пройдет. Чтобы это обойти, можно будет использовать такую замену: номера с префиксом 0 (рабочие звонки) приводятся к стандартному e.164 (например 00041221234567 -> +41221234567) и передаются на транк как есть, а с префиксом 1 (личные звонки) к псевдо- e.164 с заменой префикса на +83 или любой другой из неиспользуемых (например 10041221234567 -> +8341221234567) и далее на SBC удаляются совсем, оставляя только реальный e.164 номер. Разница будет в том, что личные звонки будут записаны в базу Lync с префиксом +83, с помощью чего эти звонки можно будет легко идентифицировать, сравнивая со списком звонков/инвойсом предоставленных оператором телефонии.
Блок-схема этого решения выглядит вот так:

MS Lync: идентификация личных звонков - 1

Как сделать?

Правило нормализации для личных звонков типа «10041221234567 -> +8341221234567» создается в Lync Control Panel в разделе Voice Routing:

MS Lync: идентификация личных звонков - 2

Так эта замена будет выглядеть в клиенте Lync при наборе номера с префиксом:

MS Lync: идентификация личных звонков - 3

Далее, чтобы этот звонок все-таки достиг нужного абонента, заменяем «+83» на « +» перед передачей звонка на Audiocodes Mediant 1000. Для E1 транка это настраивается в разделе Voip> GW and IP to IP >Manipulations >Dest Number IP->Tel:

MS Lync: идентификация личных звонков - 4

Плюсы: процедура набора «личного» номера сохраняется такая же как была на старом PABX
Минусы: Неудобно использовать сохраненные контакты, если добавлять префикс в номера адресной книги невозможно будет звонить с через некорпоративные каналы, например, с мобильного телефона с той же базой контактов.

Вариант №2 — «Ручной режим»

Версия Lync – Lync 2013 Standard Edition
Шлюз – не важно
Выход на PSTN — не важно
Источник информации по биллингу: Lync Server Monitoring Reports + биллинг провайдера

Этот вариант достаточно простой: на .Net сваяли приложение с web-интерфейсом которое считывает информацию о звонках из базы и предоставляет пользователям возможность «отметить» какие из звонков относятся к категории личных. Особо добавить сюда больше ничего не могу, так как это больше сфера разработки. Могу лишь отметить что номера помеченные как личные звонки запоминаются системой и применяются к будущим звонкам автоматически, так что пользователи на сам процесс будут тратить с каждым разом все меньше времени.

Интерфейс web-приложения

MS Lync: идентификация личных звонков - 5

Плюсы: никаких изменении в dialplan и call flow
Минусы: приходится полагаться на сознательность пользователей — не все удосуживаются, особенно если звонков много

Вариант №3 — FreeSwitch + outbound IVR

Версия Lync – Lync 2013 Standard Edition
Шлюз – FreeSwitch
Выход на PSTN — SIP транк через интернет с авторизацией по IP и поддержкой billing ID
Источник информации по биллингу: биллинг провайдера SIP
Идея такая: при каждом звонке на PSTN, система будет спрашивать личный ли это звонок. Пользователь посылает DTMF 0 (если нет) или 1 (если звонок личный), далее звонок передается на шлюз провайдера: в первом случае без изменений (например 41221234567), во втором случае со специальным префиксом billing ID (например 600100141221234567 ). Billing ID (в нашем примере — 6001001) игнорируется провайдером при маршрутизации звонка, но записывается в базу для биллинга. Далее при обработке счетов от провайдера, мы просто фильтруем весь call-log и все расходы на звонки с префиксом 6001001 вешаем на соответствующего пользователя.

Маршрут звонка в этом случае будет выглядеть вот так:

MS Lync: идентификация личных звонков - 6

Как сделать?

Описывать интеграцию FreeSwitch с MS Lync мы не будем, это хорошо описано вот здесь (сами руководствовались этой статьей, спасибо olegbaturin). Для активации outbound IVR надо добавить следующие сегменты в конфигурационный файл:

В раздел section dialplan

<!-- Правила обработки "from_Lync" применяется к профайлу "Lync" при поступлении вызовов от Lync -->
		<context name="from_Lync">
			<!-- Отправляем все вызовы на gateway ТСОП с именем to_PSTN -->
			<extension name="RouteToPSTN">
				<condition field="destination_number" expression="^+?(d{11})">
				<action application="ivr" data="outbound_ivr"/> 
				</condition>
			</extension>
		</context>
В раздел menus

<menu name="outbound_ivr"
      greet-long="ivr/menu.wav"
      greet-short="ivr/menu.wav"
      invalid-sound="ivr/invalid.wav"
      exit-sound="ivr/goodbye.wav"
      timeout="10000"
      inter-digit-timeout="2000"
      max-failures="3"
      max-timeouts="3"
      digit-len="4">
     <!-- Business call - not doing anything -->
   	  <entry action="menu-exec-app" digits="0" param="bridge sofia/gateway/to_PSTN/${destination_number}"/>
     <!-- Personal call - add a prefix to distinguish -->	
          <entry action="menu-exec-app" digits="1" param="bridge sofia/gateway/to_PSTN/6001001${destination_number}"/>
</menu>

Не забудьте записать и поместить соответствующие wav файлы в папку ivr (menu.wav должен сообщать о вариантах: «наберите 1 если это личный звонок ...»)

Плюсы: достаточно удобно для пользователя (один дополнительный шаг), не надо менять номера телефонов в базе контактов, что означает возможность использования контактов вне Lync.
Минусы: провайдер должен поддерживать billing id prefix*, невозможно использовать имеющийся шлюз от AudioCodes (пришлось поднимать VM для freeswitch).

* — если провайдер не поддерживает billing id prefix, этот вариант все еще может быть применим: в этом случае информацию о звонке можно записывать на какой-нибудь web-сервер по REST api включив модуль curl для freeswitch, и затем сравнивать эти данные с биллингом от провайдера (надо будет матчить по времени звонка и номерам)

Автор: EminH

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js