['большую', 'большие', 'больших']
Недавно мы презентовали решение для бизнеса, которое назвали Dialogflow Connector: связка из гугловского Dialogflow и нашего облака Voximplant. Коннектор может работать вместо оператора колл-центра и принимать сложные заказы. Это стало возможным, потому что Dialogflow позволяет уйти от сценария обычного IVR, где клиент вынужден называть слова из заданного набора, на который умеет реагировать интерактивное меню. Гугловская платформа может последовательно получать входные данные от клиента и собирать их воедино — например, чтобы сформировать заказ в интернет-магазине. Вероятно, вы уже слышали модное слово «slot filling», так вот это он и есть. Под катом вас ждут подробности, как мы делали бота для заказа пиццы — по аналогии вы можете запилить нечто похожее и возрадоваться, что времена лифта и «eleven» давно прошли…
Номер телефона
Для начала следует арендовать виртуальный номер, на который будет «отвечать» бот. Для этого в админке Voximplant в меню «Номера» щелкните «Купить номер телефона».
На новом экране щелкните поставьте переключатель в позицию «Тестовые номера» — это позволит арендовать виртуальный номер.
Виртуальные номера очень дешевы и позволяют полноценно протестировать любое решение на нашей платформе. Арендуйте номер и далее…
… создайте сценарий
Теперь нам нужен облачный сценарий, сердце нашего решения. Именно он будет принимать звонок, распознавать речь и передавать ее в Dialogflow. На вкладке Сценарии нажмите «Создать сценарий», дайте ему имя — например, dialogflow — и нажмите «Создать». Время писать код!
Подключим модуль AI — в нем лежат методы и события для Dialogflow –, а также модуль распознавания речи и плеер. Объявим переменные и хитрую функцию wordend, которая принимает на вход количество (пицц) и массив со словами ('маргариту', 'маргариты', 'маргарит') и возвращает слово, подходящее цифре по падежу. Это нужно, чтобы бот не говорил »4 маргарита», а грамотно выдавал »4 маргариты».
require(Modules.AI);
require(Modules.ASR);
require(Modules.Player);
let mycall = null,
voice = Language.Premium.US_ENGLISH_FEMALE3,
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
Приложение + номер + правило
В нашей телефонии есть понятие «приложения». Приложение связывает JS-сценарии с арендованными номерами. И даже если сценарий всего один (наш случай), то все равно нужно создать приложение. Для этого на вкладке Приложения нажмите «Создать приложение», введите имя для нового приложения — dialogflow-app — и нажмите «Создать».
Теперь перейдите на вкладку «Правила» —> «Добавить правило». Появится модальное окно с формой. Название можно дать по аналогии — dialogflow-rule. Маску оставьте по умолчанию и самое главное — перетяните слева направо сценарий dialogflow. Нажмите «Добавить», модальное окно закроется.
Нажмите «Сохранить». Теперь сценарий знает, на что ему нужно реагировать на любой набранный номер, который вы арендовали. Учитывая, что номер у нас один, это то, что нам нужно.
Чтобы связать номер с приложением, в меню «Номера» нажмите «Мои номера телефонов».
Назначьте номеру приложение dialogflow-app и правило dialogflow-rule, затем нажмите на галочку. Отлично, теперь наш номер, JS-сценарий и правило связаны и работают сообща.
Агент Dialogflow
В терминах Dialogflow агент — это и есть бот. Мы уже подробно описывали, как создать своего агента и как с ним общаться, но в этот раз мы предлагаем использовать нашу заготовку.
Вам нужно зарегистрироваться на dialogflow.com и создать нового агента. Не забудьте указать русский язык:
По умолчанию агент не знает ни одного высказывания (intents) и вообще ничего не умеет. Скачайте ассеты нашего агента и загрузите их в вашего: для этого в настройках агента перейдите на вкладку «Export and Import» —> «Import from ZIP».
Теперь у вас есть набор высказываний для заказа пиццы! Можно изучить их в разделе «Intents»; обратите внимание, что у агента есть вспомогательные высказывания pizza.sizehelp и pizza.typehelp. Благодаря им после приветствия пиццерии клиент может спросить «А какие у вас есть пиццы» и бот расскажет, что есть в меню.
Проверьте, что в настройках на вкладке «General» выбрана вторая версия API.
Наконец, скачайте JSON вашего гугловского Service account — это делается в пару кликов.
Привязать агента к приложению Voximplant
В админке Voximplant, в меню «Настройки», выберите «Dialogflow коннектор».
Выберите «Добавить Service Accounts», загрузите JSON и нажмите «Добавить». Вы увидите, что JSON-файл появился в списке Service Account. Нажмите «Привязать», выберите приложение dialogflow-app и сохраните.
Готово! Связка Dialoglow + Voximplant настроена, все звенья цепи собраны вместе.
На случай, если вам лень было делать все эти шаги, вы можете пощупать нашу пиццерийную демку:
- заходите по адресу http://demos05.voximplant.com/pizza/;
- вводите номер телефона (для России это будет 7900…) и клацайте «ДАЛЕЕ»;
- c указанного номера наберите +74999384952;
- наслаждайтесь чудо-ботом :)