Notificar agentes

Ao usar o módulo Notificações, você pode criar agentes que respondem a eventos e notificações dos aplicativos do Microsoft 365. Ao usar o suporte a notificações, os agentes podem receber e processar alertas quando os usuários interagem com eles por meio de email, comentários em documentos ou outros cenários colaborativos.

Fluxo de trabalho de notificações

Siga este fluxo de trabalho para habilitar notificações para seu aplicativo de agente de IA:

  1. Instale pacotes de aplicativos.

  2. Importe os componentes de notificação

    • Importe as classes de notificação e os manipuladores.
    • Importe tipos de atividade e identificadores de canais.
  3. Registre os manipuladores de notificações

    • Use métodos de manipulador de notificações para registrar rotas.
    • Configure manipuladores para tipos específicos de notificações, como email, Word, Excel ou PowerPoint.
  4. Notificações de processo no código do agente

    • O agente recebe notificações de aplicativos do Microsoft 365.
    • Lide com as notificações recebidas e responda adequadamente.

Tipos de notificações

O SDK do Agent 365 oferece suporte aos seguintes tipos de notificação:

Tipo de notificação descrição ID do Subcanal
Email O agente recebe um email no qual elas são mencionadas ou abordadas email
Word O agente é mencionado em um comentário em um documento do Word word
Excel O agente é mencionado em um comentário em um documento do Excel excel
PowerPoint O agente é mencionado em um comentário em um documento do PowerPoint powerpoint
Eventos de ciclo de vida Notificações do ciclo de vida do agente (identidade do usuário criada, integração da carga de trabalho, usuário excluído) N/D

Eventos do ciclo de vida do agente

Os eventos de ciclo de vida do agente permitem que seu agente responda a eventos específicos do sistema relacionados ao gerenciamento de identidades do usuário do agente. No momento, o SDK oferece suporta três eventos do ciclo de vida:

Tipo de evento ID do evento descrição
Identidade do usuário criada agenticUserIdentityCreated Disparado quando uma identidade de usuário do agente é criada
Integração da carga de trabalho atualizada agenticUserWorkloadOnboardingUpdated Disparada quando o status de integração da carga de trabalho de um usuário do agente é atualizado
Usuário excluído agenticUserDeleted Desencadeado quando uma identidade de usuário do agente é excluída

Ao usar esses eventos, os agentes podem realizar tarefas de inicialização, operações de limpeza ou gerenciamento de estado em resposta a alterações no ciclo de vida do usuário.

Referência de conteúdo da notificação

Quando seu agente recebe uma notificação, o conteúdo contém dados estruturados específicos do tipo de notificação. Entender esses conteúdos permite que você extraia as informações necessárias para processar notificações com eficiência.

Conteúdo da notificação por email

Quando um usuário envia um email para o seu agente ou menciona seu agente em um email, o agente recebe uma notificação por email 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>"
    }
  ]
}

Documentar conteúdo da notificação de comentário (Word, Excel PowerPoint)

Quando um usuário menciona seu agente em um comentário em um documento do Word, Excel ou PowerPoint, 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"
    }
  ]
}

Adicionar notificações ao seu agente

Siga estas etapas para habilitar o processamento de notificações no seu agente existente:

Importe os componentes de notificação

Adicione essas importações ao arquivo do 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 aplicativos do Agent365. Ela fornece funcionalidades essenciais para atividades de roteamento, gerenciamento de estado e processamento de solicitações.
  • AgentNotification: classe para registrar manipuladores de notificação com métodos de decoradores. Fornece on_agent_notification(), on_email(), on_word() e outros decoradores de conveniência.
  • AgentNotificationActivity: wrapper que contém dados de notificação analisados com propriedades tipadas como email_notification e wpx_comment_notification que têm metadados específicos da notificação, como IDs, detalhes da conversa e referências de documento.
  • NotificationTypes: enumeração dos tipos de notificação com suporte, como EMAIL_NOTIFICATION, WPX_COMMENT.
  • ChannelId: use 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 da rodada da conversa atual do SDK de agentes.

Registrar os manipuladores de notificações no seu agente

Adicione manipuladores 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 manipuladores de notificações específicos

Adicione métodos de manipulador 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

Toda atividade de notificação inclui Activity.From. A plataforma A365 preenche essa propriedade com a identidade básica do remetente, portanto, você não precisa de chamadas à API ou aquisição de tokens. Acesse-a dentro de qualquer manipulador 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 tem as seguintes propriedades:

Propriedade Descrição
name Nome de exibição
id ID do usuário do canal
aad_object_id ID do Objeto do Entra

Importante

O nome de exibição é um texto controlado pelo usuário. Filtre-o (remova caracteres de controle, imponha um comprimento máximo) antes de injetá-lo em prompts do sistema de LLM para evitar ataques de injeção de prompt.

Dica

Use aadObjectId com a API do Microsoft Graph para recuperar dados de perfil estendido (cargo, gerente, departamento) quando seu agente tiver as permissões apropriadas.

Manipuladores de notificações especializados

Após configurar o roteamento básico de notificações, use métodos especializados de manipulador para um controle mais granular. Usando esses métodos, você pode:

  • Registrar vários manipuladores para o mesmo tipo de notificação.
  • Definir a prioridade dos manipuladores usando a classificação.
  • Configurar a autenticação automática para cada manipulador.

Observação

Para a maioria dos casos de uso, o padrão genérico de manipulador é suficiente. Use esses manipuladores especializados quando precisar de roteamento avançado ou de vários manipuladores para o mesmo tipo de notificação.

Manipulador especializado para todas as notificações

Registre mais manipuladores 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}")

Manipulador especializado para notificações por email

Registre mais manipuladores especificamente para notificações por email:

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

Manipuladores especializados para comentários de documentos

Registre mais manipuladores para notificações de comentários do 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')

Manipuladores especializados para eventos de ciclo de vida

Registre mais manipuladores para eventos do ciclo de vida do agente, como criação de identidade de usuário, integração de cargas de trabalho e exclusão de usuários:

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 seção aborda opções avançadas de configuração para ajustar seus manipuladores de notificações. Ao usar essas configurações, você pode controlar a ordem de execução dos manipuladores, gerenciar os requisitos de autenticação e otimizar o processamento de notificações para cenários complexos.

Prioridade e classificação do manipulador

Quando você usa vários manipuladores especializados, especifique a ordem de prioridade usando valores de classificação. Valores de classificação mais baixos indicam prioridade mais 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

Manipuladores de autenticação

Configure manipuladores de entrada automática 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 ver exemplos completos de tratamento de notificações em todos as estruturas com suporte, consulte os Exemplos do Agent 365.

Testar seu agente com notificações

Após implementar os manipuladores de notificações, teste seu agente para garantir que ele receba e processe corretamente diferentes tipos de notificações. Siga o guia de testes para configurar seu ambiente e, em seguida, concentre-se principalmente na seção Testar com atividades de notificação para validar suas notificações usando autenticação de agentes.

Monitorar o tratamento de notificações

Adicione recursos de observabilidade para monitorar o tratamento das notificações pelo seu agente. Acompanhe o processamento de notificações, tempos de resposta e taxas de erro para entender o desempenho do agente. Saiba mais sobre como implementar rastreamento e monitoramento.