ru:https://highload.today/blogs/chat-bot-na-azure-bot-service/ ua:https://highload.today/uk/blogs/chat-bot-na-azure-bot-service/
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).
  • Онлайн-курс "Маркетолог" від Laba.
    Пройдіть повний шлях розробки маркетингових стратегій на практиці та з фідбеком від CEO бренд-маркетингової агенції.
    Програма курсу і реєстрація

Инфраструктуру ботов на 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 и так далее), не меняя его исходный код. Но при разработке бота следует учитывать, что у каждой из этих платформ есть свои нюансы, которые потребуют от вас, как от разработчика, разных подходов при создании рабочей логики приложения.
  • Онлайн-курс "Предметний дизайн" від Skvot.
    Навчіться створювати функціональні, трендові та ергономічні дизайни меблів та предметів інтер’єру.
    Детальніше про програму курсу і лекторів

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

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

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

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

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

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

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

  • запрос текста (Text);
  • запрос числа (Number);
  • запрос даты/времени (DateTime);
  • Онлайн-курс "Project Manager" від Laba.
    Станьте проджектом, що вміє передбачати ризики наперед і доводити проєкт до результату, який хочуть замовники. Поділиться досвідом Павло Харіков, former Head of PMO в Kyivstar.
    Програма курсу і реєстрація
  • запрос подтверждения (Confirm);
  • запрос выбора (Choice);
  • запрос вложения (Attachment).

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

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

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

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

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

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

Курс Python від Mate academy.
Python дозволяє тобі не тільки розробляти сайти та займатись аналітикою даних, а ще й будувати алгоритми, тестувати програми та навіть створювати штучні інтелекти. Стань різноплановим фахівцем!
Реєстрація на курс

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

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

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

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

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

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

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

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

Курс Full-stack Developer від CyberBionic Systematics.
Хочете вміти створювати вебзастосунки та вебсервіси з нуля самостійно? Вам допоможе цей курс .
Інформація про курс
Начнем!

Начнем!

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

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

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

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

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

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

Живий онлайн-курс QA с нуля від Web Academy.
Опануйте трендову IT-професію без досвіду роботи і технічної освіти — та почніть шукати роботу вже через 2,5 місяці навчання на IT-ринку України ❤️, Європи або США/Канади. Знижка у розмірі 10% доступна при використанні промокоду "ITC".
Реєстрація на курс

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

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

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

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

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

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

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

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

Курс English For Tech course від Enlgish4IT.
Лише 7 тижнів по 20-30 хвилин щоденного навчання допоможуть вам подолати комунікативні бар'єри. Отримайте знижку 10% за промокодом ITCENG.
Дійзнайтеся більше

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

Онлайн-курс "Тестування API" від robot_dreams.
Навчіться працювати з API на просунутому рівні та проводити навантажувальні тестування, щоб виявляти потенційні проблеми на ранніх етапах розробки.
Програма курсу і реєстрація

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

Курс Розмовної англійської від Englishdom.
Після цього курсу ви зможете спілкуватись з іноземцями і цікаво розкажете про себе.
Приєднатися

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

Топ-5 самых популярных блогеров марта

PHP Developer в ScrumLaunch
Всего просмотровВсего просмотров
2434
#1
Всего просмотровВсего просмотров
2434
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсего просмотров
113
#2
Всего просмотровВсего просмотров
113
Career Consultant в GoIT
Всего просмотровВсего просмотров
95
#3
Всего просмотровВсего просмотров
95
CEO & Founder в Trustee
Всего просмотровВсего просмотров
94
#4
Всего просмотровВсего просмотров
94
Рейтинг блогеров

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

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

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