MS Lync: идентификация личных звонков
Наш офис недавно перешел на использование 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) звонки с помощью мобильного телефона.
Мы пришли к трем вариантам решения этой проблемы. Подробная информация под катом.
Версия 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, с помощью чего эти звонки можно будет легко идентифицировать, сравнивая со списком звонков/инвойсом предоставленных оператором телефонии.Блок-схема этого решения выглядит вот так:
Как сделать? Правило нормализации для личных звонков типа »10041221234567 → +8341221234567» создается в Lync Control Panel в разделе Voice Routing:
Так эта замена будет выглядеть в клиенте Lync при наборе номера с префиксом:
Далее, чтобы этот звонок все-таки достиг нужного абонента, заменяем »+83» на » +» перед передачей звонка на Audiocodes Mediant 1000. Для E1 транка это настраивается в разделе Voip> GW and IP to IP >Manipulations >Dest Number IP→Tel:
Плюсы: процедура набора «личного» номера сохраняется такая же как была на старом PABXМинусы: Неудобно использовать сохраненные контакты, если добавлять префикс в номера адресной книги невозможно будет звонить с через некорпоративные каналы, например, с мобильного телефона с той же базой контактов.
Версия Lync — Lync 2013 Standard EditionШлюз — не важноВыход на PSTN — не важноИсточник информации по биллингу: Lync Server Monitoring Reports + биллинг провайдераЭтот вариант достаточно простой: на .Net сваяли приложение с web-интерфейсом которое считывает информацию о звонках из базы и предоставляет пользователям возможность «отметить» какие из звонков относятся к категории личных. Особо добавить сюда больше ничего не могу, так как это больше сфера разработки. Могу лишь отметить что номера помеченные как личные звонки запоминаются системой и применяются к будущим звонкам автоматически, так что пользователи на сам процесс будут тратить с каждым разом все меньше времени.
Интерфейс web-приложения Плюсы: никаких изменении в dialplan и call flowМинусы: приходится полагаться на сознательность пользователей — не все удосуживаются, особенно если звонков много Версия 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 вешаем на соответствующего пользователя.Маршрут звонка в этом случае будет выглядеть вот так:
Как сделать?
Описывать интеграцию FreeSwitch с MS Lync мы не будем, это хорошо описано вот здесь (сами руководствовались этой статьей, спасибо olegbaturin). Для активации outbound IVR надо добавить следующие сегменты в конфигурационный файл: В раздел section dialplan
Плюсы: достаточно удобно для пользователя (один дополнительный шаг), не надо менять номера телефонов в базе контактов, что означает возможность использования контактов вне Lync.Минусы: провайдер должен поддерживать billing id prefix*, невозможно использовать имеющийся шлюз от AudioCodes (пришлось поднимать VM для freeswitch).
* — если провайдер не поддерживает billing id prefix, этот вариант все еще может быть применим: в этом случае информацию о звонке можно записывать на какой-нибудь web-сервер по REST api включив модуль curl для freeswitch, и затем сравнивать эти данные с биллингом от провайдера (надо будет матчить по времени звонка и номерам)