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

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

Области бота

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

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

В канале

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

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

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

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

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

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

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

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

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

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

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

  • Обработчик действий Teams. Обрабатывает события и взаимодействия, связанные с Teams, такие как создание канала, добавление участников команды и другие действия, уникальные для среды Teams. В пакете SDK для Teams версии 2 обработчики регистрируются непосредственно в экземпляре App , а не через наследование классов.

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

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

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

  • Вы создаете App экземпляр объекта и регистрируете в нем обработчики.
  • Обработчики получают типизированный объект контекста (IActivityContext в TypeScript, IContext<TActivity> в C#, ActivityContext[TActivity] в Python).
  • Ответы и упреждающие сообщения отправляются через ctx.reply() или ctx.send().

Когда бот Teams получает действие, пакет SDK направляет его через зарегистрированный обработчик. События, относящиеся к Teams (жизненный цикл канала, изменения участников и т. д.), отображаются как отдельные именованные события, поэтому вам не нужно проверять channelData.eventType вручную.

Примечание.

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

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

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

Боты создаются с помощью @microsoft/teams.apps пакета. Вы создаете App экземпляр и регистрируете обработчики с помощью app.on(eventName, handler). Пакет SDK направляет действия в правильный обработчик на основе строки имени события.

channelCreated

import { App } from '@microsoft/teams.apps';

const app = new App();

app.on('channelCreated', async ({ activity }) => {
  const channel = activity.channelData.channel; // { id, name }
  const team    = activity.channelData.team;    // { id, name }
  // Code logic here
});

channelDeleted

app.on('channelDeleted', async ({ activity }) => {
  // Code logic here
});

channelRenamed

app.on('channelRenamed', async ({ activity }) => {
  // Code logic here
});

teamRenamed

app.on('teamRenamed', async ({ activity }) => {
  // Code logic here
});

membersAdded / membersRemoved

app.on('membersAdded', async ({ activity, send }) => {
  for (const member of activity.membersAdded) {
    await send(`Welcome, ${member.name}!`);
  }
});

app.on('membersRemoved', async ({ activity }) => {
  // Code logic here
});

messageUpdate / messageDelete

Изменения сообщений отображаются как messageUpdate. Обратимое удаление отображается как messageDeleteactivity.channelData.eventType будет иметь значение 'softDeleteMessage'.

app.on('messageUpdate', async ({ activity }) => {
  // Code logic here
});

app.on('messageDelete', async ({ activity }) => {
  // activity.channelData.eventType === 'softDeleteMessage' for soft deletes
  // Code logic here
});

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

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

import { App } from '@microsoft/teams.apps';

const app = new App();

app.on('message', async ({ activity, reply }) => {
  const senderName = activity.from.name;
  await send(`Hello <at>${senderName}</at>.`);
});

app.start().catch(console.error);

Логика бота

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

В пакете SDK для Teams версии 2 логика бота обрабатывает входящие действия из одного или нескольких каналов бота и создает исходящие действия. Вся маршрутизация действий обрабатывается экземпляром App — обработчики регистрируются, и пакет SDK автоматически отправляет им действия.

Обработчики основных действий

Список поддерживаемых имен app.on() событий включает следующие:

Событие Строка имени события Описание
Любой полученный тип действия 'activity' Обработчик catch-all вызывается для каждого действия.
Получено действий с сообщением 'message' Обработка входящих текстовых сообщений. Используется app.message(pattern, handler) для сопоставления регулярных выражений.
Получено обновление беседы 'conversationUpdate' Действие обновления необработанной беседы.
Добавлена установка 'install.add' Бот установлен.
Установка удалена 'install.remove' Бот удален.
Участники добавлены 'membersAdded' Один или несколько участников присоединились к беседе.
Элементы удалены 'membersRemoved' Один или несколько участников покинули беседу.
Сообщение изменено 'messageUpdate' Сообщение в беседе было изменено.
Сообщение обратимо удалено 'messageDelete' Сообщение было обратимо удалено (activity.channelData.eventType === 'softDeleteMessage').
Получено уведомление о прочтении 'readReceipt' Получено уведомление о прочтении.

Обработчики событий Teams

app.on() поддерживает следующие строки имен событий Teams:

Событие Строка имени события Описание
channelCreated 'channelCreated' Создан канал Teams.
channelDeleted 'channelDeleted' Канал Teams был удален.
channelRenamed 'channelRenamed' Канал Teams был переименован.
channelRestored 'channelRestored' Канал Teams восстановлен.
channelMemberAdded 'channelMemberAdded' Участник был добавлен в канал.
channelMemberRemoved 'channelMemberRemoved' Участник был удален из канала.
teamRenamed 'teamRenamed' Команда была переименована.
teamArchived 'teamArchived' Команда была архивирована.
teamDeleted 'teamDeleted' Команда была удалена.
teamRestored 'teamRestored' Команда была восстановлена.
Собрание началось 'meetingStart' Собрание началось.
Собрание завершено 'meetingEnd' Собрание завершилось.
Участник присоединен 'meetingParticipantJoin' Участник присоединился к собранию.
Участник слева 'meetingParticipantLeave' Участник покинул собрание.

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

В следующей таблице перечислены обработчики действий вызова, доступные через app.on():

Тип вызова Строка имени события Описание
CardAction.Invoke 'card.action' Получено действие вызова действия карта (adaptiveCard/action).
signin/verifyState Автоматически обрабатывается пакетом SDK (поток OAuth) При входе проверьте действие состояния.
task/fetch 'dialog.open' Был создан диалог (модуль задач).
task/submit 'dialog.submit' Отправлено диалоговое окно (модуль задач).

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

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

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

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

Пример кода

Название примера Описание TypeScript C# Python
Бот для беседы в Teams Это приложение демонстрирует основные события бота. Просмотр Просмотр Просмотр