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

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

Спойлер: Все реализовано на 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. Полный список есть на сайте.

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


  1. Romario21
    17.04.2019 16:45

    По мне так это просто ужаснейший кейс по работе с клиентами. Собственно как и голосовые меню. Задолбаешься кнопки тыкать или с роботом говорить. Я когда звоню, я хочу что бы через пару секунд трубку взял человек, а не заниматься не пойми чем


    1. IgorDimitrov
      17.04.2019 17:15
      +1

      Данный функционал не плод нашей фантазии а результат пожеланий клиентов (в том числе на Хабре в комментариях осенью просили).
      Как именно клиентам это применять зависит исключительно от их задач и фантазии. Молотком также можно попасть по пальцам, но это не повод от них отказываться.
      И даже для не любителей IVR можно на этом функционале делать планируемое время ожидания ответа, или просить нужную информацию чтобы потом сразу дать ответ и не диктовать вручную.


      1. Romario21
        17.04.2019 18:02

        Да к вам претензий нет, просили-сделали. Я говорю именно про компании которые данный подход используют


        1. CrazyRoot
          17.04.2019 21:28
          +1

          Вы с той стороны не были явно.
          Вот вам пример голосового сообщения из IVR:
          «Если вы хотите подключиться, узнать о услугах и тарифах, нажмите 1, Если вам нужна тех.поддержка нажмите 2». Звонящий нажимает два и говорит «я хочу подключится и узнать о тарифах.»
          Вот как с таким бороться? Поэтому и выстраивает меню таким образом, что бы самому альтернативно одаренному клиенту было понятно.


          1. HangGlider
            18.04.2019 11:56

            Иногда бизнес хочет отправить человека в бесконечное путешествие по IVR. Потому что скорингом не вышел или время операторов жрет без «выхлопа», или правила компании запрещают продолжение общение после какого-то события. Пусть лучше тратит своё время в IVR, вместо попыток связи через альтернативные каналы и отжиранием времени людей.