Поделиться через


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

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

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

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

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

Примечание.

Чтобы создавать агенты с помощью выбранной службы ИИ, оркестрации и знаний, рекомендуется использовать пакет SDK для агентов Microsoft 365. Пакет SDK для агентов поддерживает C#, JavaScript или Python. Дополнительные сведения о пакете SDK для агентов см. в aka.ms/agents. Если вы ищете платформу агента на основе SaaS, рассмотрите microsoft Copilot Studio. Если у вас есть существующий бот, созданный с помощью пакета SDK Bot Framework, вы можете обновить бота до пакета SDK для агентов. Вы можете ознакомиться с основными изменениями и обновлениями в руководстве по миграции с Bot Framework SDK на SDK для агентов. Запросы на поддержку пакета SDK Bot Framework больше не будут обслуживаться с 31 декабря 2025 г.

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

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

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

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

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

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

Мероприятие Обработчик Описание
Любой вид полученной активности 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).
  • Обработчик действий — хороший способ разработки бота, которому не нужно отслеживать состояние беседы между шагами. Библиотека диалогов предоставляет способы управления длительным диалогом с пользователем.