Беседы с бото в канале и групповом чате
Важно!
Примеры кода в этом разделе основаны на версии 4.6 и более поздних версиях пакета SDK Bot Framework. Если вы ищете документацию по более ранним версиям, см. раздел пакет SDK для ботов версии 3 в папке Устаревшие пакеты SDK документации.
Чтобы установить Microsoft Teams бота в чате группы или команды, добавьте боту область teams
или groupchat
. В результате все участники беседы взаимодействовать с вашим ботом. После установки бот получает доступ к метаданным беседы, например к списку участников. Кроме того, при установке в команде бот имеет доступ к подробным сведениям об этой команде и полному списку каналов.
Боты в группе или канале получают сообщения только при упоминании @botname. Они не получают других сообщений, отправляемых в беседу. Бот должен быть @mentioned непосредственно. Бот не получает сообщение, когда упоминается команда или канал или когда кто-то отвечает на сообщение от вашего бота без @mentioning него.
Примечание.
- RSC для всех сообщений чата доступен только в общедоступной предварительной версии для разработчиков.
- Используя согласие для конкретного ресурса (RSC), боты могут получать все сообщения канала в командах, в которых он установлен, без использования @mentioned. Дополнительные сведения см. в статье Получение всех сообщений канала с помощью RSC.
- Публикация сообщения или адаптивной карточки в частном канале не поддерживается.
См. следующее видео, чтобы узнать о беседах в канале и групповом чате с ботом:
Рекомендации по дизайну
В отличие от личных чатов, в групповых чатах и каналах бот после добавления должен кратко представиться. Обязательно следуйте этим и другим рекомендациям по проектированию ботов. Подробнее о разработке ботов в Teams см. в статье Проектирование бесед ботов в каналах и чатах.
Теперь вы можете создавать новые цепочки бесед и легко управлять различными беседами в каналах.
Создание цепочки беседы
При установке бота в команде необходимо создать новый поток беседы, а не отвечать на существующий. Иногда трудно различить два разговора. Если беседа является потоковой, проще организовать различные беседы в каналах и управлять ими. Это форма упреждающего обмена сообщениями.
Затем можно получить упоминания с помощью объекта entities
и добавить упоминания в сообщения с помощью объекта Mention
.
Работа с @упоминаниями
Каждое сообщение боту из группы или канала содержит @mention объект с именем в тексте сообщения. Бот также может получать имена других пользователей, упоминаемых в таких сообщениях, и добавлять упоминания во все отправляемые им сообщения. Боты в групповых чатах позволяют упоминать пользователей с помощью @mention
; однако они не поддерживают @everyone
упоминания.
Кроме того, необходимо удалить @mentions из содержимого сообщения, которое получает бот.
Получение упоминаний
Упоминания возвращаются в полезных данных объекта entities
и содержат как уникальный ИД пользователя, так и имя упомянутого пользователя. Текст сообщения также содержит упоминание, например <at>@John Smith<at>
. Однако не полагайтесь на текст в сообщении для получения каких-либо сведений о пользователе. Пользователь, отправляющий сообщение, может изменить его. Поэтому используйте объект entities
.
Вы можете получить все упоминания в сообщении, вызвав функцию GetMentions
в пакете SDK Bot Builder, которая возвращает массив объектов Mention
.
В следующем фрагменте программного кода показан пример получения упоминаний:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Resolves the mentions from the entities activity.
Mention[] mentions = turnContext.Activity.GetMentions();
if(mentions != null)
{
ChannelAccount firstMention = mentions[0].Mentioned;
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync($"Hello {firstMention.Name}");
}
else
{
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync("Aw, no one was mentioned.");
}
}
Добавление упоминаний в сообщения
Существует два типа упоминаний:
Упоминание пользователя
Бот может упоминать других пользователей в сообщениях, размещенных в каналах.
Объект Mention
имеет два свойства, которые необходимо задать с помощью следующих элементов:
- Включите @имя_пользователя в текст сообщения.
- Включите объект упоминания в коллекцию сущностей.
Пакет SDK Bot Framework предоставляет вспомогательные методы и объекты для создания упоминаний.
В следующем фрагменте программного кода показан пример добавления упоминаний в сообщения:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var mention = new Mention
{
Mentioned = turnContext.Activity.From,
Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",
Type = "mention",
};
// Returns a simple text message.
var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");
replyActivity.Entities = new List<Entity> { mention };
// Sends an activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}
Теперь ваш бот может представиться при первой установке или добавлении в группу или команду.
Упоминание тега
Бот может упоминать теги в текстовых сообщениях и адаптивных карточках, размещенных в каналах. Когда бот @mentions использует тег в канале, он выделяется и пользователи, связанные с тегом, получают уведомление. При наведении указателя мыши на тег появляется всплывающее окно со сведениями о теге.
Примечание.
Упоминания тегов не поддерживаются в клиентах Облака сообщества для государственных организаций (GCC), GCC-High и Министерства обороны (DoD).
Упоминание тегов в текстовом сообщении
В объекте mention.properties
добавьте свойство 'type': 'tag'
. Если свойство 'type': 'tag'
не добавлено, бот обрабатывает упоминание как упоминание пользователя.
Пример:
Добавляется type:tag
как в Properties
ChannelAccount.
var mention = new ChannelAccount(tagId, "Test Tag");
mention.Properties = JObject.Parse("{'type': 'tag'}");
var mentionObj = new Mention
{
Mentioned = mention,
Text = "<at>Test Tag</at>"
};
var replyActivity = MessageFactory.Text("Hello " + mentionObj.Text);
replyActivity.Entities = new List<Microsoft.Bot.Schema.Entity> { mentionObj };
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
Упоминания тегов в адаптивной карточке
В схеме адаптивной карточки в объекте mentioned
добавьте "type": "tag"
свойство .
"type": "tag"
Если свойство не добавлено, бот обрабатывает упоминание как упоминание пользователя.
Список тегов, доступных в канале, можно получить с помощью API list teamworkTags .
Пример:
{
"type": "mention",
"text": "<at>Test Tag</at>",
"mentioned": {
"id": "base64 encoded id" ,// tag graph 64 base ID
"name": "Test Tag",
"type": "tag"
}
}
Параметры запроса
Имя | Описание |
---|---|
type |
Тип упоминания. Поддерживаемый тип — tag . |
id |
Уникальный идентификатор тега. Дополнительные сведения см. в разделе TeamworkTag. |
Код ошибки
Код состояния | Код ошибки | Значения сообщений | Повторный запрос | Действие разработчика |
---|---|---|---|---|
400 |
Код: Bad Request |
Упомянутый тег с идентификатором {id string} не существует в текущей команде Тег можно упомянуть только в канале Недопустимый упомянутый тег, так как в команде не существует тега |
Нет | Переоценка полезных данных запроса на наличие ошибок. Проверьте возвращенное сообщение об ошибке для получения дополнительных сведений. |
502 |
Код: Bad Gateway |
Недопустимый идентификатор группы команды Неправильный идентификатор клиента для тега Не удается разрешить идентификатор упоминания |
Нет | Повторите попытку вручную. |
Пределы регулирования
Любой запрос может оцениваться по нескольким ограничениям в зависимости от области, типа окна (короткого и длинного), количества тегов на сообщение и других факторов. Первое достигнутое ограничение запускает действие регулирования.
Убедитесь, что не превышение ограничений регулирования, чтобы избежать неудачной доставки сообщений. Например, бот может отправлять только два сообщения с упоминанием тегов в пятисекундном окне, и каждое сообщение может содержать только до 10 тегов.
В следующей таблице перечислены ограничения регулирования для упоминаний тегов в боте:
Размах | Тип окна | Количество тегов на сообщение | Временные окна (с) | Максимальное число сообщений в период времени |
---|---|---|---|---|
На бота на поток | Короткий | 10 | 5 | 2 |
Длинный | 10 | 60 | 5 | |
Все боты на поток | Короткий | 10 | 5 | 4 |
Длинное целое | 10 | 60 | 5 |
Ограничения
- Упоминания тегов поддерживаются только в потоке сообщений от бота к клиенту с текстом и адаптивной карточкой.
- Упоминания тегов не поддерживаются в общих и частных каналах.
- Упоминания тегов не поддерживаются в соединителях.
- Упоминания тегов не поддерживают поток вызова в боте.
Отправка сообщения при установке
При первом добавлении бота в группу или команду необходимо отправить начальное приветственное сообщение. Сообщение должно содержать краткое описание функций бота и способы их использования. Необходимо подписаться на событие conversationUpdate
с помощью eventType teamMemberAdded
. Событие отправляется при добавлении нового участника команды. Проверьте, является ли добавленный новый участник ботом. Подробнее см. в статье Отправка приветственного сообщения новому участнику команды.
Вы можете отправить личное сообщение каждому участнику команды при добавлении бота. Для этого извлеките список команды и отправьте каждому пользователю прямое сообщение.
Примечание.
Убедитесь, что сообщение, отправленное ботом, является релевантной и добавляет ценность первоначальному сообщению и не отправляет нежелательной почты пользователям.
Не отправляйте сообщение в следующих случаях:
- Если команда большая, например, превышает 100 участников. Бот может быть сочтен распространителем спама, а пользователь, который добавил его, может получать жалобы. Необходимо четко сообщить о полезности бота всем, кто видит приветственное сообщение.
- Бот упоминается в группе или канале раньше, чем добавлен в команду.
- Группа или канал переименованы.
- Участник команды добавляется в группу или канал.
Примеры ботов Teams
Пример кода
Полные рабочие примеры, демонстрирующие эту функциональность, см. в следующих примерах Teams для Bot Framework:
Название примера | Описание | .NET | Node.js | Python | Манифест |
---|---|---|---|---|---|
Бот для беседы в Teams | В этом примере показано, как использовать различные события бесед бота, доступные в bot framework версии 4 для личной и teams области. | Просмотр | Просмотр | Просмотр | Просмотр |
Проверка подлинности с помощью OAuthPrompt | В этом примере показана проверка подлинности и базовый обмен сообщениями в Bot Framework версии 4. | Просмотр | Просмотр | Просмотр | Просмотр |
Отправка файла Teams | В этом примере показано, как использовать файлы с ботом в беседе один к одному. | Просмотр | Просмотр | Просмотр | Просмотр |
Dialog (называется модулем задач в TeamsJS версии 1.x) | В этом примере показано, как использовать диалоговое окно и значения из карточек в нем для расширения сообщений. | Просмотр | Просмотр | Просмотр | View |
Запуск новой цепочки в канале | В этом примере показано, как использовать новый поток в канале с помощью бота. | Просмотр | Просмотр | Просмотр | Просмотр |
Локализация приложений Teams | В этом примере показано, как использовать локализацию приложений Teams с помощью бота и вкладки. | Просмотр | Просмотр | Н/Д | View |
Пошаговые инструкции
Следуйте пошаговому руководству, создайте бот для бесед Teams.
Следующий этап
Дополнительные ресурсы
Platform Docs