Обзор навыков

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

Вы можете расширить бот с помощью бота навыка. Навык может использоваться различными другими ботами, упрощая повторное использование и таким образом, вы можете создать бот с пользователем и расширить его, используя собственные или сторонние навыки.

  • Навык — это бот, который может выполнять набор задач для другого бота— бот может быть как навыком, так и ботом с пользователем.
  • Потребителем навыка называется бот, который умеет вызывать один или несколько навыков. Потребитель опыта, взаимодействующий с пользователем, называется также корневым ботом.
  • Манифест навыка — это файл в формате JSON с описанием действий, которые может выполнять навык, его входных и выходных параметров, а также конечных точек навыка.
    • Разработчики, у которых нет доступа к исходному коду навыка, могут использовать информацию из этого манифеста для разработки потребителя навыка.
    • Схема манифеста навыка — это файл в формате JSON с описанием схемы манифеста навыков.
    • Узнайте, как реализовать навык и как написать манифест навыка для примеров манифестов навыка.

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

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

  • Навыки и потребители взаимодействуют по протоколу HTTP с помощью протокола Bot Framework.
  • потребитель навыка может использовать несколько навыков;
  • потребитель навыка может использовать навык, созданный на любом языке. Например, бот C# может использовать навык, реализованный с помощью JavaScript.
  • навык может сам выполнять роль потребителя навыков, вызывая другие навыки;
  • Навыки поддерживают проверку подлинности пользователей; Однако проверка подлинности пользователя является локальной для навыка и не может быть передана другому боту.
  • навыки могут работать с адаптером Bot Framework и пользовательскими адаптерами;

На этой схеме показаны некоторые из возможных сочетаний.

Illustration of permutations between skill consumers and skills.

Концептуальная архитектура

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

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

На этой схеме показан поток действий от пользователя через корневой бот до навыка и обратно.

Illustration of how activities flow from the user to the skill and back again.

  1. Адаптер корневого бота получает действия от пользователя и перенаправляет их обработчику действий корневого бота. (Действия от пользователя получаются в конечной точке обмена сообщениями корневого бота.)
  2. Корневой бот использует HTTP-клиент навыка, чтобы отправить действие в навык. Клиент получает сведения о беседе с потребителем из определения навыка и фабрики идентификаторов навыков. Сюда относится и URL-адрес службы, который используется навыком для ответа на действие.
  3. Адаптер навыка получает действия от потребителя навыка и перенаправляет их обработчику действий навыка. (Действия от потребителя получаются в конечной точке обмена сообщениями бота навыка.)
  4. Когда навык отправляет ответ, обработчик навыка корневого бота получает соответствующее действие. Он получает сведения о беседе между корневым ботом и пользователем из фабрики идентификаторов бесед с навыками. Затем оп передает действие в адаптер корневого бота. (Действия от навыка получаются в конечной точке узла навыков корневого бота.)
  5. Этот адаптер создает упреждающее сообщение самому себе, чтобы возобновить беседу с пользователем.
  6. Адаптер корневого бота отправляет пользователю все сообщения, полученные от навыка.

Следующие объекты помогают управлять навыками и перенаправлять трафик от них:

  • Навык Bot Framework описывает сведения о маршрутизации для навыка и считывается из файла конфигурации потребителя навыка.
  • HTTP-клиент навыка отправляет действия в навык.
  • Обработчик навыка получает действия от навыка.
  • Фабрика идентификаторов диалога для навыков, преобразует ссылки между беседами пользователя с корневым ботом и корневого бота с навыком.
  • Служба Bot Connector реализует проверку подлинности для канала и для взаимодействия между ботами. С помощью объекта конфигурации проверки подлинности можно добавить проверку утверждений в навык или потребитель навыка, чтобы ограничить доступ к приложениям или пользователям.

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

Манифесты навыков

Манифест навыка — это JSON-файл, описывающий действия, которые могут выполнять навык, его входные и выходные параметры, конечные точки навыка и модели отправки для навыка.

Сведения о схеме манифеста навыка см. в статье о написании манифеста навыка.

Взаимодействие между ботами

Независимо от того, какой бот вы разрабатываете, важно понимать некоторые аспекты этой архитектуры.

Действия навыка

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

Ссылки на беседы

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

Фабрика идентификаторов бесед помогает управлять трафиком между потребителем навыка и навыком. Эта фабрика преобразует идентификаторы бесед, которые корневой бот использует с пользователем и навыком. Другими словами, она создает идентификатор беседы между корневым ботов и навыком, и восстанавливает исходный идентификатор беседы корневого бота с пользователем из идентификатора беседы с навыком.

Координация между серверами

Корневой бот и боты навыков обмениваются данными по протоколу HTTP. Это означает, что действие от навыка может получать не тот экземпляр корневого бота, который отправил начальное действие, т. е. эти два запроса могут обрабатываться на разных серверах.

  • Всегда сохраняйте состояние в потребителе навыка, прежде чем перенаправлять действие в навык. Это позволит экземпляру, который получит трафик от навыка, продолжить работу с того места, где ее остановил предыдущий экземпляр перед вызовом навыка.
  • Когда обработчик навыка получает действие от навыка, он преобразует его в форму, подходящую для потребителя навыка, и перенаправляет его в адаптер этого потребителя.

Потребитель и состояние навыка

Навык и его потребитель управляют своими состояниями независимо друг от друга. Впрочем, потребитель создает идентификатор беседы, которую он использует для обмена данными с навыком. Это может повлиять на состояние беседы в навыке.

Важно!

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

Аутентификация взаимодействия между ботами

Вам не нужен идентификатор приложения и пароль для тестирования навыка и потребителя навыков локально в эмуляторе Bot Framework. Подписка Azure по-прежнему необходима для развертывания навыка в Azure.

Проверка подлинности на уровне службы выполняется службой Bot Connector. Эта платформа использует токены носителя и идентификаторы приложения бота для идентификации каждого бота. (Bot Framework использует объект конфигурации проверки подлинности для проверки заголовка проверки подлинности в входящих запросах.)

Важно!

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

Проверка утверждений

Необходимо добавить проверяющий элемент утверждений в конфигурацию проверки подлинности. Утверждения оцениваются после заголовка проверки подлинности. Код проверки должен создавать исключение или ошибку, чтобы отклонить запрос.

Примечание.

Бот выполняет проверку утверждений, если у него есть идентификатор приложения и пароль; в противном случае проверка утверждений не выполняется.

Отклонение запроса, уже прошедшего проверку подлинности, может потребоваться по разным причинам:

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

Важно!

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

Отладка бесед навыка

Так как трафик между навыками и потребителями навыков проходит проверку подлинности, при отладке таких ботов выполняются дополнительные действия.

  • Потребитель навыка и все навыки, которые он потребляет, прямо или косвенно, должны работать.
  • Если боты работают локально и если у любого из ботов есть идентификатор приложения и пароль, все боты должны иметь действительные идентификаторы и пароли.
  • Если боты развернуты, узнайте, как отладить бота из любого канала с помощью ngrok.
  • Если некоторые боты выполняются локально, а некоторые развертываются, см. инструкции по отладке навыка или потребителя навыков.

В противном случае можно отладить потребителя навыка или навыка, как отладить другие боты. Дополнительные сведения см. в статье отладка бота и отладка с помощью эмулятора Bot Framework.

Дополнительные сведения

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

  • Дополнительные сведения о потребителях навыков см. в этой статье.