Беседы на основе событий с помощью обработчика действий

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

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

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

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

Примечание.

Пакеты SDK для JavaScript, C# и Python для Bot Framework по-прежнему будут поддерживаться, однако пакет SDK java отменяется с окончательной долгосрочной поддержкой, заканчивающейся в ноябре 2023 года. В этом репозитории будут выполняться только критически важные исправления безопасности и ошибок.

Существующие боты, созданные с помощью пакета SDK для Java, будут продолжать функционировать.

Для создания нового бота рекомендуется использовать Power Virtual Agent и ознакомиться с выбором подходящего решения чат-бота.

Дополнительные сведения см. в статье "Будущее создания бота".

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

Существуют некоторые ситуации, когда вы хотите переопределить базовый обработчик поворота, например сохранение состояния в конце поворота. Перед этим обязательно вызовите await base.OnTurnAsync(turnContext, cancellationToken);, чтобы убедиться, что базовая реализация OnTurnAsync выполняется перед дополнительным кодом. Эта базовая реализация, помимо прочего, отвечает за вызов остальных обработчиков действий, таких как OnMessageActivityAsync.

Обработка действий

Логика бота обрабатывает входящие действия из одного или нескольких каналов и создает исходящие действия в ответ.

Основная логика бота определяется в коде бота. Чтобы реализовать бот в качестве обработчика действий, наследуйте класс бота, ActivityHandlerкоторый реализует IBot интерфейс. ActivityHandler определяет различные обработчики для различных типов действий, таких как OnMessageActivityAsync, и OnMembersAddedAsync. Эти методы защищены, но могут быть переопределены, так как мы производимся от ActivityHandler.

Ниже описаны обработчики, определенные в ActivityHandler:

Событие Обработчик Description
Любой тип полученного действия OnTurnAsync Вызывает один из других обработчиков на основе типа полученного действия.
Полученное действие сообщения OnMessageActivityAsync Переопределите для обработки действия message.
Полученное действие обновления диалога OnConversationUpdateActivityAsync В действии conversationUpdate вызывает обработчик, если участники не добавлены в бота или покидают беседу.
Не добавленные в бота участники, которые присоединяются к беседе OnMembersAddedAsync Переопределите для обработки участников, присоединяющихся к беседе.
Не добавленные в бота участники, которые покидают беседу OnMembersRemovedAsync Переопределите для обработки участников, покидающих беседу.
Полученное действие события OnEventActivityAsync В действии event вызывает обработчик для события определенного типа.
Полученное действие события ответа маркера OnTokenResponseEventAsync Переопределите для обработки событий ответа маркера.
Полученное действие события другого ответа OnEventAsync Переопределите для обработки событий других типов.
Получение действия реакции на сообщение OnMessageReactionActivityAsync При получении действия messageReaction вызывает обработчик, если в сообщении были добавлены или удалены одна или несколько реакций.
Добавление реакции на сообщение в сообщение OnReactionsAddedAsync Переопределите, чтобы обрабатывать добавление реакций в сообщение.
Удаление реакции на сообщение из сообщения OnReactionsRemovedAsync Переопределите, чтобы обрабатывать удаление реакций из сообщения.
Получено действие обновления установки OnInstallationUpdateActivityAsync В действии installationUpdate вызывает обработчик на основе того, был ли установлен или удален бот.
Бот установлен OnInstallationUpdateAddAsync Переопределите это, чтобы добавить логику при установке бота в подразделении.
Бот удален OnInstallationUpdateRemoveAsync Переопределите это, чтобы добавить логику при удалении бота в подразделении.
Другой тип полученного действия OnUnrecognizedActivityTypeAsync Переопределите для обработки действия любого типа, которое иначе не будет обработано.

Эти разные обработчики используют turnContext для получения сведений о входящем действии, которое соответствует входящему HTTP-запросу. Действия могут быть разных типов, поэтому каждый обработчик предоставляет действием со строгой типизацией в параметре контекста шага. В большинстве случаев OnMessageActivityAsync является наиболее распространенным и всегда обрабатывается.

Как и в предыдущих версиях 4.x этой платформы, существует также возможность реализации общедоступного метода OnTurnAsync. Сейчас базовая реализация этого метода выполняет проверку ошибок, а затем вызывает каждый из определенных обработчиков (например те два, которые мы определяем в этом примере) в зависимости от типа входящего действия. В большинстве случаев этот метод можно оставить в одиночку и использовать отдельные обработчики, но если для вашей ситуации требуется пользовательская реализация OnTurnAsync, это по-прежнему вариант.

Важно!

При переопределении метода OnTurnAsync вам нужно вызвать base.OnTurnAsync, чтобы получить базовую реализацию для вызова всех остальных обработчиков On<activity>Async. Но вы также можете вызвать эти обработчики самостоятельно. В противном случае эти обработчики не будут вызваны и код не будет выполняться.

Пример обработчика действий

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

public class EchoBot : ActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var replyText = $"Echo: {turnContext.Activity.Text}";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    }

    protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        var welcomeText = "Hello and welcome!";
        foreach (var member in membersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
            }
        }
    }
}

Следующие шаги

  • Канал Microsoft Teams представляет некоторые действия, связанные с Teams, которые бот должен поддерживать для правильной работы с Teams. Основные понятия разработки ботов для Microsoft Teams вам поможет понять статья How Microsoft Teams bots work (Принцип работы ботов Microsoft Teams).
  • Обработчик действий — это хороший способ разработки бота, который не требуется отслеживать состояние беседы между поворотами. Библиотека диалогов предоставляет способы управления длительным диалогом с пользователем.