logo
Инструменты      18/11/2021

Как создать чат-бот с помощью Azure Bot Service: пошаговая инструкция

Даниил Михов BLOG

.NET Developer в NIX

Бот — это приложение, которое автоматизирует (или выполняет по заданному сценарию) действие по запросу пользователя. Сегодня мессенджеры, сетевые сервисы и другое ПО не обходятся без ботов.

В этой статье я разберу пример создания чат-бота при помощи Azure Bot Service от Microsoft. Тема будет полезна всем, кто решил заняться разработкой ботов. Погнали!


Содержание:
Почему Azure Bot Service?
Анатомия бота в Azure Bot Services
Переходим к созданию бота
Правильно ли бот понимает вас?
Контроллеры и темплейты
Особенности Startup-а и наполнение вкладки ToDoDialog
Первый запуск и тестирование в Bot Framework Emulator
Как бот ориентируется во времени
Вместо заключения

Почему Azure Bot Service?

Преимущество разработки ботов на Azure Bot Services — высокая степень поддержки Microsoft своего продукта. Специалисты компании активно общаются с комьюнити и оперативно выявляют и исправляют баги в своих сервисах. Кроме того, Microsoft дает возможность создавать кастомные JSON-файлы для работы с API некоторых мессенджеров, что открывает большой спектр возможностей при создании ботов.

Вспомним и о других преимуществах:

  • В Azure Bot Service есть возможность использовать open-source SDK-инструменты (Software Development Kit) для создания, тестирования и развертывания бота.
  • Интеграция с Cognitive Services — сервисами, использующими в своей работе инструменты машинного обучения для решения типовых задач. Благодаря CS обеспечивается более качественный процесс взаимодействия бота с пользователем.
  • Мультиплатформенность — возможность подключения бота ко множеству каналов без необходимости изменения первоначального кода.
  • Большое количество открытых примеров, облегчающих процедуру разработки и быстрого старта (масса примеров готового кода на GitHub).
  • Курс QA engineer від Mate academy.
    Після навчання на курсі QA engineer ви зможете розробляти плани тестування додатків та сайтів. Працевлаштування гарантовано.
    Отримати знижку на курс

Инфраструктуру ботов на Azure можно расширять, добавляя в нее новый функционал. Например, вы можете добавить большее количество каналов и протестировать работу приложения на каждом из них.

Для хранения состояний диалогов и информации, которую вводит пользователь, можно использовать сервис Cosmos DB. А для обучения бота — добавить LUIS (Language Understanding). Сервис использует алгоритмы машинного обучения для лучшей коммуникации с пользователем. Но LUIS платный, и не каждый из ваших заказчиков захочет выделять на него дополнительное финансирование.

Анатомия бота в Azure Bot Services

Структуру функционирования бота, создаваемого на Azure, можно представить следующим образом:

Иллюстрация: Microsoft

Структура функционирования бота / Иллюстрация: Microsoft

Справа — перечень возможных каналов, к которым можно подключить бота. Этот список постоянно пополняется новыми платформами. Внизу — доступные Microsoft Cognitive Services, с которыми может работать платформа Azure. Эти сервисы позволяют коммуницировать с ботом через голосовые запросы, мимику, жесты и многое другое.

Для разработки бота на Azure используется Bot Builder SDK. Продукт — в открытом доступе, и его главный плюс — постоянная поддержка разработчиками. На их GitHub вы всегда сможете получить актуальную информацию о сервисе или задать интересующие вас вопросы его разработчикам.

Переходим к созданию бота

Прежде чем написать код, проанализируем нюансы, которые стоит учитывать перед созданием бота на Azure Bot Service:

  • Обновления, ломающие функционал. Microsoft постоянно обновляет свои продукты. При этом новые обновления довольно часто «отламывают» ранее работающее куски кода. Поэтому всегда читайте патчноуты от англ. «patch notes» — дословно переводится как «исправления» новых билдов Bot Builder SDK. Возможно, чужие гайды, по которым вы будете делать своего бота, окажутся неактуальными.
  • Неочевидные решения. При использовании Bot Builder SDK вам всегда стоит быть открытым к экспериментам и быть готовым делать все не так, как вы привыкли.
  • Универсальность. Одного и того же бота можно залить на разные каналы (Telegram, Skype, Slack и так далее), не меняя его исходный код. Но при разработке бота следует учитывать, что у каждой из этих платформ есть свои нюансы, которые потребуют от вас, как от разработчика, разных подходов при создании рабочей логики приложения.
  • Курс Full-stack developer від Mate academy.
    Ідеальний курс для новачків - після закінчення гарантоване працевлаштування. Ви навчитесь працювати як з фронтендом, так і з бекендом сайта. .
    Отримати знижку на курс

Правильно ли бот понимает вас?

Коммуникация с ботом происходит через пользовательский интерфейс. Именно он позволяет общаться с ботом на понятном ему языке. Для этого в Azure используется система диалогов, которая подчиняется определенной иерархии:

Иерархия в системе диалогов в Azure

Иерархия в системе диалогов в Azure

Здесь мы видим три основных способа построения диалога с ботом:

  1. Prompt — способ взаимодействия бота с пользователем с помощью системы подсказок и ответов. Например, вы задаете боту информацию в виде числовой подсказки. Prompt проверяет, был ли получен правильный ответ на подсказку от пользователя. В случае успеха диалог с ботом продолжится. Если от пользователя получен некорректный ответ, ему предложат ввести валидные данные.
  2. Waterfall — сбор информации от пользователя с помощью серии последовательных задач/вопросов. Каждый шаг waterfall-диалога реализуется как асинхронная функция. На каждом шаге бот запрашивает у пользователя входные данные, ожидает ответа, а затем передает результаты на следующий этап. Результат первой функции в качестве аргумента передается следующей и так далее, пока не будет пройден весь цикл вопросов.
  3. Component — способ, в котором используется разбиение большого и объемного диалога на более мелкие и легко управляемые части. Component позволяет создать многоразовый диалог и использовать его в дальнейшем для различных независимых сценариев. Например, с его помощью можно создать диалог, который будет последовательно запрашивать у пользователя название улицы/номер дома/почтовый индекс.

В нижнем ряду — допустимые способы для создания пользовательского запроса боту:

  • запрос текста (Text);
  • запрос числа (Number);
  • запрос даты/времени (DateTime);
  • Бізнес англійська від Englishdom.
    Тут навчають за методикою Кембриджу, завдяки якій англійську вивчили понад 1 мільярд людей. Саме вона використовується в найкращих навчальних закладах світу, і саме за нею створені курси.
    Інформація про курс
  • запрос подтверждения (Confirm);
  • запрос выбора (Choice);
  • запрос вложения (Attachment).

По своей сути запросы — это поэтапные диалоги: на первом этапе бот запрашивает входные данные, а на втором — возвращает юзеру допустимые значение или запускает цикл запроса данных заново при поступлении некорректных значений.

Контроллеры и темплейты

Давайте рассмотрим кодовую начинку на примере созданного мною чат-бота Remind me later — его основной задачей было напоминание о действиях, которые мне нужно совершить в будущем.

Для создания бота я использовал Empty Template, предоставленный Visual Studio, который включает в себя BotController.

BotController принимает сообщения для бота и передает их бот-фреймворку. Бот также состоит из нескольких Deployment Templates — шаблонов, которые используются для более легкого размещения приложения на платформе Azure.

NotifyController используется для определения времени, когда нужно отправить пользователю сообщение. Более подробно о нем я расскажу ниже.

Онлайн-курс Pyton від Powercode academy.
Опануйте PYTHON з нуля та майте проект у своєму портфоліо вже через 4 місяця.
Приєднатися

Особенности Startup и наполнение вкладки ToDoDialog

Перейдем во вкладку Startup.cs и посмотрим на ее наполнение. Здесь видим зарегистрированный обработчик ошибок — AdapterWithErrorHandler. Он необходим для реакции приложения на ошибки в случае их появления в программе. Обратите внимание на регистрацию ConversationState — его мы используем, чтобы бот понимал, с каким конкретно пользователем он общается, и на каком этапе этот диалог находится:

Рассмотрим содержимое вкладки ToDoDialog.cs. Я объявил waterfallSteps — это набор шагов для waterfall-диалога, о котором мы уже упоминали выше. В waterfallSteps мы указываем, какие именно асинхронные функции будут использоваться для построения диалога пользователя с ботом на каждом из шагов:

Теперь посмотрим, какие типы вводимых Prompt будет использовать наш бот. С наполнением здесь все довольно стандартно: бот задаст нам несколько вопросов о событии и затем предложит запланировать напоминание для него:

Теперь давайте запустим чат-бота и протестируем его работу при помощи интерфейса Bot Framework Emulator.

Bot Framework Emulator — это приложение, которое позволяет тестировать и отлаживать ботов как локально, так и удаленно. Используя эмулятор, вы можете общаться с ботом и проверять сообщения, которые он отправляет и получает. Эмулятор отображает сообщения точно так же, как они видны в пользовательском интерфейсе веб-чата.

Первый запуск и тестирование в Bot Framework Emulator

При запуске приложения появляется ссылка на URL-адрес, где бот будет ждать сообщение от пользователя:

Онлайн-курс "AWS для початківців" від robot_dreams.
Навчіться працювати з cloud-native системами та побудуйте власний застосунок для зберігання даних у системі AWS.Досвід і фідбек від Fullstack Developer in Amazon.
Детальніше про курс
Начнем!

Начнем!

Перед началом тестирования укажем эту ссылку в Bot Framework Emulator:

На первом шаге общения бот просит пользователя ввести название события, для которого необходимо напоминание. Для этого вызовем следующий код:

Теперь при обращении к боту он вернет нам следующий текст: Please enter event description. После объявления события, для которого необходимо сделать напоминание (например: Buy milk), вызовем код второго шага — в нем бот предложит выбрать один из трех вариантов времени напоминания:

Обратите внимание на использование stepContext. Он сохраняет всю информацию о диалоге, записывая промежуточные значения.

Для реализации списка возможного времени напоминания я использовал ChoicePrompt. Этот метод предложит пользователю на выбор три варианта ответа с возможным временем напоминания (через 2 минуты, через 5 минут или на следующий день в это же время). Вариантов ответа может быть и больше, но я остановился на трех.

Обозначим каждое новое время выбора через Choiceи получим:

Онлайн- курс Java developer від Mate academy.
Якщо ви не можете навчатись повний день, обирайте курс Java developer з гнучким графіком! Ви зможете опанувати нову професію та отримати нову роботу!
Отримати знижку на курс

В Bot Framework Emulator этот код будет визуализирован вот так:

Полученный результат можно распарсить при помощи Parse.

Для тех, кто забыл, напомню, что парсинг — это процесс автоматического сбора данных и их последующее структурирование.

Затем бот спросит у пользователя, уверен ли он в выбранном варианте времени напоминания, используя для подтверждения согласия ConfirmPrompt:

Визуально этот метод будет выглядеть так:

Последним шагом мы достанем из stepContext заполненную ранее информацию и сформируем SavedNotificationModel, в которую обязательно необходимо добавить conversationReference. Без этого бот не сможет восстановить диалог с пользователем и не сможет понять, какой конкретно пользователь к нему обращался:

В качестве временного хранилища для этих событий я использовал метод dictionary, благодаря которому каждому конкретному диалогу бот присваивает свой уникальный instanceid:

На этом диалог с ботом будет закончен. Можно вывести пользователю текст, который будет свидетельствовать об окончании диалога и создании соответствующего запроса на напоминание:

Психологічний профорієнтаційний тест для IT-фахівців від Hillel IT School.
Пройдіть психологічний профорієнтаційний тест для IT-фахівців щоб дізнатися ваші сильні сторони, вподобання і інтереси і з'ясувати, яка IT-спеціальність вам підходить.
Пройти тест

Thanks. Notification has been successfully saved.

Читайте также: «Говори по-человечески»: инструкция, как научить бота общаться

Как бот ориентируется во времени

Для ориентирования бота во времени я создал в NotifiedController метод NotifyTimeCheck(). Этот метод позволяет систематически опрашивать наше приложение, и в случае скорого наступления времени события бот достанет это событие из dictionary и отправит пользователю нотификейшн:

Для получения нотификации я вызову у BotAdapter метод ContinueConversationAsync() и передам в него ConversationReference. Первым параметром функции ContinueConversationAsync() всегда необходимо передавать аppId (Application ID) нашего бот-сервиса, иначе он не будет работать.

Помимо этого, самому боту нужно напомнить, что при наступлении определенного времени о событии необходимо сообщить конкретному пользователю. Для этого можно использовать Azure Function (BotTimerFunction), которая будет срабатывать по временному триггеру (TimerTrigger):

Каждую минуту функция будет отправлять запрос на этот Endpoint и запускать проверку предписанных событий. При попадании в нужные временные рамки бот выдаст пользователю уведомление о скором наступлении запланированного события.


Вместо заключения

Автоматизировать рутинные процессы, оперативно выдавать покупателям нужную информацию о продуктах, получать и обрабатывать обращения — все эти возможности грамотно настроенного чат-бота помогают превратить обычного пользователя в постоянного клиента. Поэтому в наше время создавать и обучать чат-бота — полезный навык, который сделает вас востребованным специалистом. Дерзайте!

Читайте также: Как создать Telegram-бота с помощью библиотеки python-telegram-bot

Онлайн-курс "CRM-стратегія" від Laba.
Прокачайте комплексне бачення CRM маркетингу, щоб покращити клієнтський досвід і збільшити конверсію.Навчіться вимірювати активність клієнтів та ефективність програм лояльності.
Детальніше про курс

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Онлайн-курс повного дня Front-end developer від Mate academy.
Цей курс ідеальний для новачків - 85% наших студентів не мали попереднього досвіду. Гарантованне працевлаштування: 3 500 випускників вже отримало роботу. .
Отримати знижку на курс

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: