gifts2017

Как мы научили 1С генерировать IVR меню для Asterisk

Опубликовал Николай Бекетов (jorikfon) в раздел Программирование - Практика программирования

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

Последние годы проникновение 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 серверов.

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Николай Бекетов (jorikfon) 15.12.15 10:24
Возможно будет интересна запись моего вебинара на тему этого проекта.
https://youtu.be/D-CSnkTJwSA
baracuda; +1 Ответить
2. Ivan Kravchenko (i.d.Kravchenko) 15.12.15 12:20
Читал на хабре .... интересно.
jorikfon; +1 Ответить
3. Андрей Макаров (XOCTEP) 15.12.15 16:00
4. Pud Ovan (pudovan) 16.12.15 11:40
Понравилось, очень хорошая идея развития функционала CRM.
Осталось только узнать цену вопроса: сколько стоит?
И ещё возможна ли генерация голосовых сообщений на других языках или только русский?
jorikfon; 1attimo; +2 Ответить 1
5. Николай Бекетов (jorikfon) 16.12.15 13:55
(4) pudovan, пока продукт не тиражный. Можем сделать как проектное внедрение. Все то, что есть в описании будет стоить 25000, в 2016 году сделаем тиражным, напишем инструкции по внедрению, будет дешевле.

Другие языки не проблема. У центра речевых технологий есть Английский.
Как вариант можно в качестве сервера генерации использовать облако Nuance или Google Speech API. Они не очень хороши в русском, и покупать надо за $ доступ к генерации. Но там копейки, для нашего случая мы обошлись за 6 месяцев 1000 рублями для того чтобы получить все необходимые фразы в локальный кеш.
6. Alexandr Surkov (basta-one2007) 28.01.16 17:02
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа