Recepción de todos los mensajes de conversación
El modelo de permisos de consentimiento específico de recursos (RSC), desarrollado originalmente para las API de Microsoft Teams Graph, se está ampliando a escenarios de bot. Con RSC, los propietarios de conversaciones pueden dar su consentimiento para que un bot reciba todos los mensajes de usuario en canales y chats estándar sin ser @mentioned. Esto se puede habilitar especificando las cadenas de permiso o ChatMessage.Read.Chat
en el ChannelMessage.Read.Group
manifiesto de la aplicación (anteriormente denominado manifiesto de aplicación de Teams). Los propietarios de conversaciones pueden conceder consentimiento durante el proceso de instalación o actualización de la aplicación después de publicar las actualizaciones de la aplicación. Para obtener más información sobre cómo habilitar RSC para la aplicación y dentro de un inquilino, consulte consentimiento específico del recurso.
Nota:
Los bots que reciben todos los mensajes de conversación con RSC se admiten en entornos de Government Community Cloud (GCC), GCC-High y Department of Defense (DOD).
Permitir que los bots reciban todos los mensajes de canal o chat
Los ChannelMessage.Read.Group
permisos y ChatMessage.Read.Chat
RSC se extienden a los bots. Con el consentimiento del usuario y la instalación de aplicaciones, estos permisos:
- Permitir que una aplicación de grafos especificada obtenga todos los mensajes en canales y chats, respectivamente.
- Habilite un bot definido en el manifiesto de la aplicación para recibir todos los mensajes de conversación sin estar @mentioned en contextos pertinentes en los que se aplican los permisos.
Filtrado por mensajes de mención
// When ChannelMessage.Read.Group or ChatMessage.Read.Chat RSC is in the app manifest, this method is called even when bot is not @mentioned.
// This code snippet allows the bot to ignore all messages that do not @mention the bot.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Ignore the message if bot was not mentioned.
// Remove this if block to process all messages received by the bot.
if (!turnContext.Activity.GetMentions().Any(mention => mention.Mentioned.Id.Equals(turnContext.Activity.Recipient.Id, StringComparison.OrdinalIgnoreCase)))
{
return;
}
// Sends an activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(MessageFactory.Text("Using RSC the bot can receive messages across channels or chats in team without being @mentioned."));
}
Permiso de RSC
Los servicios que necesitan acceso a todos los datos de mensajes de Teams deben usar las API de Graph que proporcionan acceso a los datos archivados en canales y chats. Los bots deben usar el ChannelMessage.Read.Group
permiso Y ChatMessage.Read.Chat
RSC adecuadamente para crear y mejorar la experiencia atractiva para que los usuarios pasen la aprobación de Microsoft Teams Store. La descripción de la aplicación debe incluir cómo usa el bot los datos que lee:
- Los
ChannelMessage.Read.Group
bots no pueden usar el permiso yChatMessage.Read.Chat
RSC para extraer grandes cantidades de datos de clientes. - La capacidad de que los bots reciban todos los mensajes en chats mediante
ChatMessage.Read.Chat
solo está habilitada después de una nueva instalación o una nueva instalación en un chat. - Si tiene una aplicación que usa el
ChatMessage.Read.Chat
permiso RSC para escenarios de Graph, pruebe la aplicación siguiendo los pasos descritos en Cargar una aplicación personalizada en una conversación y modifique la aplicación antes de que la característica esté disponible con carácter general. Si no desea que el bot reciba todos los mensajes de chat, implemente el siguiente fragmento de código. Si no se realiza ninguna acción, el bot recibe todos los mensajes después de las nuevas instalaciones.
Actualizar el manifiesto de la aplicación
Para que el bot reciba todos los mensajes de conversación, las cadenas de permiso RSC pertinentes deben especificarse en la authorization.permissions.resourceSpecific
propiedad del manifiesto de la aplicación. Para obtener más información, consulte esquema de manifiesto de aplicación.
El código siguiente proporciona un ejemplo del manifiesto de la aplicación:
- webApplicationInfo.id: el identificador de la aplicación Microsoft Entra. El identificador de la aplicación puede ser el mismo que el identificador del bot.
- webApplicationInfo.resource: cualquier cadena. El campo de recurso no tiene ninguna operación en RSC, pero debe agregarse con un valor para evitar la respuesta de error.
- authorization.permissions.resourceSpecific: permisos de RSC para la aplicación con o ambos
ChannelMessage.Read.Group
yChatMessage.Read.Chat
especificados. Para obtener más información, vea permisos específicos del recurso.
El código siguiente proporciona un ejemplo del manifiesto de aplicación versión 1.12 o posterior:
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.12/MicrosoftTeams.schema.json",
"manifestVersion": "1.12",
"version": "1.0.0",
"id": "8239c8f3-ed78-4512-933e-babfd28856f1",
"packageName": "com.contoso.rscechobot",
"developer": {
"name": "Contoso",
"websiteUrl": "https://www.contoso.com",
"privacyUrl": "https://www.contoso.com/privacy",
"termsOfUseUrl": "https://www.contoso.com/tos"
},
"icons": {
"color": "color.png",
"outline": "outline.png"
},
"name": {
"short": "RscEchoBot",
"full": "Echo bot with RSC configured for all conversation messages"
},
"description": {
"short": "Echo bot with RSC configured for all channel and chat messages",
"full": "Echo bot configured with all channel and chat messages RSC permission in manifest"
},
"accentColor": "#FFFFFF",
"staticTabs": [
{
"entityId": "conversations",
"scopes": [
"personal"
]
},
{
"entityId": "about",
"scopes": [
"personal"
]
}
],
"webApplicationInfo": {
"id": "07338883-af76-47b3-86e4-2603c50be638",
"resource": "https://AnyString"
},
"authorization": {
"permissions": {
"resourceSpecific": [
{
"type": "Application",
"name": "ChannelMessage.Read.Group"
},
{
"type": "Application",
"name": "ChatMessage.Read.Chat"
}
]
}
},
"bots": [
{
"botId": "07338883-af76-47b3-86e4-2603c50be638",
"scopes": [
"personal",
"team",
"groupchat"
],
"supportsFiles": false,
"isNotificationOnly": false
}
],
"permissions": [
"identity",
"messageTeamMembers"
],
"validDomains": []
}
Carga de una aplicación personalizada en una conversación
Los pasos siguientes le guían para cargar y validar el bot que recibe todos los mensajes de canal en un equipo sin ser @mentioned:
Seleccione o cree un equipo.
Seleccione ●●● en el panel izquierdo. Aparece el menú desplegable.
Seleccione Administrar equipo en el menú desplegable.
Seleccione Aplicaciones. Aparecen varias aplicaciones.
Seleccione Cargar una aplicación personalizada en la esquina inferior derecha.
Seleccione Abrir.
Seleccione Agregar en la ventana emergente de detalles de la aplicación para agregar el bot al equipo seleccionado.
Seleccione un canal y escriba un mensaje en el canal del bot.
El bot recibe el mensaje sin ser @mentioned.
Fragmentos de código
El código siguiente proporciona un ejemplo de los permisos de RSC:
// Handle when a message is addressed to the bot.
// When rsc is enabled the method will be called even when bot is addressed without being @mentioned.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Sends an activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(MessageFactory.Text("Using RSC the bot can receive messages across channels or chats in team without being @mentioned."));
}
Ejemplo de código
Ejemplo de nombre | Descripción | .NET | Node.js | Manifiesto de la aplicación |
---|---|---|---|---|
Mensajes de canal con permisos RSC | Esta aplicación de ejemplo muestra cómo un bot puede recibir todos los mensajes de canal con RSC sin ser @mentioned. | View | View | Ver |