Номер телефона
Для начала следует арендовать виртуальный номер, на который будет «отвечать» бот. Для этого в админке Voximplant в меню «Номера» щелкните «Купить телефонный номер».

На новом экране поставьте переключатель в позицию «Тестовые номера» – это позволит арендовать виртуальный номер.

Виртуальные номера очень дешевы и позволяют полноценно протестировать любое решение на нашей платформе. Арендуйте номер и далее…
… создайте сценарий
Теперь нам нужен облачный сценарий, сердце нашего решения. Именно он будет принимать звонок, распознавать речь и передавать ее в Dialogflow. Сценарий должен быть создан внутри приложения. В левом меню выберите «Приложения», создайте новое приложение и дайте ему имя.

Затем перейдите на вкладку «Сценарии» в вашем приложении и создайте свой, нажав на плюс. Не забудьте дать ему имя, например, dialogflow.

Время писать код!
Подключим модуль AI – в нем лежат методы и события для Dialogflow – а также модуль распознавания речи и плеер. Объявим переменные и хитрую функцию wordend, которая принимает на вход количество (пицц) и массив со словами ('маргариту', 'маргариты', 'маргарит') и возвращает слово, подходящее цифре по падежу. Это нужно, чтобы бот не говорил «4 маргарита», а грамотно выдавал «4 маргариты».
require(Modules.AI); require(Modules.ASR); require(Modules.Player); let mycall = null, voice = Language.Premium.RU_RUSSIAN_YA_FEMALE, account_name = "", dialed_number = "", caller_id = "", flow, lastText = '', player function wordend(num, words) { return words[ ((num=Math.abs(num%100)) > 10 && num < 15 || (num%=10) > 4 || num === 0) + (num !== 1) ]; }
Теперь добавим хендлер для входящего звонка и вспомогательную функцию startASR:
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => { mycall = e.call; mycall.addEventListener(CallEvents.Connected, handleCallConnected); account_name = e.toURI.substring(e.toURI.indexOf('.') + 1); account_name = account_name.substring(0, account_name.indexOf('.')); dialed_number = e.destination; caller_id = e.callerid; mycall.answer(); }); function startASR() { mycall.removeEventListener(CallEvents.PlaybackFinished, startASR); mycall.sendMediaTo(flow); }
Когда происходит событие Connected, вызывается функция handleCallConnected. Собственно в ней и происходит весь фарш:
- создается объект Dialogflow;
- синтезированный голос приветствует клиента и предлагает сделать заказ;
- запускается распознавание, клиент делает заказ;
- слова клиента передаются в Dialogflow, происходит слот филлинг;
- синтезированный голос озвучивает заказ и адрес клиента;
- бот кладет трубку, сессия закрывается.
Листинг функции:
Осталось совсем немного. Перейдите на вкладку Роутинг —> «Создать». Появится модальное окно с формой. Название можно дать по аналогии – dialogflow-rule. Маску оставьте по умолчанию и самое главное – прикрепить сценарий dialogflow. Нажмите «Создать правило», модальное окно закроется.

Теперь к приложению нужно прикрепить купленный номер. Для этого перейдите в раздел «Номера» внутри вашего приложения, нажмите «Доступные» и затем – «Прикрепить» возле выбранного номера. Откроется модальное окно, остается только выбрать здесь нужное правило и нажать «прикрепить».

Нажмите «Сохранить». Теперь сценарий знает, на что ему нужно реагировать на любой набранный номер, который вы арендовали. Учитывая, что номер у нас один, это то, что нам нужно.
Отлично, теперь все связано воедино и должно работать!
Агент Dialogflow
В терминах Dialogflow агент – это и есть бот. Мы уже подробно описывали, как создать своего агента и как с ним общаться, но в этот раз мы предлагаем использовать нашу заготовку.
Вам нужно зарегистрироваться на dialogflow.com и создать нового агента. Не забудьте указать русский язык:

По умолчанию агент не знает ни одного высказывания (intents) и вообще ничего не умеет. Скачайте ассеты нашего агента и загрузите их в вашего: для этого в настройках агента перейдите на вкладку «Export and Import» —> «Import from ZIP».

Теперь у вас есть набор высказываний для заказа пиццы! Можно изучить их в разделе «Intents»; обратите внимание, что у агента есть вспомогательные высказывания pizza.sizehelp и pizza.typehelp. Благодаря им после приветствия пиццерии клиент может спросить «А какие у вас есть пиццы» и бот расскажет, что есть в меню.
Проверьте, что в настройках на вкладке General выбрана вторая версия API.

Наконец, скачайте JSON вашего гугловского Service account – это делается в пару кликов.
Привязать агента к приложению Voximplant
В меню слева в вашем приложении Voximplant выберите «Dialogflow коннектор», нажмите «Добавить», в появившейся модальной форме загрузите JSON и снова нажмите «Добавить».

Вы увидите, что JSON-файл появился в списке, это значит, что он привязан к приложению.
Готово! Связка Dialoglow + Voximplant настроена, все звенья цепи собраны вместе.
На случай, если вам лень было делать все эти шаги, вы можете пощупать нашу пиццерийную демку:
- заходите по адресу http://demos05.voximplant.com/pizza/;
- вводите номер телефона (для России это будет 7900...) и клацайте «ДАЛЕЕ»;
- c указанного номера наберите +74999384952;
- наслаждайтесь чудо-ботом :)

