Как настроить сценарий чата с ботом Microsoft Azure Web App Bot

В учебной статье «Как настроить Microsoft Azure Web App Bot для чатов» описано создание простого Web App Bot на основе шаблона.

В этом упражнении вы научитесь изменять сценарий Cloud Contact, чтобы использовать Web App Bot в чате.

Порядок действий

Для аутентификации в Direct Line Bot Framework и ведения чата используются блоки сценариев Cloud Contact, поэтому отдельная учетная запись интеграции не нужна. Скачайте пример сценария и измените его по приведенным инструкциям.

Шаг 1. Импортируйте и отредактируйте пример сценария

  1. В приложении «Администратор Cloud Contact» откройте сценарий, который будет использовать бота.
  2. Для быстрого начала импортируйте пример сценария File:App Azure Web App Bot Example.zip. В этом простом сценарии есть комментарии, поясняющие назначение блоков.

Шаг 2. Добавьте секретный ключ в Set Variable

В первом блоке Задать переменную (Set Variable) задайте следующие свойства:

  1. Имя переменной — укажите название блока, например «Secret».
  2. Значение — секретный ключ, созданный Azure Bot Framework при создании канала Direct Line. Сценарий Cloud Contact будет использовать его для аутентификации запросов Direct Line API, отправляемых для связи с ботом.

Блок Set Variable с секретным ключом в поле Value

Шаг 3. Выполните аутентификацию в Direct Line API 3.0

В первом блоке Выполнить запрос по URL (Fetch URL) получите токен сеанса для аутентификации запросов к Direct Line API 3.0 с помощью секретного ключа, скопированного со страницы настройки канала Direct Line.

Задайте следующие свойства:

  • Текст заголовка — укажите название блока, например «Get token».
  • Тип запроса — POST
  • URL запроса (URL to fetch) — https://directline.botframework.com/v3/directline/tokens/generate
  • Дополнительные заголовки — Authorization: Bearer $(secret)
  • Параметры URL — Нет
  • Тип содержимого (Content Type) — application/JSON
  • Тело запроса (Body) — пусто
  • Имя пользователя — Оставить пустым
  • Пароль — Оставить пустым
  • Начальный путь в JSON результата — Оставить пустым
  • Префикс переменных сценария для данных JSON — jstoken

Блок Fetch URL для аутентификации

Шаг 4. Добавьте токен в Set Variable

Во втором блоке Задать переменную (Set Variable) задайте следующие свойства:

  • Имя переменной — укажите название блока, например «token».
  • Значение — $(jstoken.token)

Блок Set Variable задает значение переменной token в поле Value

Шаг 5. Начните диалог

Во втором блоке Отправить сообщение (Send Message+) откройте новый диалог Direct Line, отправив запрос POST к конечной точке /v3/directline/conversations. Пока диалог открыт, бот и клиент могут обмениваться сообщениями.

При успешном выполнении запроса ответ содержит идентификатор диалога «conversationId» (он понадобится на следующих шагах), токен, количество секунд до окончания срока его действия и URL потока, через который клиент может получать действия в потоке WebSocket.

Задайте следующие свойства:

  • Текст заголовка — укажите название блока, например «Start conversation».
  • Тип запроса — POST
  • URL запроса (URL to fetch) — https://directline.botframework.com/v3/directline/conversations/
  • Дополнительные заголовки — Authorization: Bearer $(token)
  • Параметры URL — Нет
  • Тип содержимого (Content Type) — application/JSON
  • Тело запроса (Body) — пусто
  • Имя пользователя — Оставить пустым
  • Пароль — Оставить пустым
  • Начальный путь в JSON результата — Оставить пустым
  • Префикс переменных сценария для данных JSON — conversation

Блок Fetch URL для открытия нового диалога Direct Line

Шаг 6. Отправьте сообщение клиенту

В блоке Отправить сообщение (Send Message+) задайте сообщение, которое нужно отправить в диалог.

Задайте следующие свойства:

  • Тип взаимодействия (Media type) — Chat
  • Сообщение — любое текстовое сообщение, например «Здравствуйте! Добро пожаловать!»

Блок Send Message+ для отправки сообщения клиенту

Шаг 7. Запросите ответ клиента или дождитесь его

В блоке Запросить ввод (Request Input) при необходимости запросите ответ клиента и сохраните его в переменную «user_input». Можно также просто ожидать текстового ввода после предыдущего блока сценария.

Задайте следующие свойства:

  • Запросить с помощью (Prompt with) — текстовое сообщение
  • Сообщение для отправки — Оставить пустым.
  • Имя переменной результата — user_input

Блок Request Input позволяет запросить ответ клиента

Шаг 8. Отправьте действия запросом POST

В третьем блоке Выполнить запрос по URL (Fetch URL) используйте протокол Direct Line 3.0 для обмена действиями, поддерживаемыми ботом, например сообщениями и индикаторами набора текста. Отправьте запрос POST к конечной точке /v3/directline/conversations/$(conversation.conversationId)/activities, где «$(conversation.conversationId)» — идентификатор, полученный из запроса POST предыдущего блока Fetch URL к конечной точке /v3/directline/conversations.

Задайте следующие свойства:

  • Текст заголовка — укажите название блока, например «Post Activities».
  • Тип запроса — POST
  • URL запроса (URL to fetch) — https://directline.botframework.com/v3/directline/conversations/$(conversation.conversationId)/activities
  • Дополнительные заголовки — Authorization: Bearer $(token)
  • Параметры URL — Нет
  • Тип содержимого (Content Type) — application/JSON
  • Тело запроса (Body) — укажите объект Activity в теле запроса.

    Например:

{
    "type": "message",
    "from": {
        "id": "user1"
    },
    "text": "$(user_input)"
}

  • Имя пользователя — Оставить пустым
  • Пароль — Оставить пустым
  • Начальный путь в JSON результата — Оставить пустым
  • Префикс переменных сценария для данных JSON — message_id

Блок Fetch URL для отправки действий запросом POST

Шаг 9. Получите действия

В четвертом блоке Выполнить запрос по URL (Fetch URL) получите действия (например, ответ бота) с помощью HTTP GET.

Задайте следующие свойства:

  • Текст заголовка — укажите название блока, например «Get Bot Answer».
  • Тип запроса — GET
  • URL запроса (URL to fetch) — https://directline.botframework.com/v3/directline/conversations/$(conversation.conversationId)/activities
  • Дополнительные заголовки — Authorization: Bearer $(token)
  • Параметры URL — Нет
  • Тип содержимого (Content Type) — application/JSON
  • Тело запроса (Body) — пусто
  • Имя пользователя — Оставить пустым
  • Пароль — Оставить пустым
  • Начальный путь в JSON результата — activities
  • Префикс переменных сценария для данных JSON — azure_bot_answer
  • Использовать GetNext для перебора данных — установите флажок.

Блок Fetch URL для получения ответа бота

Шаг 10. Задайте условия маршрутизации ответов бота

В блоках Условие (If) и Отправить сообщение (Send Message+) задайте следующее поведение: если у бота есть ответ, отправить его клиенту в чат с помощью $(azure_bot_answer.text).

Задайте следующие свойства:

  • Метка выхода — Есть ответ (Has an answer)
  • Условия
    • Переменная сценария (строка)
    • azure_bot_answer.replyToId
    • равно (is)
    • =
    • $(message_id.id)

Блок If задает условия отправки ответа бота клиенту при наличии ответа

Шаг 11. Передайте ответ бота клиенту

В ветвь выхода «Has an answer» добавьте блок Отправить сообщение (Send Message+) и задайте следующие свойства:

  • Тип взаимодействия (Media type) — Chat
  • Сообщение — $(azure_bot_answer.text)

Блок Send Message+ для отправки ответа бота

Шаг 12. Получите следующий ответ бота

В блоке Получить следующую запись (Get Next Record) получите следующий ответ бота, если он есть.

Задайте следующие свойства:

  • Текст заголовка — Любое имя
  • Направление — Следующая запись (Next record)
  • Имя набора записей — azure_bot_answer

Блок Get Next Record для получения следующего ответа бота

Шаг 13. Повторно запросите ввод с помощью Goto

Если ответов бота больше нет, снова запросите ввод с помощью блока Перейти к блоку (Goto).

Блок Goto указывает на Request Input

Шаг 14. Продолжайте проверять наличие ответов бота

Добавьте еще один блок Перейти к блоку (Goto) и направьте его на блок Условие (If). Получится цикл: получить ответ бота, отправить его в чат и проверить наличие следующих ответов. Цикл выполняется, пока ответы не закончатся.

Блок Goto указывает на If

Шаг 15. Завершите диалог

В последнем блоке Выполнить запрос по URL (Fetch URL) завершите диалог: отправьте запрос POST с действием «endOfConversation» к конечной точке обмена сообщениями канала.

Задайте следующие свойства:

  • Текст заголовка — укажите название блока, например «End Conversation».
  • Тип запроса — POST
  • URL запроса (URL to fetch) — https://directline.botframework.com/v3/directline/conversations/$(conversation.conversationId)/activities
  • Дополнительные заголовки — Authorization: Bearer $(token)
  • Параметры URL — Нет
  • Тип содержимого (Content Type) — application/JSON
  • Тело запроса (Body) — укажите действие «endOfConversation» в теле запроса:
{
    "type": "endOfConversation",
    "from": {
        "id": "user1"
    }
}

  1. Имя пользователя — Оставить пустым
  2. Пароль — Оставить пустым
  3. Начальный путь в JSON результата — Оставить пустым
  4. Префикс переменных сценария для данных JSON — Оставить пустым

Блок Fetch URL для завершения диалога

Шаг 16. Сохраните сценарий

Сохраните сценарий.

Шаг 17. Назначьте сценарий точке входа чата

В нужной точке входа Messaging/Chat выберите соответствующие сценарий и сервис для чата с Web App Bot.

Свойства точки входа Messaging/Chat

Настройка завершена. Теперь можно запустить чат и проверить его работу.

|