Работа с естественными языками (NLU, NLP) – зона активной конкуренции между IT-гигантами. Равно как и развитие ИИ. Ну и, соответственно, пересечение этих множеств – тоже горячая ниша, за которой интересно наблюдать и осваивать новое. Voximplant давно подружился с гугловским Dialogflow, причем настолько хорошо, что мы сделали обертку для этой интеграции – Dialogflow Connector. У корпорации IBM есть аналог, Voice Agent на основе Watson, который выполняет ту же задачу – автоматизировать гибкое, адекватное общение с клиентом, чтобы заменить классический IVR. Мы попробовали технологию на простом демо и сегодня пошагово расскажем, как сделать также. А пока вы будете это читать, наши разработчики продолжат делать обертку уже для этой интеграции…
Что будем делать?
Никакого rocket science – создадим простейшего бота, которому мы позвоним, он поздоровается, предложит два варианта на выбор: один закольцует общение, другой закончит беседу и бот попрощается. Нюанс: на момент написания статьи Watson поддерживает только четыре языка – английский, арабский, португальский и китайский (упрощенный) – поэтому демка будет на английском, как наиболее знакомом из них.
Создание ресурса
Если у вас нет аккаунта IBM Cloud, то зарегистрируйтесь здесь. Зайдите в аккаунт, в правом верхнем углу нажмите Create resource, откроется каталог ресурсов. Слева выберите категорию Web and Application, затем в правой части экрана кликните Voice Agent with Watson.
Можете оставить все поля по умолчанию (Service Name, region, и т.д.) – внизу экрана нажмите Create и сходите заварить чай (это шутка, т.к. IBM Cloud не всегда быстро ворочается). Когда ресурс создастся, вы попадете на дашборд этого свежесозданного ресурса; здесь вы увидите название ресурса, локацию (Washington, DC), а также меню управления ресурсом – оно расположено слева. Скоро нам понадобится пункт Manage из этого меню, но прежде надо купить…
Номер Voximplant
Агенту нужен номер, по которому до него можно будет дозвониться. Для этого идем в панель Voximplant, раздел Numbers —> My Phone Numbers, в правом верхнем углу нажмите Buy new phone number. Для наших целей подойдет виртуальный номер – поставьте переключатель Test numbers, отметьте один номер из списка и внизу кликните Buy selected, затем – Buy в открывшемся окне.
Вы тут же увидите этот номер в списке своих номеров. Скопируйте его и возвращайтесь в IBM Cloud, к ресурсу Voice Agent with Watson.
Создание агента
Совет. Если вы закрыли вкладку с ресурсом, то вот как быстро открыть ресурс с главной страницы. На дашборде cloud.ibm.com кликните на слове Services, откроется список текущих ресурсов вашего аккаунта.
При этом уже будет развернута группа Services и в ней виден Voice Agent. Щелкайте на нем – ура, вы снова открыли нужный ресурс.
В левом меню выберите Manage, затем в правой части экрана нажмите кнопку Create a voice agent. Впишите имя агента и вставьте купленный виртуальный номер, прокрутите вниз – Create voice agent.
IBM Cloud немного подумает и покажет сообщение об успешном создании агента и 3 вложенных сервисов. Отлично, теперь надо научить агента, как…
Разговаривать с кожаными мешками
В левом верхнем углу щелкните на иконку-гамбургер, выберите Resource list. В списке ресурсов выберите VoiceAgent-WatsonAssistant (нижний в списке). В панели управления нажмите Launch tool. Откроется панель управления ассистентом Watson. Сверху выберите вкладку Skills. Вы увидите, что там уже есть навык VoiceGatewayConversation – это набор фраз и блок-схема диалога, которые добавил визард при создании агента. Можно использовать этот навык, но интереса ради мы предлагаем создать свой.
Для этого на вкладке Skills нажмите Create skill. Назовите его simple-skill, оставьте язык English (US), нажмите Create dialog skill.
Внутри навыка вам понадобятся три вкладки:
- Intents – намерения клиента. По сути, это фразы и их вариации;
- Entities – ключевые слова для распознавания и их синонимы;
- Dialog – блок-схема диалога.
На вкладке Intents добавьте высказывание #whatcanido и пропишите несколько вариантов для него («What can I do?», «Show me the options» и т.д.).
На вкладке Entities добавьте:
- «@continue» с синонимами «go on», «proceed»;
- «@options» с синонимами «variants», «option», «choices»;
- «@stop» с синонимами «stopped», «quit».
На вкладке Dialog нажмите Create dialog, появятся блоки Welcome и Anything else. Откройте Anything else и выставьте настройки как на скриншоте (текст: «You can choose to continue this meaningless conversation or stop it. Say "continue" or "stop"».). Обратите внимание, что в условии распознавания мы добавили не только intent, но и ключевое слово для подстраховки.
Затем нажмите на три точки на блоке Anything else, выберите Add child node, создайте блок «@continue». Создайте внутри Anything else создайте еще один дочерний блок – «@stop». Настройки блоков:
Таким образом, бот либо будет бесконечно повторять текст про выбор, пока человек будет говорить «continue», либо закончит диалог, когда человек скажет «stop». Воистину, meaningless conversation.
Если вам лень проделывать все это, то можете скачать наш json-файл и импортировать его как навык. Для этого на вкладке Skills нажмите Create skill, переключитесь на вкладку Import skill, нажмите Choose JSON file, укажите скачанный файл и в конце нажмите Import.
Последнее, но не менее важное на этом этапе: вернитесь на на cloud.ibm.com, откройте Resource list, щелкните на Voice Agent with Watson, перейдите на вкладку Manage. У агента habr-watson нажмите на три точки, выберите Edit agent. В разделе Conversation поменяйте Skill name, указав только что созданный навык:
Готово, теперь агент умеет общаться с людьми! Остался последний штрих, а именно…
Приложение и сценарий Voximplant
В панели управления Voximplant создайте приложение watson. Все следующие шаги необходимо делать внутри этого приложения. Перейдите на вкладку Scenarios и создайте сценарий watson-scenario с кодом:
require(Modules.ASR)
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => {
let call2 = VoxEngine.callSIP("sip:699100484@us-east.voiceagent.cloud.ibm.com")
const recognition = VoxEngine.createASR({
lang: ASRLanguage.ENGLISH_US
})
let botSpeech = ""
recognition.addEventListener(ASREvents.Result, e => {
botSpeech += e.text
botSpeech.includes("goodbye") ? VoxEngine.terminate() : Logger.write("There is no 'goodbye' yet.")
})
call2.addEventListener(CallEvents.Connected, () => call2.sendMediaTo(recognition))
VoxEngine.easyProcess(e.call, call2)
})
Не забудьте подставить в вызов метода callSIP именно тот номер телефона, который вы купили ранее и указали в настройках агента IBM!
Затем перейдите на вкладку Routing и создайте правило watson-rule. Укажите сценарий watson-scenario:
Наконец, перейдите на вкладку Numbers, где будут разделы Attached (в нем пока пусто) и Available. Переключитесь на Available, отметьте купленный номер и нажмите Attach.
В открывшемся окне укажите правило watson-rule, затем Attach.
Теперь номер появится в разделе Attached. Здесь же вы увидите номера, на которые вы можете позвонить, затем ввести купленный виртуальный номер в тоновом режиме и начать высокоинтеллектуальную беседу с ботом IBM.