Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Si utiliza el módulo Notificaciones, puede crear agentes que puedan responder a eventos y notificaciones de aplicaciones de Microsoft 365. Con la compatibilidad con las notificaciones, los agentes pueden recibir y procesar alertas cuando los usuarios interactúan con ellos a través del correo electrónico, los comentarios de documentos u otros escenarios de colaboración.
Flujo de trabajo de notificaciones
Siga este flujo de trabajo para habilitar las notificaciones de la aplicación del agente de IA:
Importar componentes de notificación
- Importar clases y controladores de notificación.
- Importar tipos de actividad e identificadores de canal.
Registro de controladores de notificaciones
- Usar métodos de controlador de notificaciones para registrar rutas.
- Configurar controladores para tipos de notificación específicos, como correo electrónico, Word, Excel o PowerPoint.
Procesamiento de notificaciones en el código del agente
- El agente recibe notificaciones de aplicaciones de Microsoft 365.
- Controlar las notificaciones entrantes y responder correctamente.
Tipos de notificación
El SDK de Agent 365 admite los siguientes tipos de notificación:
| Tipo de notificación | Descripción | Identificador de sub canal |
|---|---|---|
| Correo electrónico | El agente recibe un correo electrónico en el que se mencionan o se abordan | email |
| Word | El agente se menciona en un comentario en un documento de Word | word |
| Excel | El agente se menciona en un comentario en un documento de Excel | excel |
| PowerPoint | El agente se menciona en un comentario en un documento de PowerPoint | powerpoint |
| Eventos de ciclo de vida | Notificaciones del ciclo de vida del agente (identidad de usuario creada, incorporación de cargas de trabajo, usuario eliminado) | No disponible |
Eventos del ciclo de vida del agente
Los eventos de ciclo de vida del agente permiten al agente responder a eventos del sistema específicos relacionados con la administración de identidades de usuario agente. El SDK admite actualmente tres eventos de ciclo de vida:
| Tipo de evento | Id. de evento | Descripción |
|---|---|---|
| Identidad de usuario creada | agenticUserIdentityCreated |
Se desencadena cuando se crea una identidad de usuario agente |
| Incorporación de cargas de trabajo actualizadas | agenticUserWorkloadOnboardingUpdated |
Se desencadena cuando se actualiza el estado de incorporación de carga de trabajo de un usuario agente |
| Usuario eliminado | agenticUserDeleted |
Se desencadena cuando se elimina una identidad de usuario agente |
Al usar estos eventos, los agentes pueden realizar tareas de inicialización, operaciones de limpieza o administración de estado en respuesta a los cambios en el ciclo de vida del usuario.
Referencia sobre el contenido de las notificaciones
Cuando su agente recibe una notificación, la carga útil contiene datos estructurados del tipo de notificación. Comprender estas cargas útiles le ayuda a extraer la información que necesita para procesar las notificaciones de forma eficaz.
Carga útil de notificación por correo electrónico
Cuando un usuario envía un correo electrónico a su agente o menciona a su agente en un correo electrónico, su agente recibe una notificación por correo electrónico con la siguiente estructura:
{
"id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"timestamp": "2026-02-06T17:45:20.740Z",
"channelId": "agents",
"serviceUrl": "http://localhost:56150/_connector",
"recipient": {
"id": "AgentName@contoso.onmicrosoft.com",
"name": "My Agent",
"agenticUserId": "<agentic-user-id>",
"agenticAppId": "<agentic-app-id>",
"tenantId": "<tenant-id>",
"role": "agenticUser"
},
"conversation": {
"id": "<conversation-id>",
"conversationType": "personal",
"tenantId": "<tenant-id>"
},
"from": {
"id": "sender@contoso.onmicrosoft.com",
"name": "Sender Name",
"role": "user"
},
"type": "message",
"channelData": {
"tenant": {
"id": "<tenant-id>"
}
},
"locale": "en-US",
"name": "emailNotification",
"entities": [
{
"type": "clientInfo",
"locale": "en-US",
"timezone": null
},
{
"id": "email",
"type": "productInfo"
},
{
"type": "emailNotification",
"id": "<email-id>",
"conversationId": "<conversation-id>",
"htmlBody": "<body dir=\"ltr\">\n<div class=\"elementToProof\">Your email message content here</div>\n</body>"
}
]
}
Carga útil de notificación de comentarios de documentos (Word, Excel o PowerPoint)
Cuando un usuario menciona a su agente en un comentario dentro de un documento de Word, Excel o PowerPoint, su agente recibe una notificación WPX de comentario (Word, PowerPoint o Excel):
{
"id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
"timestamp": "2026-02-06T17:46:02.248Z",
"channelId": "agents",
"serviceUrl": "http://localhost:56150/_connector",
"recipient": {
"id": "AgentName@contoso.onmicrosoft.com",
"name": "My Agent",
"agenticUserId": "<agentic-user-id>",
"agenticAppId": "<agentic-app-id>",
"tenantId": "<tenant-id>",
"role": "agenticUser"
},
"conversation": {
"id": "<conversation-id>",
"conversationType": "personal",
"tenantId": "<tenant-id>",
"topic": "<document-topic>"
},
"from": {
"id": "sender@contoso.onmicrosoft.com",
"name": "Sender Name",
"role": "user"
},
"type": "message",
"channelData": {
"tenant": {
"id": "<tenant-id>"
},
"productContext": "Word"
},
"locale": "en-US",
"textFormat": "plain",
"text": "<at>My Agent</at> - Please review this section\n",
"attachments": [
{
"contentUrl": "<document-url>",
"name": "<document-name>",
"content": {
"uniqueId": "<document-unique-id>",
"fileType": "docx"
},
"contentType": "application/vnd.microsoft.teams.file.download.info"
}
],
"entities": [
{
"type": "clientInfo",
"locale": "en-US",
"timezone": null
},
{
"mentioned": {
"id": "AgentName@contoso.onmicrosoft.com",
"name": "@My Agent"
},
"text": "<at>My Agent</at>",
"type": "mention"
},
{
"id": "Word",
"type": "productInfo"
},
{
"parentCommentId": "<parent-comment-id>",
"commentId": "<comment-id>",
"documentId": "<document-id>",
"type": "wpxcomment"
}
]
}
Agregar notificaciones al agente
Siga estos pasos para habilitar el control de notificaciones en el agente existente:
Importar componentes de notificación
Agregue estas importaciones al archivo del agente:
from microsoft_agents_a365 import AgentApplication
from microsoft_agents_a365.notifications import (
AgentNotification,
AgentNotificationActivity,
NotificationTypes
)
from microsoft_agents.activity import ChannelId
from microsoft_agents.hosting.core import Authorization, TurnContext
- AgentApplication: Clase base para desarrollar aplicaciones de Agent365. Proporciona funciones centrales para el enrutamiento de actividades, la gestión del estado y el procesamiento de solicitudes.
-
AgentNotification: clase para registrar controladores de notificaciones con métodos de decorador. Proporciona
on_agent_notification(),on_email(),on_word()y otros decoradores de conveniencia. -
AgentNotificationActivity: contenedor que contiene datos de notificación analizados con propiedades tipificadas como
email_notificationywpx_comment_notificationque contienen metadatos específicos de notificación (identificadores, detalles de conversación, referencias de documento). -
NotificationTypes: enumeración de tipos de notificación admitidos como
EMAIL_NOTIFICATION,WPX_COMMENT. -
ChannelId: se usa para especificar canales de notificación (por ejemplo,
ChannelId(channel="agents", sub_channel="*")). - Autorización: contexto de autorización para procesar notificaciones.
- TurnContext: contexto de turno de conversación actual del SDK de agentes.
Registro de controladores de notificaciones en el agente
Agregue controladores de notificaciones a la inicialización del agente:
class YourAgent(AgentApplication):
def __init__(self, app):
# Create notification handler
agent_notification = AgentNotification(app)
# Register handler for all notifications
@agent_notification.on_agent_notification(
ChannelId(channel="agents", sub_channel="*")
)
async def handle_all_notifications(context, state, notification):
# Route based on notification type
if notification.notification_type == NotificationTypes.EMAIL_NOTIFICATION:
await self.handle_email_notification(context, state, notification)
elif notification.notification_type == NotificationTypes.WPX_COMMENT:
await self.handle_comment_notification(context, state, notification)
else:
await context.send_activity('Notification type not yet implemented.')
Implementación de controladores de notificaciones específicos
Agregue métodos de controlador para cada tipo de notificación:
class YourAgent(AgentApplication):
# ... __init__ from above ...
async def handle_email_notification(self, context, state, notification):
"""Handle email notifications"""
email = notification.email_notification
if not email:
await context.send_activity('No email data found')
return
# Process the email
await context.send_activity(
f'Received email notification. Email ID: {email.id}'
)
# Your email processing logic here
async def handle_comment_notification(self, context, state, notification):
"""Handle document comment notifications"""
comment = notification.wpx_comment_notification
if not comment:
await context.send_activity('No comment data found')
return
# Process the comment
await context.send_activity(
f'Received comment notification. Document ID: {comment.document_id}'
)
# Your comment processing logic here
Identificar el emisor
Cada actividad de notificación incluye Activity.From. La plataforma A365 rellena esta propiedad con los datos básicos de identidad del remitente, por lo que no es necesario realizar ninguna llamada a la API ni obtener ningún token. Obtenga acceso a esta propiedad dentro de cualquier controlador de notificaciones:
async def handle_email_notification(self, context, state, notification):
from_prop = context.activity.from_property
logger.info(
"Notification from — DisplayName: '%s', UserId: '%s', AadObjectId: '%s'",
getattr(from_prop, "name", None) or "(unknown)",
getattr(from_prop, "id", None) or "(unknown)",
getattr(from_prop, "aad_object_id", None) or "(none)",
)
display_name = getattr(from_prop, "name", None) or "unknown"
# Use display_name in your response or LLM prompt
Activity.from_property es una instancia de la clase ChannelAccount que tiene las siguientes propiedades:
| Property | Description |
|---|---|
name |
Nombre |
id |
Id. de usuario del canal |
aad_object_id |
Id. de objeto de Entra |
Importante
El nombre para mostrar es texto controlado por el usuario. Límpielo (elimine los caracteres de control y aplique una longitud máxima) antes de introducirlo en las indicaciones del sistema LLM para evitar ataques de inyección de indicaciones.
Sugerencia
Use aadObjectId con la API de Microsoft Graph para recuperar datos extendidos del perfil (título del puesto, gerente, departamento) cuando su agente tenga los permisos apropiados.
Controladores de notificaciones especializados
Después de configurar el enrutamiento de notificaciones básico, use métodos de controlador especializados para un control más granular. Al utilizar estos métodos, puede:
- Registrar varios controladores para el mismo tipo de notificación.
- Establecer la prioridad del controlador mediante clasificación.
- Configurar la autenticación automática para cada controlador.
Nota
Para la mayoría de los casos de uso, el patrón de controlador genérico es suficiente. Use estos controladores especializados cuando necesite enrutamiento avanzado o varios controladores para el mismo tipo de notificación.
Controlador especializado para todas las notificaciones
Registre más controladores que procesen todos los tipos de notificación:
from microsoft_agents_a365.notifications import (
AgentNotification,
NotificationTypes
)
from microsoft_agents.activity import ChannelId
# Create notification handler
agent_notification = AgentNotification(app)
# Register handler for all notifications
@agent_notification.on_agent_notification(
ChannelId(channel="agents", sub_channel="*")
)
async def handle_all_notifications(context, state, notification):
if notification.notification_type == NotificationTypes.EMAIL_NOTIFICATION:
if notification.email_notification:
await context.send_activity(f"Received email: {notification.email_notification.id}")
elif notification.notification_type == NotificationTypes.WPX_COMMENT:
if notification.wpx_comment_notification:
await context.send_activity(f"Received comment: {notification.wpx_comment_notification.comment_id}")
Controlador especializado para notificaciones por correo electrónico
Registre más controladores específicamente para las notificaciones por correo electrónico:
from microsoft_agents_a365.notifications import AgentNotification
from microsoft_agents.activity import ChannelId, AgentSubChannel
# Create notification handler
agent_notification = AgentNotification(app)
# Use the convenience method for email notifications
@agent_notification.on_email()
async def handle_email(context, state, notification):
email = notification.email_notification
if not email:
await context.send_activity('No email found')
return
# Process the email
email_id = email.id
conversation_id = email.conversation_id
# Send response
await context.send_activity('Thank you for your email!')
Controladores especializados para comentarios de documentos
Registre más controladores para las notificaciones de comentarios de Word, Excel y PowerPoint:
from microsoft_agents_a365.notifications import AgentNotification
# Create notification handler
agent_notification = AgentNotification(app)
# Use convenience methods for document notifications
@agent_notification.on_word()
async def handle_word(context, state, notification):
comment = notification.wpx_comment_notification
if comment:
document_id = comment.document_id
comment_id = comment.comment_id
await context.send_activity(f'Processing Word comment: {comment_id}')
@agent_notification.on_excel()
async def handle_excel(context, state, notification):
comment = notification.wpx_comment_notification
if comment:
await context.send_activity('Processing Excel comment')
@agent_notification.on_powerpoint()
async def handle_powerpoint(context, state, notification):
comment = notification.wpx_comment_notification
if comment:
await context.send_activity('Processing PowerPoint comment')
Controladores especializados para eventos de ciclo de vida
Registre más controladores para eventos de ciclo de vida del agente, como la creación de identidades de usuario, la incorporación de cargas de trabajo y la eliminación de usuarios:
from microsoft_agents_a365.notifications import AgentNotification
# Create notification handler
agent_notification = AgentNotification(app)
# Handle all lifecycle events
@agent_notification.on_agent_lifecycle_notification("*")
async def handle_lifecycle(context, state, notification):
lifecycle_notification = notification.agent_lifecycle_notification
if lifecycle_notification:
event_type = lifecycle_notification.lifecycle_event_type
if event_type == "agenticUserIdentityCreated":
await context.send_activity('User identity created')
elif event_type == "agenticUserWorkloadOnboardingUpdated":
await context.send_activity('Workload onboarding completed')
elif event_type == "agenticUserDeleted":
await context.send_activity('User identity deleted')
Configuración avanzada
En esta sección se tratan las opciones de configuración avanzadas para ajustar los controladores de notificaciones. Mediante estas configuraciones puede controlar el orden de ejecución del controlador, administrar los requisitos de autenticación y optimizar el procesamiento de notificaciones para escenarios complejos.
Prioridad y clasificación del controlador
Al usar varios controladores especializados, puede especificar el orden de prioridad mediante valores de clasificación. Los valores de rango más bajos indican una prioridad más alta:
from microsoft_agents_a365.notifications import AgentNotification
from microsoft_agents.activity import ChannelId, AgentSubChannel
# Create notification handler
agent_notification = AgentNotification(app)
# Higher priority handler (processed first)
@agent_notification.on_email(rank=100)
async def high_priority_email(context, state, notification):
# Handle with high priority
pass
# Lower priority handler (processed after higher priority)
@agent_notification.on_email(rank=200)
async def low_priority_email(context, state, notification):
# Handle with lower priority
pass
Controladores de autenticación
Configure controladores de inicio de sesión automático para las notificaciones que requieren autenticación:
from microsoft_agents_a365.notifications import AgentNotification
from microsoft_agents.activity import ChannelId, AgentSubChannel
# Create notification handler
agent_notification = AgentNotification(app)
# Handler with automatic authentication
@agent_notification.on_email(auto_sign_in_handlers=['agentic'])
async def authenticated_email(context, state, notification):
# Authentication is handled automatically
pass
Código de ejemplo
Para ejemplos completos de gestión de notificaciones en todos los marcos de trabajo compatibles, consulte los Ejemplos de Agent 365.
Prueba del agente con notificaciones
Después de implementar controladores de notificaciones, pruebe el agente para asegurarse de que recibe y procesa correctamente diferentes tipos de notificación. Siga la guía de pruebas para configurar el entorno y, a continuación, céntrese principalmente en la sección Prueba con actividades de notificación para validar las notificaciones mediante la autenticación agente.
Supervisión del control de notificaciones
Agregue funciones de observabilidad para supervisar la gestión de notificaciones por parte de su agente. Realice un seguimiento del procesamiento de notificaciones, los tiempos de respuesta y las tasas de error para comprender el rendimiento del agente. Más información acerca de la implementación del seguimiento y la supervisión.