Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
Importar componentes de notificação
- Importar classes e processadores de notificações.
- Importar tipos de atividade e identificadores de canal.
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.
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 |
|---|---|---|
| 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_notificationewpx_comment_notificationque 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.