Notificar agentes

Ao utilizar o módulo Notificações, pode criar agentes que respondam a eventos e notificações das aplicações Microsoft 365. Ao utilizar o suporte às notificações, os agentes podem receber e processar alertas quando os utilizadores interagem com eles através de e-mail, comentários de documentos ou outros cenários colaborativos.

Fluxo de trabalho de notificações

Siga este fluxo de trabalho para ativar notificações para a sua aplicação de agente de IA:

  1. Instalar pacotes de notificação.

  2. Importar componentes de notificação

    • Importar classes e processadores de notificações.
    • Importar tipos de atividade e identificadores de canal.
  3. Registar os processadores de notificações

    • Utilize métodos de processadores de notificações para registar rotas.
    • Configure processadores para tipos específicos de notificações, como e-mail, Word, Excel ou PowerPoint.
  4. Processar notificações no código do agente

    • O agente recebe notificações das aplicações Microsoft 365.
    • Processe as notificações recebidas e responda de forma apropriada.

Tipos de notificação

O SDK do Agent 365 suporta os seguintes tipos de notificação:

Tipo de notificação Descrição ID do subcanal
E-mail O agente recebe um e-mail em que é mencionado ou é o destinatário email
Word O agente é mencionado num comentário num documento do Word word
Excel O agente é mencionado num comentário num documento do Excel excel
PowerPoint O agente é mencionado num comentário num documento do PowerPoint powerpoint
Eventos do Ciclo de Vida Notificações do ciclo de vida do agente (identidade de utilizador criada, inclusão de cargas de trabalho, utilizador eliminado) N/D

Eventos do ciclo de vida do agente

Os eventos do ciclo de vida do agente permitem que o seu agente responda a eventos específicos do sistema relacionados com a gestão da identidade do utilizador do agente. Atualmente, o SDK suporta três eventos do ciclo de vida:

Tipo de evento ID do Evento Descrição
Identidade do Utilizador Criada agenticUserIdentityCreated Acionado quando a identidade do utilizador de um agente é criada
Inclusão de Cargas de Trabalho Atualizada agenticUserWorkloadOnboardingUpdated Acionado quando o estado de inclusão de cargas de trabalho de um utilizador de agente é atualizado
Utilizador Eliminado agenticUserDeleted Acionado quando a identidade do utilizador de um agente é eliminada

Ao utilizar estes eventos, os agentes podem executar tarefas de inicialização, realizar operações de limpeza ou realizar gestão de estados em resposta a alterações no ciclo de vida do utilizador.

Referência do payload da notificação

Quando o seu agente recebe uma notificação, o payload contém dados estruturados específicos do tipo de notificação. A compreensão destes payloads ajuda-o a extrair a informação necessária para processar as notificações de forma eficaz.

Payload da notificação por e-mail

Quando um utilizador envia um e-mail para o seu agente ou menciona o seu agente num e-mail, o seu agente recebe uma notificação por e-mail com a seguinte estrutura:

{
  "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>"
    }
  ]
}

Payload da notificação de comentários em documentos (Word, Excel, PowerPoint)

Quando um utilizador menciona o seu agente num comentário dentro de um documento do Word, Excel ou PowerPoint, o seu agente recebe uma notificação de comentário 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"
    }
  ]
}

Adicione notificações ao seu agente

Siga estes passos para ativar o processamento de notificações no seu agente atual:

Importar componentes de notificação

Adicione estas importações ao seu ficheiro de 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: classe base para a criação de aplicações Agent365. Fornece funcionalidades essenciais para o encaminhamento de atividades, gestão de estados e processamento de pedidos.
  • AgentNotification: classe para registar processadores de notificações com métodos de decoração. Fornece on_agent_notification(), on_email(), on_word() e outros decoradores de conveniência.
  • AgentNotificationActivity: wrapper com dados de notificações analisadas com propriedades introduzidas como email_notification e wpx_comment_notification que contêm metadados específicos da notificação, como IDs, detalhes da conversa e referências de documentos.
  • NotificationTypes: enumeração dos tipos de notificação suportados, tais como EMAIL_NOTIFICATION, WPX_COMMENT.
  • ChannelId: é utilizado para especificar canais de notificação, por exemplo, ChannelId(channel="agents", sub_channel="*").
  • Autorização: contexto de autorização para o processamento de notificações.
  • TurnContext: contexto atual do turno de conversa do SDK de Agentes.

Registe os processadores de notificações no seu agente

Adicione processadores de notificações à inicialização do seu 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.')

Implementar processadores de notificações específicos

Adicionar métodos de processadores para cada tipo de notificação:

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 o remetente

Cada atividade de notificação inclui Activity.From. A plataforma A365 preenche esta propriedade com a identidade básica do remetente, por isso não necessita de chamadas à API ou aquisição de tokens. Aceda-a dentro de qualquer processador de notificações:

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 é uma instância da classe ChannelAccount que possui as seguintes propriedades:

Propriedade Description
name Nome a apresentar
id ID de utilizador do canal
aad_object_id ID do Objeto do Entra

Importante

O nome a apresentar é um texto controlado pelo utilizador. Higienize o código (remova os caracteres de controlo, imponha um comprimento máximo) antes de o injetar nos pedidos do sistema LLM para evitar ataques de injeção de pedidos.

Sugestão

Utilize o aadObjectId com o Microsoft Graph API para obter informações de perfil avançadas (cargo, gestor, departamento) quando o seu agente tiver as permissões adequadas.

Processadores de notificações especializados

Depois de configurar o encaminhamento básico das notificações, utilize métodos de processadores especializados para um controlo mais granular. Ao utilizar estes métodos, pode:

  • Registar múltiplos processadores para o mesmo tipo de notificação.
  • Definir a prioridade do processador utilizando a classificação.
  • Configurar a autenticação automática para cada processador.

Nota

Para a maioria dos casos de utilização, o padrão genérico do processador é suficiente. Utilize estes processadores especializados quando precisar de encaminhamento avançado ou de múltiplos processadores para o mesmo tipo de notificação.

Processador especializado para todas as notificações

Registe mais processadores que processem todos os tipos de notificações:

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}")

Processador especializado para notificações por e-mail

Registe mais processadores especificamente para notificações por e-mail:

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!')

Processadores especializados para comentários de documentos

Registe mais processadores para notificações de comentários em Word, Excel e 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')

Processadores especializados para eventos do ciclo de vida

Registe mais processadores para eventos do ciclo de vida do agente, como a criação de identidades de utilizadores, a inclusão de cargas de trabalho e a eliminação de utilizadores:

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')

Configuração avançada

Esta secção aborda opções avançadas de configuração para detalhar os seus processadores de notificações. Ao utilizar estas configurações, pode controlar a ordem de execução dos processadores, gerir os requisitos de autenticação e otimizar o processamento de notificações em cenários complexos.

Prioridade e classificação dos processadores

Ao utilizar vários processadores especializados, defina a ordem de prioridade utilizando valores de classificação. Valores de classificação mais baixos indicam maior prioridade:

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

Processadores de autenticação

Configure os processadores de início de sessão automático para notificações que exijam autenticação:

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 exemplo

Para obter exemplos completos e funcionais de processamento de notificações em todas as arquiteturas suportadas, consulte os Exemplos do Agent 365.

Testar o seu agente com notificações

Depois de implementar os processadores de notificações, teste o seu agente para garantir que recebe e processa corretamente diferentes tipos de notificações. Siga o guia de testes para configurar o seu ambiente e, em seguida, concentre-se principalmente na secção Testar com atividades de notificações para validar as suas notificações utilizando autenticação por meio de agentes.

Monitorizar o processamento de notificações

Adicione capacidades de observabilidade para monitorizar o processamento das notificações pelo seu agente. Monitorize o processamento das notificações, os tempos de resposta e as taxas de erros para compreender o desempenho do agente. Saiba mais sobre como implementar o rastreio e monitorização.