Один из последних трендов — онлайн чат-боты. Но, что делать с теми клиентами, которые находятся оффлайн? Большой процент людей предпочитает звонить по телефону. Для них нужен или большой штат операторов, или решение по автоматизации работы с голосом. Предлагаем решение для уменьшения работы и затрат (и даже почти не нагрузит вашего программиста).
Как быстро и легко программировать любое голосовое меню, автоинформатор, робота-секретаря с привязкой к своей базе клиентов?
Спойлер: Все реализовано на webhooks и приведен пример на PHP.
Обсуждаем под катом.
Что и зачем?
Например, у вас служба доставки либо интернет-магазин со своей службой логистики. Часть клиентов звонит чтобы узнать, как дела с их посылкой/товаром и это можно легко автоматизировать. Аналогично — гео-локация такси, сбор данных со счетчиков, вообще любая индивидуальная онлайн информация, которую вы можете дать клиенту и не тратить на “справку” время живых операторов.
Автоматизировать это очень просто, ниже опишем пример. И, ах, все это можно сделать абсолютно бесплатно.
Почему не свой asterisk?
Конечно, все можно сделать и на Asterisk, но тут кроме разработчика потребуется и администратор, причем со знаниями в части безопасности голосовых сетей (так как их особенно любят взламывать).
Рассматриваем самую простую реализацию решения поставленной задачи — на вебхуках.
Список методов
Для работы нам понадобится всего 2 новых метода, но каждый из них дает много возможностей, а главное — неограниченные циклы. Благодаря циклам можно получить голосовое меню любой глубины и информатор на любую тему.
Основные методы:
- NOTIFY_START — начало входящего звонка в АТС
- NOTIFY_IVR — ответ абонента на заданное действие
Подробное описание методов для копипаста доступно в описании API.
Для запросов NOTIFY_START и NOTIFY_IVR можно «на лету» изменять сценарий работы по текущему звонку, отправив в ответ один из следующих вариантов:
По факту, клиент звонит и слушает приветствие, потом донабирает определенный номер (например, номер заказа), мы отправляем уведомление с цифрами которые он набрал, скрипт абонента проверяет по базе и отправляет ответ на уведомление к нам. В ответе, может содержаться id голосового файла или вариант стандартного голосового сообщения.
У нас есть стандартная система воспроизведения чисел, поэтому не нужно записывать предварительное голосовое сообщение, то есть из базы берется нужное уведомление и оно воспроизводится роботом как число. Либо же можете создать до 100 вариантов шаблонных голосовых уведомлений и отправлять их в ответ на запрос клиента (Ваш товар находится на складе, Вы можете получить ваш товар с 9 утра до 10 вечера ежедневно кроме воскресенья, Ваша посылка находится в пункте выдачи — метро Белорусская).
Минимум для реализации
Чтобы секретарь смог ответить, нужен как минимум номер телефона и АТС. Также стоит заранее загрузить либо автоматически начитать ответы секретаря.
Настраиваем
- Бесплатная АТС для нашей задачи настраивается в три клика (выбираете нужное количество сотрудников, голосовое меню можно настроить позже).
- Телефонные номера для АТС можно подключить в любом крупном городе РФ либо в 90 странах мира. Номер включается мгновенно после проверки документов (если нужны документы для этого региона). Также можно бесплатно подключить один свой номер.
- Для начитки голосовых приветствий нужно зайти в раздел “Входящие звонки и голосовое меню” и выбрать вариант, который больше подойдет. Можно либо загрузить свои файлы, либо просто напечатать текст и робот его начитает автоматически. В начитке доступно 16 языков и несколько голосов для каждого языка (для английского языка 14 голосов). В личном кабинете можно сохранить до 100 голосовых приветствий.
Пример на PHP
Чтобы показать разные возможности мы создали 4 примера работы с IVR на PHP.
- Система диктует 3 последних цифры из CallerID (пример работы с данными о номере и произнесение цифр)
- Пользователь вводит по DTMF дату своего рождения и система говорит сколько дней до его ДР. (Работы с DTMF и произнесение цифр)
- Бесконечное многоуровневое меню: пользователь может нажимать цифры и попадать в следующее или прошлое меню (пример как простым циклом можно делать любое количество голосовых меню).
- Пример авторизации для получения баланса (полезно для многих примеров из жизни).
Первые три примера доступны на Github. В примере прописаны все необходимые элементы, нужно подставить только файлы с начиткой (которые предварительно загрузить или начитать в АТС).
Задача 4: пользователю произносится голосовое приветствие и просят ввести свой идентификационный номер, после ввода номера система произносит баланс, прощается, используя фразу из списка популярных, и завершает звонок.
Приводим пример кода под описанную задачу.
Код на PHP:
$request = new Request();
$notify = self::getEvent([AbstractNotify::EVENT_START, AbstractNotify::EVENT_IVR]);
if (!$notify) {
return;
}
switch ($notify->event){
case AbstractNotify::EVENT_START:
$request
->setIvrPlay(self::INFO_FILE_ID)
->setWaitDtmf(TIMEOUT , ATTEMPTS, MAXDIGITS, DTMF_NAME, DEFAULT_BEHAVIOUR);
break;
case AbstractNotify::EVENT_IVR:
if (!empty($notify->wait_dtmf->digits)) {
$balance = getBalance($notify->wait_dtmf->digits);
$request->setIvrSayNumber($balance, 'en');
} elseif (!empty($notify->ivr_saynumber)) {
$request->setIvrSayPopular(POPULAR_PHRASE_NUM, 'en');
} else {
$request->setHangup();
}
}
$request->send();
Исследуем необходимость дальнейшего расширения функционала методов и собираем обратную связь, пожелания в комментариях приветствуются. Кроме этого доступно множество других методов вебхуков и api. Полный список есть на сайте.
Автор: Павел Карев