Сведения о потребителях навыков

ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4

Потребителем навыка называется бот, который умеет вызывать один или несколько навыков. В контексте использования корневой бот — это потребитель навыка, который также взаимодействует с пользователем.

С точки зрения пользователя корневой бот — это бот, с которым они взаимодействуют. С точки зрения навыка потребителем является канал, по которому он обменивается данными с пользователем. (Дополнительные сведения см. в обзоре навыков.)

Корневой бот выполняет роль потребителя навыка, и для этого ему нужна дополнительная логика управления трафиком между собой и навыком:

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

Управление навыками

Для запуска навыка и одного выполнения до завершения работы нужны лишь минимальные дополнения к потребителю навыков. Поддерживаются и более сложные сценарии, например с несколькими навыками или потоками бесед.

Потребитель навыка реализует по крайней мере две конечные точки HTTP:

  • Конечная точка обмена сообщениями получает действия от пользователя или канала. Это обычная конечная точка обмена сообщениями, реализуемая всеми ботами.
  • Конечная точка узла навыка для получения действий от навыка. Это действует как URL-адрес обратного вызова, URL-адрес службы, на который отвечает навык. (Потребитель навыка должен связать код, который получает HTTP-запрос метода от навыка с обработчиком навыка.)

Описания навыков

Для каждого навыка добавьте объект навыка Bot Framework в файл конфигурации потребителя навыка. Каждый из них содержит идентификатор, идентификатор приложения и конечную точку для навыка.

Свойство Description
Артикул Идентификатор или ключ навыка, относящийся к конкретному потребителю навыка.
Идентификатор приложения Идентификатор appId, назначенный ресурсу бота при регистрации навыка в Azure.
Конечная точка навыка Конечная точка обмена сообщениями для навыка. Это URL-адрес, с которым будет взаимодействовать потребитель для работы с навыком.

Клиент навыка и обработчик навыка

Потребитель навыка использует клиент навыка для отправки действий в навык. Клиент выполняет следующее:

  • принимает полученное от пользователя или созданное потребителем действие, которое нужно отправить в навык;
  • Задает URL-адрес службы для действия, отправленного навыку конечной точке узла навыка потребителя.
  • заменяет исходную ссылку на беседу другой, которая соответствует беседе между потребителем и навыком;
  • добавляет токен проверки подлинности между ботами;
  • отправляет обновленное действие в навык.

Потребитель навыка использует обработчик навыка для получения действий от навыка. Этот обработчик выполняет следующее:

  • обрабатывает методы REST API службы канала;
  • применяет проверку подлинности и проверку утверждений;
  • получает ссылку на исходную беседу;
  • создает действие для адаптера потребителя. Это действие подает сигнал о завершении навыка или передается пользователю.

Непосредственное управление навыком

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

  • Создание новой беседы между потребителем и навыком. (Это будет связано с определенной беседой с пользователем-потребителем.)
    • Чтобы передать параметры навыку, установите значение свойства value в исходном действии, которое передается этому навыку.
  • Продолжение существующей беседы между потребителем и навыком.
  • Распознавание действия endOfConversation, полученного от навыка, как сигнала для окончания беседы между потребителем и навыком.
    • Чтобы получить значения, возвращаемые из навыка, проверьте свойство value действия.
    • Чтобы узнать причину завершения навыка, проверьте параметр code, который может сообщить об ошибке, возникшей в навыке.
  • Отмена навыка из потребителя путем отправки действия endOfConversation в навык.

В статье о реализации потребителя навыка представлен пример потребителя, который напрямую управляет навыком.

Управление навыком через диалог навыка

Если вы используете библиотеку диалогов, можно использовать диалоговое окно навыка для управления навыком. Активным диалогом будет считаться диалог навыка, но все действия он будет пересылать связанному навыку.

  • При создании диалога навыка используйте параметр dialog options, чтобы предоставить всю информацию, которая потребуется этому диалогу для управления навыком, в том числе идентификатор приложения потребителя, URL-адрес обратного вызова, фабрика идентификаторов беседы, свойства навыка и т. п.
    • Если вы хотите управлять несколькими навыками в качестве диалогового окна, вам потребуется создать отдельный диалог навыка для каждого навыка.
    • Часто вы добавите диалоговое окно навыка в диалоговое окно компонента.
  • Чтобы открыть диалог навыка, вызовите метод begin из контекста диалога окна и укажите идентификатор диалога навыка. С помощью параметра options укажите действие, которое потребитель будет передавать в качестве первого действия для навыка.
  • Диалог навыка можно отменить или прервать, как любой другой диалог. Пример см. в статье Обработка прерываний со стороны пользователя.

Пример потребителя, который управляет навыком через диалог навыка, вы найдете в этой статье.

Использование режима доставки ожидаемых ответов

Боты и навыки используют стандартный rest и JSON по протоколу HTTPS для обмена данными. Обычный поток обработки действий начинается, когда корневой бот получает запись из канала в конечной точке обмена сообщениями. Затем корневой бот отправляет действие на навык обработки. Ответы от навыка отправляются обратно в конечную точку узла навыка корневого бота, а не ее конечную точку обмена сообщениями. Наконец, ответы обрабатываются дальше или отправляются обратно в канал корневым ботом. Этот обычный поток можно изменить, изменив режим доставки действия, отправленного навыку. Если для режима доставки задано значение "ExpectReplies", навык не будет отправляться обратно в конечную точку узла навыка. Вместо этого все действия ответа сериализуются в текст ответа. Затем корневой бот выполняет итерацию по этим действиям, обрабатывая их аналогично тому, как они были обработаны конечной точкой узла навыка.

Дополнительные сведения см. в режиме доставки в спецификации действия.