Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Importante
Debe formar parte del programa de versión preliminar Frontier para obtener acceso anticipado a Microsoft Agent 365. Frontier le conecta directamente con las innovaciones de inteligencia artificial más recientes de Microsoft. Las versiones preliminares de Frontier están sujetas a los términos de vista previa existentes en tus acuerdos con clientes. Dado que estas características siguen en desarrollo, su disponibilidad y funcionalidades pueden cambiar con el tiempo.
Mediante el módulo Notificaciones, puede crear agentes que respondan a eventos y notificaciones de aplicaciones Microsoft 365. Mediante el soporte de notificaciones, los agentes pueden recibir y procesar alertas cuando los usuarios interactúan con ellos mediante correo electrónico, comentarios en documentos u otros escenarios colaborativos.
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.
- Importe los tipos de actividad y los identificadores de canal.
Registro de controladores de notificaciones
- Use métodos de controlador de notificaciones para registrar rutas.
- Configure 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 Microsoft 365.
- Controle las notificaciones entrantes y responda correctamente.
Tipos de notificación
El SDK del Agente 365 admite los siguientes tipos de notificaciones:
| Tipo de notificación | Descripción | Identificador de sub canal |
|---|---|---|
| Correo electrónico | El agente recibe un correo electrónico en el que se le menciona o se le dirige directamente. | 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) | N/D |
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 |
| Actualización en la incorporación de cargas de trabajo | 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 |
Con 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.
Controlar eventos de instalación y desinstalación del agente
Cuando un usuario instala o desinstala tu agente en Teams u otros canales alojados en Agent 365, la plataforma envía una InstallationUpdate actividad (también llamada agentInstanceCreated evento). El agente puede controlar estos eventos para enviar un mensaje de bienvenida cuando se instala y un mensaje de despedida cuando se desinstala.
| Acción | Descripción |
|---|---|
add |
El usuario instala el agente. |
remove |
El usuario desinstala el agente. |
A diferencia de los controladores de notificaciones, el InstallationUpdate controlador no requiere autenticación porque el evento de instalación o desinstalación se desencadena antes o después de que el usuario tenga una sesión activa.
Registro del controlador de instalación y desinstalación
Registre un controlador de actividad para el tipo de actividad InstallationUpdate en la inicialización del agente.
@agent_app.activity("installationUpdate")
async def on_installation_update(context: TurnContext, state: TurnState):
action = context.activity.action
from_prop = context.activity.from_property
logger.info(
"InstallationUpdate received — Action: '%s', DisplayName: '%s', UserId: '%s'",
action or "(none)",
getattr(from_prop, "name", "(unknown)") if from_prop else "(unknown)",
getattr(from_prop, "id", "(unknown)") if from_prop else "(unknown)",
)
if action == "add":
await context.send_activity("Thank you for hiring me! Looking forward to assisting you in your professional journey!")
elif action == "remove":
await context.send_activity("Thank you for your time, I enjoyed working with you.")
Activity.action es una cadena establecida en "add" cuando el agente se instala o "remove" cuando se desinstala.
Activity.from_property es una instancia de ChannelAccount que contiene la identidad del usuario.
Referencia de carga útil de notificación
Cuando tu agente recibe una notificación, la carga útil contiene datos estructurados específicos del tipo de notificación. Comprender estas cargas útiles te ayuda a extraer la información que necesitas 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 tu agente o menciona a tu agente en un correo, este 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 de notificación de comentarios de documentos (Word, Excel, PowerPoint)
Cuando un usuario menciona al agente en un comentario dentro de un documento de Word, Excel o PowerPoint, el agente recibe una notificación de comentario de WPX (Word, PowerPoint, 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"
}
]
}
Añade notificaciones a tu 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 compilar aplicaciones Agent365. Proporciona una funcionalidad básica para enrutar actividades, administrar el estado y procesar solicitudes.
-
AgentNotification: clase para registrar controladores de notificaciones con métodos de decorador. Proporciona
on_agent_notification(),on_email(),on_word()y otros decoradores útiles. -
AgentNotificationActivity: contenedor que contiene datos de notificación analizados con propiedades tipadas como
email_notificationywpx_comment_notificationque contienen metadatos específicos de la notificación, como identificadores, detalles de conversación y referencias a documentos. -
NotificationTypes: enumeración de tipos de notificación admitidos como
EMAIL_NOTIFICATION,WPX_COMMENT. -
ChannelId: use para especificar canales de notificación, por ejemplo,
ChannelId(channel="agents", sub_channel="*"). - Autorización: contexto de autorización para procesar notificaciones.
- TurnContext: contexto del turno de conversación actual del SDK de agentes.
Registra los controladores de notificaciones en tu 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
Identificación del remitente
Cada actividad de notificación incluye Activity.From. La plataforma A365 rellena esta propiedad con la identidad básica del remitente, por lo que no necesita ninguna llamada API ni adquisición de tokens. Acceda a él 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 clase ChannelAccount que tiene las siguientes propiedades:
| Propiedad | Descripción |
|---|---|
name |
Nombre para mostrar |
id |
Identificador de usuario del canal |
aad_object_id |
ID de objeto Entra |
Importante
El nombre para mostrar es texto controlado por el usuario. Sanitiza (elimina los caracteres de control, aplica una longitud máxima) antes de insertarlo en las indicaciones del sistema LLM para evitar ataques de inyección de órdenes.
Sugerencia
Use aadObjectId con Microsoft Graph API para recuperar datos de perfil extendidos (puesto, administrador, departamento) cuando el agente tenga los permisos adecuados.
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. Mediante estos métodos, puede hacer lo siguiente:
- Registre varios controladores para el mismo tipo de notificación.
- Establezca la prioridad del controlador mediante la clasificación.
- Configure 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 gestor
Al usar varios controladores especializados, especifique 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
Configura manejadores de inicio de sesión sin intervención para notificaciones que necesitan 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 obtener ejemplos completos de control de notificaciones en todos los marcos admitidos, consulte ejemplos del Agente 365.
Prueba tu 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 funcionalidades de observabilidad para supervisar el control de notificaciones del agente. Realice un seguimiento del procesamiento de notificaciones, los tiempos de respuesta y las tasas de error para comprender el rendimiento del agente. Infórmate más sobre cómo implementar el rastreo y el seguimiento.