Недавно мы презентовали решение для бизнеса, которое назвали Dialogflow Connector: связка из гугловского Dialogflow и нашего облака Voximplant. Коннектор может работать вместо оператора колл-центра и принимать сложные заказы. Это стало возможным, потому что Dialogflow позволяет уйти от сценария обычного IVR, где клиент вынужден называть слова из заданного набора, на который умеет реагировать интерактивное меню. Гугловская платформа может последовательно получать входные данные от клиента и собирать их воедино – например, чтобы сформировать заказ в интернет-магазине. Вероятно, вы уже слышали модное слово «slot filling», так вот это он и есть. Под катом вас ждут подробности, как мы делали бота для заказа пиццы – по аналогии вы можете запилить нечто похожее и возрадоваться, что времена лифта и «eleven» давно прошли…
Для начала следует арендовать виртуальный номер, на который будет «отвечать» бот. Для этого в админке Voximplant в меню «Номера» щелкните «Купить телефонный номер».
На новом экране поставьте переключатель в позицию «Тестовые номера» – это позволит арендовать виртуальный номер.
Виртуальные номера очень дешевы и позволяют полноценно протестировать любое решение на нашей платформе. Арендуйте номер и далее…
Теперь нам нужен облачный сценарий, сердце нашего решения. Именно он будет принимать звонок, распознавать речь и передавать ее в Dialogflow. Сценарий должен быть создан внутри приложения. В левом меню выберите «Приложения», создайте новое приложение и дайте ему имя.
Затем перейдите на вкладку «Сценарии» в вашем приложении и создайте свой, нажав на плюс. Не забудьте дать ему имя, например, dialogflow.
Время писать код!
Подключим модуль AI – в нем лежат методы и события для Dialogflow – а также модуль распознавания речи и плеер. Объявим переменные и хитрую функцию wordend, которая принимает на вход количество (пицц) и массив со словами ('маргариту', 'маргариты', 'маргарит') и возвращает слово, подходящее цифре по падежу. Это нужно, чтобы бот не говорил «4 маргарита», а грамотно выдавал «4 маргариты».
Теперь добавим хендлер для входящего звонка и вспомогательную функцию startASR:
Когда происходит событие Connected, вызывается функция handleCallConnected. Собственно в ней и происходит весь фарш:
Листинг функции:
Осталось совсем немного. Перейдите на вкладку Роутинг —> «Создать». Появится модальное окно с формой. Название можно дать по аналогии – dialogflow-rule. Маску оставьте по умолчанию и самое главное – прикрепить сценарий dialogflow. Нажмите «Создать правило», модальное окно закроется.
Теперь к приложению нужно прикрепить купленный номер. Для этого перейдите в раздел «Номера» внутри вашего приложения, нажмите «Доступные» и затем – «Прикрепить» возле выбранного номера. Откроется модальное окно, остается только выбрать здесь нужное правило и нажать «прикрепить».
Нажмите «Сохранить». Теперь сценарий знает, на что ему нужно реагировать на любой набранный номер, который вы арендовали. Учитывая, что номер у нас один, это то, что нам нужно.
Отлично, теперь все связано воедино и должно работать!
В терминах Dialogflow агент – это и есть бот. Мы уже подробно описывали, как создать своего агента и как с ним общаться, но в этот раз мы предлагаем использовать нашу заготовку.
Вам нужно зарегистрироваться на dialogflow.com и создать нового агента. Не забудьте указать русский язык:
По умолчанию агент не знает ни одного высказывания (intents) и вообще ничего не умеет. Скачайте ассеты нашего агента и загрузите их в вашего: для этого в настройках агента перейдите на вкладку «Export and Import» —> «Import from ZIP».
Теперь у вас есть набор высказываний для заказа пиццы! Можно изучить их в разделе «Intents»; обратите внимание, что у агента есть вспомогательные высказывания pizza.sizehelp и pizza.typehelp. Благодаря им после приветствия пиццерии клиент может спросить «А какие у вас есть пиццы» и бот расскажет, что есть в меню.
Проверьте, что в настройках на вкладке General выбрана вторая версия API.
Наконец, скачайте JSON вашего гугловского Service account – это делается в пару кликов.
В меню слева в вашем приложении Voximplant выберите «Dialogflow коннектор», нажмите «Добавить», в появившейся модальной форме загрузите JSON и снова нажмите «Добавить».
Вы увидите, что JSON-файл появился в списке, это значит, что он привязан к приложению.
Готово! Связка Dialoglow + Voximplant настроена, все звенья цепи собраны вместе.
На случай, если вам лень было делать все эти шаги, вы можете пощупать нашу пиццерийную демку:
Номер телефона
Для начала следует арендовать виртуальный номер, на который будет «отвечать» бот. Для этого в админке 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, происходит слот филлинг;
- синтезированный голос озвучивает заказ и адрес клиента;
- бот кладет трубку, сессия закрывается.
Листинг функции:
handleCallConnected
Осталось совсем немного. Перейдите на вкладку Роутинг —> «Создать». Появится модальное окно с формой. Название можно дать по аналогии – 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;
- наслаждайтесь чудо-ботом :)