Последние годы проникновение IP телефонии в бизнес происходит семимильными шагами. С каждым днем появляется все больше и больше возможностей. Сотрудники могут работать не только в офисе, но и вообще в любой точке мира. Для того чтобы подключить телефонию сотруднику достаточно несколько кликов, никаких проводов и отдельных розеток. Компании используют запись разговоров, интеграцию телефонии с CRM системами. Каждая уважающая себя компания подключает многоканальный номер или даже платит за каждый звонок клиента, используя номер 8 800.

Давать клиенту свой сотовый телефон становится плохим тоном, ведь обращение клиента должно быть зарегистрировано в CRM и гарантированно обработано. Каждому сотруднику назначается внутренний добавочный номер, и чаще всего, зная добавочный номер, можно быстро связаться с нужным сотрудником. АТС знает, где сейчас находится сотрудник, и сможет связать клиента с нужным IP телефоном в офисе или мобильным телефоном, или даже SIP софтфоном, установленным на ноутбуке или смартфоне.

Но у прогресса есть и другая сторона. Многоканальный номер становится похожим на файрвол. Он защищает сотрудников внутри компании от звонков клиентов. На пути клиента появляется IVR меню, или даже многоуровневое IVR меню, и только не говорите, что мой звонок очень важен для вас :)

История из жизни


Случилась со мной неприятная история. В одном из крупных банков решался вопрос по одной сделке, и мне пришлось пешком посетить несколько отделений по возрастающей, пока я не нашел нужного специалиста. Милая девушка решила много моих вопросов, потратив на это 4 часа, в течение которых мы делали какие-то документы, сканировали мои договора, подписывали какие-то бумажки. Я думал, что вопрос окончательно решен, но на следующий день ко мне пришел звонок, и милая девушка попросила некоторые дополнительные данные. А спустя 2 недели по сделке пришел отказ из банка. Ох, как я хотел перезвонить этой девушке и выяснить в чем же конкретно дело и как мне быть дальше.

Сначала я нашел сотовый телефон, с которого она перезванивала, но телефон не обслуживается. Наверное, он только для исходящих. Затем я пошел на сайт, но там был только один номер 8800. Один номер на всю Россию!!! Конечно, я позвонил и прослушал много раз про новые кредитные карты, про вклады, кучу какой-то еще рекламы, но в течение 40 минут я так и не смог попасть на живого человека. Да и засомневался, что меня смогут соединить с Ивановой К. (так было написано в подписи копия верна одного из документов)
И мне пришлось ехать на другой конец Москвы, чтобы узнать внутренний номер телефона девушки, которая сегодня работала до 15.00

И тут в моей голове возникло 2 идеи.

  • Не обращаться больше в этот банк
  • Разработать новую систему умной маршрутизации для 1С и Asterisk




Мы уже много лет занимаемся интеграцией 1С и телефонии, и у нас было решение для маршрутизации звонка на ответственного менеджера. Но это было неудобно. Менеджер выбирался в карточке клиента, а в реальной жизни с клиентом часто работали разные сотрудники. Ответственный должен назначаться автоматически и меняться вместе с развитием отношений между компанией и клиентом.

Фигачим основной модуль на 1С



На примере моего общения с банком мы начали разрабатывать систему с модуля анализа событий в 1С:CRM. В 1С регистрируются все контакты с клиентом, выписываются счета и финансовые документы, хранится электронная переписка и записи телефонных разговоров. Поэтому для начала мы должны выбрать те события, которые имеют для нас значение.



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

У каждого клиента своя 1C, и мне кажется, правильно настроить типы событий, веса и срок действия — самое сложное действие.



После настройки списка регистрируемых событий начинается непрерывный анализ базы 1С регламентным заданием. С этой задачей хорошо справляется сервер 1С: Предприятия.


Для того, чтобы в момент звонка сервер 1С не занимался предварительными вычислениями, во второй таблице составляется рейтинг из сотрудников и телефонных номеров наших клиентов. Рейтинг постоянно пересчитывается после создания нового значимого события.



Когда позвонит клиент IPMATIKA с номера +7(495)926-26-44, то с очень большой вероятностью им понадобитсяЧулкова Евгения, ну а если ее нет, то Масленников Дмитрий сможет поддержать разговор.

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

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



В качестве сервиса синтеза речи мы выбрали два TTS решения. Условно бесплатный
Speech Kit от Яндекса и
VoiceFabric от Центра речевых технологий.
Для начала работы нужно получить API ключ одно из сервисов и ввести его в форме настроек.



Мне очень понравилась генерация речи от компании ЦРТ, но она платная и стоит достаточно дорого для массовой генерации, поэтому мы придумали технологию локального кеша. При установленном режиме максимального качества голосовое меню генерируется из полных предложений, а при включении режима максимальной экономии мы запрашиваем генерацию отдельных слов.

Вы можете задать фиксированные части голосового меню, например, начало и окончание у нас выглядит так:


Между ними при генерации вставляется список из 2-3 подходящих сотрудников:

  • Чулкова Евгения, добавочный 34
  • Масленников Дмитрий, добавочный 02


Если в 1С еще нет информации о взаимоотношениях с клиентом, генерируется IVR по-умолчанию.

МИКО:Интеллектуальная маршрутизация вызова - Приветствие по умолчанию


На стороне 1С осталось совсем немного — сделать фильтрацию по уволенным сотрудникам, техническим учетным записям (Робот, Администратор). По-хорошему, нужно еще убирать тех, кто находится в отпуске, но мы пока этого не сделали.



Также хорошо бы заранее правильно проспрягать ФИО, особенно тех, которые подчиняются нестандартным правилам (Белых, Черных, Крученых ...)

Вторую часть пишем на AGI в Asterisk



В качестве Asterisk сервера мы давно используем платную сборку
Askozia, она с одной стороны очень простая в настройке, с другой — по возможностям кастомизации не уступает многим свободным решениям, да и нравится она мне, это трудно объяснить :)

При разработке модуля Asterisk есть важное условие: «Ни в коем случае не прерывать обработку вызовов». Даже если 1С перестанет отвечать, звонки должны ходить. Нужен гарантированный резервный маршрут на отдел продаж.

Вся логика работы на стороне Asterisk будет выполняться с использованием технологий AGI и AMI. Как создавать приложения для интеграции 1С и AGI мы писали несколько лет назад в этом посте.
Приложение на стороне Asterisk выполняет следующие задачи:

  • запрос у веб сервиса 1С информации о имени клиента для установки CallerID на телефонах и в истории;
  • запрос у веб сервиса 1С персонального голосового меню;
  • запрос у сервера TTS синтезированных фраз;
  • склейка полного голосового меню для клиента из новых и закешированных ранее фраз;
  • воспроизведение IVR меню клиенту и распознавание DTMF сигналов в ответ;
  • соединение клиента и сотрудника.

Добавляем PHP приложение прямо в Web интерфейсе и копируем ID нового приложения.



Создаем простейший IVR маршрут, на который направим все звонки клиентов. Определим резервный маршрут на случай, если в AGI скрипте что-то сломается. У нас на сервере я просто указал телефон нашего отдела продаж (90) и ID недавно созданного AGI скрипта.



В итоге при звонке в нашу компанию вы услышите что-то типа этого:




Бесплатный Яндекс, волне подходит для отладки. Произношение от Центра Речевых Технологий значительно круче, его и используем на боевом сервере.

Итог



Модуль генерации IVR меню мы внедрили 3 месяца назад. За это время резко сократилось количество переадресаций клиентов между сотрудниками.

Новое IVR меню произвело многократный WOW эффект. Мы специально добавили в меню фразу про CRM, многие интересуются, как это работает =)

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

Большое спасибо, если смогли дочитать до конца. С удовольствием отвечу на все вопросы.

Комментарии (4)


  1. antirek
    12.12.2015 15:34

    Идея интересная. AGI-скрипт напрямую обращается в сервер БД CRM с запросом на недавно контактировавших сотрудников?


    1. jorikfon
      12.12.2015 23:15

      Да. И в ответ получает json с структурой ivr для синтеза речи.


      1. antirek
        13.12.2015 08:30

        Ну, тогда json описать и стандартизировать, как следствие будет неважно какой CRM пользуется клиент и выпускать TTS сервер для создания персональных IVR.

        Вообще тема близка к VoiceXML https://wiki.i6net.org/doku.php/vxi_tutorial:start#a_basic_voicexml_application, говорят что и астериск поддерживает такую тему www.voip-info.org/wiki/view/Asterisk+cmd+Vxml


        1. jorikfon
          14.12.2015 22:51

          Да, я смотрел. Но для нашей задачи очень сложным показался этот механизм. Сейчас по сути основной код в 1С, а на Asterisk несколько страничек кода.