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


Основные понятия бота

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

Области бота

Боты в Microsoft Teams могут быть частью личной беседы, группового чата или канала в команде. Каждая область предлагает уникальные возможности и задачи для вашего чат-бота

В канале В групповом чате В индивидуальном чате
Огромный охват Меньше участников Традиционный способ
Краткие индивидуальные взаимодействия @mention к боту Боты для вопросов и ответов
@mention к боту Похожий на канал Боты, которые рассказывают анекдоты и делают заметки

В канале

Каналы содержат потоковые беседы между несколькими людьми даже до 2000. Это потенциально дает вашему боту огромный охват, но отдельные взаимодействия должны быть краткими. Традиционные многоэтапные взаимодействия не работают. Вместо этого необходимо использовать интерактивные карточки или диалоги (называемые модулями задач в TeamsJS версии 1.x) или переместить беседу в беседу "один к одному" для сбора большого количества сведений. Ваш бот имеет доступ только к сообщениям, где это @mentioned. Вы можете получить дополнительные сообщения из беседы с помощью Microsoft Graph и разрешений на уровне организации.

Боты лучше работают в канале в следующих случаях:

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

В групповом чате

Групповые чаты — это не потоковые беседы между тремя или более пользователями. Как правило, у них меньше участников, чем у канала, и они более временные. Как и в случае с каналом, бот имеет доступ только к сообщениям, где он находится @mentioned непосредственно.

Боты, которые лучше работают в канале, также лучше работают в групповом чате.

В индивидуальном чате

Индивидуальный чат — это традиционный способ общения бота с пользователем. Вот несколько примеров диалоговых ботов для индивидуальной беседы:

  • Боты для вопросов и ответов
  • боты, инициирующие рабочие процессы в других системах.
  • боты, которые говорят шутки.
  • боты, которые принимают заметки. Прежде чем создавать чат-боты "один к одному", подумайте, является ли интерфейс на основе беседы лучшим способом представить свои функции.

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

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

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

  • Логика бота. Объект бота, в котором хранится логика бесед бота, отвечает за принятие решений на основе входных данных пользователя. Он предоставляет обработчик поворота, который является методом, который принимает входящие действия из адаптера бота. Логика бота гарантирует, что каждый шаг беседы обрабатывается надлежащим образом, что способствует общей согласованности и эффективности бота.

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

  • Общие сведения о контексте беседы
  • Персонализация взаимодействий
  • Эффективный получение информации
  • Поддержка адаптивного потока общения

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

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

Обработчик действий — это ядро функциональных возможностей бота, управление и обработка взаимодействия с пользователем. Он основан на обработчике действий Microsoft Bot Framework и направляет все действия Teams перед обработкой любых действий, не относящихся к Teams. Он выступает в качестве посредника между входными данными пользователя и ответом бота:

  • Получает входящие сообщения.
  • Извлекает ключевые данные из введенных пользователем данных.
  • Определяет намерение пользователя с помощью обработки естественного языка (NLP).
  • Поддерживает контекст и состояние беседы.
  • Создает ответы на основе введенных пользователем данных и намерений.

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

Когда бот Teams получает действие, оно направляется через обработчики действий. Все действия проходят через базовый обработчик, называемый обработчиком поворота, который затем вызывает соответствующий обработчик действия. Бот Teams является производным TeamsActivityHandler от класса , который поступает из класса Bot Framework ActivityHandler .

Примечание.

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

Боты создаются с помощью Bot Framework. Когда бот получает сообщение, обработчик поворота получает уведомление и отправляет его обработчику OnMessageActivityAsync . Это работает так же в Teams. Если бот получает обновление беседы, обработчик поворота отправляет его в OnConversationUpdateActivityAsync. Обработчик действий Teams сначала ищет события, относящиеся к Teams. Если их нет, они передаются в обработчик действий Bot Framework.

В классе обработчика действий Teams есть два основных обработчика действий Teams:

  • OnConversationUpdateActivityAsync маршрутизирует все действия по обновлению диалога.
  • OnInvokeActivityAsync маршрутизирует все действия вызова Teams.

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

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

Фрагменты кода для обработчиков действий Teams:

OnTeamsChannelCreatedAsync


protected override Task OnTeamsChannelCreatedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {
            // Code logic here
        }

OnTeamsChannelDeletedAsync


protected override Task OnTeamsChannelDeletedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {
            // Code logic here
        }

OnTeamsChannelRenamedAsync


protected override Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
  {
   // Code logic here
  }

OnTeamsTeamRenamedAsync


protected override Task OnTeamsTeamRenamedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
  {
   // Code logic here
  }

OnTeamsMembersAddedAsync


protected override Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> teamsMembersAdded, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
  {
   // Code logic here
  }

OnTeamsMembersRemovedAsync


protected override Task OnTeamsMembersRemovedAsync(IList<TeamsChannelAccount> teamsMembersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken);
  {
   // Code logic here
  }

OnTeamsMessageEditAsync

protected override async Task OnTeamsMessageEditAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
  { 
   // Code logic here 
  } 

OnTeamsMessageUndeleteAsync

protected override async Task OnTeamsMessageUndeleteAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
  { 
   // Code logic here 
  } 

OnTeamsMessageSoftDeleteAsync

 protected override async Task OnTeamsMessageSoftDeleteAsync(ITurnContext<IMessageDeleteActivity> turnContext, CancellationToken cancellationToken)
  { 
   // Code logic here 
  } 

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

В следующем коде приведен пример действий бота для команды канала область:


protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var mention = new Mention
    {
        Mentioned = turnContext.Activity.From,
        // EncodeName: Converts the name to a valid XML name.
        Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",
    };
    
    // MessageFactory.Text(): Specifies the type of text data in a message attachment.
    var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");
    replyActivity.Entities = new List<Entity> { mention };

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}

В следующем коде показан пример активности бота для индивидуального чата:


// Handle message activity
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // Remove recipient mention text from Text property.
    // Use with caution because this function is altering the text on the Activity.
    turnContext.Activity.RemoveRecipientMention();
    var text = turnContext.Activity.Text.Trim().ToLower();

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Text($"Your message is {text}."), cancellationToken);
}

Логика бота

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

В Teams логика бота обрабатывает входящие действия из одного или нескольких каналов бота и в ответ создает исходящие действия. Это по-прежнему относится к ботам, производным от класса обработчика действий Teams, который сначала проверяет действия Teams. После проверки действий Teams все остальные действия передается в обработчик действий Bot Framework.

Основные обработчики Bot Framework

Примечание.

  • За исключением добавленных и удаленных действий участников, все обработчики действий, описанные в этом разделе, продолжают работать так же, как и с ботом, не относящимся к Teams.
  • Метод onInstallationUpdateActivityAsync() используется для получения языкового стандарты Teams при добавлении бота в Teams.

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

Список обработчиков, определенных в , ActivityHandler включает следующие события:

Событие Метод обработчика или пакета SDK Описание
Любой полученный тип действия OnTurnAsync() Этот метод вызывает один из других обработчиков в зависимости от типа полученного действия.
Получено действий с сообщением OnMessageActivityAsync() Этот метод можно переопределить для обработки Message действия.
Получено действие обновления сообщения OnMessageUpdateActivityAsync() Этот метод можно переопределить для обработки действия обновления сообщений.
Получено действие удаления сообщения OnMessageDeleteActivityAsync() Этот метод можно переопределить для обработки действия удаления сообщения.
Получено действие обновления беседы OnConversationUpdateActivityAsync() Этот метод вызывает обработчик для действия ConversationUpdate, если участники, кроме бота, присоединяются к беседе или выходят из нее.
К беседе присоединились участники, не являющиеся ботами OnMembersAddedAsync() Этот метод может быть переопределен для обработки присоединения участников к беседе.
Участники, не боты, покинули беседу OnMembersRemovedAsync() Этот метод может быть переопределен для обработки выхода участников из беседе.
Получено действие события OnEventActivityAsync() Этот метод вызывает для действия Event определенный обработчик для типа события.
Получено действие события токена-ответа OnTokenResponseEventAsync() Этот метод может быть переопределен для обработки событий ответа маркера.
Получено действие события, не относящегося к токену-ответу OnEventAsync() Этот метод может быть переопределен для обработки других типов событий.
Получен другой тип действия OnUnrecognizedActivityTypeAsync() Этот метод может быть переопределен для обработки любого типа действия, для которого в противном случае обработка была недоступна.

Обработчики действий для Teams

Расширяет TeamsActivityHandler список обработчиков в разделе основные обработчики Bot Framework, включив в него следующие события:

Событие Метод обработчика или пакета SDK Описание
channelCreated OnTeamsChannelCreatedAsync() Этот метод может быть переопределен для обработки создания канала Teams. Дополнительные сведения см. в разделе Канал, созданный в разделе События обновления беседы.
channelDeleted OnTeamsChannelDeletedAsync() Этот метод может быть переопределен для обработки удаления канала Teams. Дополнительные сведения см. в разделе Канал удален в разделе События обновления беседы.
channelRenamed OnTeamsChannelRenamedAsync() Этот метод может быть переопределен для обработки переименования канала Teams. Дополнительные сведения см. в разделе Переименование канала в разделе События обновления беседы.
teamRenamed OnTeamsTeamRenamedAsync() return Task.CompletedTask; Этот метод может быть переопределен для обработки переименования команды Teams. Дополнительные сведения см. в разделе Команда переименована в разделе События обновления беседы.
MembersAdded OnTeamsMembersAddedAsync() Этот метод вызывает метод OnMembersAddedAsync в ActivityHandler. Этот метод может быть переопределен для обработки присоединения участников к команде. Дополнительные сведения см. в разделе Участники команды, добавленные в раздел События обновления беседы.
MembersRemoved OnTeamsMembersRemovedAsync() Этот метод вызывает метод OnMembersRemovedAsync в ActivityHandler. Этот метод может быть переопределен для обработки выхода участников из команды. Дополнительные сведения см. в разделе Участники команды удалены в разделе События обновления беседы.
messageEdit OnTeamsMessageEditAsync() Этот метод можно переопределить для обработки события изменения сообщений Teams.
messageUndelete OnTeamsMessageUndeleteAsync() Этот метод можно переопределить для обработки события отмены отмены сообщения Teams.
messageSoftDelete OnTeamsMessageSoftDeleteAsync() Этот метод можно переопределить для обработки события обратимого удаления сообщений Teams.

Запуск действий Teams

Список обработчиков действий Teams, вызываемых из OnInvokeActivityAsync обработчика действий Teams, включает следующие типы вызовов:

Типы вызовов Метод обработчика или пакета SDK Описание
CardAction.Invoke OnTeamsCardActionInvokeAsync() Когда соединитель получает действие вызова действия карта, вызывается этот метод.
fileConsent/invoke OnTeamsFileConsentAcceptAsync() Когда пользователь принимает согласие на использование файла карта, вызывается этот метод.
fileConsent/invoke OnTeamsFileConsentAsync() Когда соединитель получает согласие файла карта действие, вызывается этот метод.
fileConsent/invoke OnTeamsFileConsentDeclineAsync() Когда пользователь отклоняет согласие на использование файла карта, вызывается этот метод.
actionableMessage/executeAction OnTeamsO365ConnectorCardActionAsync() Когда соединитель получает карта соединителя для действия действия Группы Microsoft 365, вызывается этот метод.
signin/verifyState OnTeamsSigninVerifyStateAsync() Когда соединитель получает signIn действие проверки состояния, вызывается этот метод.
task/fetch OnTeamsTaskModuleFetchAsync() Этот метод можно переопределить в производном классе, чтобы предоставить логику при получении диалогового окна (называемого модулем задач в TeamsJS версии 1.x).
task/submit OnTeamsTaskModuleSubmitAsync() Этот метод можно переопределить в производном классе, чтобы предоставить логику при отправке диалогового окна.

Действия вызова, перечисленные в этом разделе, предназначены для диалоговых ботов в Teams. Пакет SDK Bot Framework также поддерживает вызов действий, характерных для расширений для сообщений. Дополнительные сведения см. в статье о том, что такое расширения для сообщений.


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

Рекомендации

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

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

    ПОЛЬЗОВАТЕЛЬ: назначь встречу с Меган.

    БОТ: Я нашел 200 результатов, включая имя и фамилию.

    ПОЛЬЗОВАТЕЛЬ: назначь встречу с Меган Боуэн.

    БОТ: хорошо, в какое время вы хотели бы встретиться с Меган Боуэн?

    ПОЛЬЗОВАТЕЛЬ: 13:00.

    БОТ: в какой день?

  • Поддержка шести или менее частых команд Так как в текущем меню бота есть только шесть видимых команд, больше ничего больше вряд ли будет использоваться с какой-либо частотой. Боты, которые углубляются в конкретную область, а не пытаются стать общим помощником, работают намного лучше.

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

Примечание.

Платформа Teams поддерживает только tls версии 1.2. Убедитесь, что вы настраиваете среду бота соответствующим образом.

Изучение других функций бота

Помимо обычных функций бота, вы также можете изучить дополнительные функции, доступные в приложении бота Teams:

Пример кода

Название примера Описание .NET Node.js Python
Бот для беседы в Teams В этом примере приложения показано, как использовать различные события бесед бота, доступные в Bot Framework версии 4. Просмотр Просмотр Просмотр
Образцы бота Набор примеров Bot Framework версии 4. Просмотр Просмотр Просмотр

Следующий этап

См. также