Один из последних трендов — онлайн чат-боты. Но, что делать с теми клиентами, которые находятся оффлайн? Большой процент людей предпочитает звонить по телефону. Для них нужен или большой штат операторов, или решение по автоматизации работы с голосом. Предлагаем решение для уменьшения работы и затрат (и даже почти не нагрузит вашего программиста).

Как быстро и легко программировать любое голосовое меню, автоинформатор, робота-секретаря с привязкой к своей базе клиентов?

Спойлер: Все реализовано на webhooks и приведен пример на PHP.

Обсуждаем под катом.

Что и зачем?


Например, у вас служба доставки либо интернет-магазин со своей службой логистики. Часть клиентов звонит чтобы узнать, как дела с их посылкой/товаром и это можно легко автоматизировать. Аналогично — гео-локация такси, сбор данных со счетчиков, вообще любая индивидуальная онлайн информация, которую вы можете дать клиенту и не тратить на “справку” время живых операторов.

Автоматизировать это очень просто, ниже опишем пример. И, ах, все это можно сделать абсолютно бесплатно.

Почему не свой asterisk?


Конечно, все можно сделать и на Asterisk, но тут кроме разработчика потребуется и администратор, причем со знаниями в части безопасности голосовых сетей (так как их особенно любят взламывать).

Рассматриваем самую простую реализацию решения поставленной задачи — на вебхуках.

Список методов


Для работы нам понадобится всего 2 новых метода, но каждый из них дает много возможностей, а главное — неограниченные циклы. Благодаря циклам можно получить голосовое меню любой глубины и информатор на любую тему.

Основные методы:


  • NOTIFY_START — начало входящего звонка в АТС
  • NOTIFY_IVR — ответ абонента на заданное действие

Подробное описание методов для копипаста доступно в описании API.

Для запросов NOTIFY_START и NOTIFY_IVR можно «на лету» изменять сценарий работы по текущему звонку, отправив в ответ один из следующих вариантов:







По факту, клиент звонит и слушает приветствие, потом донабирает определенный номер (например, номер заказа), мы отправляем уведомление с цифрами которые он набрал, скрипт абонента проверяет по базе и отправляет ответ на уведомление к нам. В ответе, может содержаться id голосового файла или вариант стандартного голосового сообщения.

У нас есть стандартная система воспроизведения чисел, поэтому не нужно записывать предварительное голосовое сообщение, то есть из базы берется нужное уведомление и оно воспроизводится роботом как число. Либо же можете создать до 100 вариантов шаблонных голосовых уведомлений и отправлять их в ответ на запрос клиента (Ваш товар находится на складе, Вы можете получить ваш товар с 9 утра до 10 вечера ежедневно кроме воскресенья, Ваша посылка находится в пункте выдачи — метро Белорусская).

Минимум для реализации


Чтобы секретарь смог ответить, нужен как минимум номер телефона и АТС. Также стоит заранее загрузить либо автоматически начитать ответы секретаря.

Настраиваем




  1. Бесплатная АТС для нашей задачи настраивается в три клика (выбираете нужное количество сотрудников, голосовое меню можно настроить позже).
  2. Телефонные номера для АТС можно подключить в любом крупном городе РФ либо в 90 странах мира. Номер включается мгновенно после проверки документов (если нужны документы для этого региона). Также можно бесплатно подключить один свой номер.
  3. Для начитки голосовых приветствий нужно зайти в раздел “Входящие звонки и голосовое меню” и выбрать вариант, который больше подойдет. Можно либо загрузить свои файлы, либо просто напечатать текст и робот его начитает автоматически. В начитке доступно 16 языков и несколько голосов для каждого языка (для английского языка 14 голосов). В личном кабинете можно сохранить до 100 голосовых приветствий.



Пример на PHP


Чтобы показать разные возможности мы создали 4 примера работы с IVR на PHP.

  1. Система диктует 3 последних цифры из CallerID (пример работы с данными о номере и произнесение цифр)
  2. Пользователь вводит по DTMF дату своего рождения и система говорит сколько дней до его ДР. (Работы с DTMF и произнесение цифр)
  3. Бесконечное многоуровневое меню: пользователь может нажимать цифры и попадать в следующее или прошлое меню (пример как простым циклом можно делать любое количество голосовых меню).
  4. Пример авторизации для получения баланса (полезно для многих примеров из жизни).

Перв��е три примера доступны на 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. Полный список есть на сайте.