Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Você precisa fazer parte do programa de prévia Frontier para obter acesso antecipado ao Microsoft Agent 365. A Frontier conecta você diretamente às mais recentes inovações de IA da Microsoft. Prévias da Frontier estão sujeitas aos termos de visualização prévia existentes dos seus contratos com clientes. Como esses recursos ainda estão em desenvolvimento, sua disponibilidade e capacidades podem mudar ao longo do tempo.
Usando o módulo Notificações, você pode criar agentes que respondem a eventos e notificações de aplicativos Microsoft 365. Ao usar suporte de notificações, os agentes podem receber e processar alertas quando os usuários interagem com eles por e-mail, comentários em documentos ou outros cenários colaborativos.
Fluxos de trabalho de notificação
Siga este fluxo de trabalho para habilitar notificações para seu aplicativo de agente de IA:
Instalar pacotes de notificação.
Importação de componentes de notificação
- Importar classes de notificação e manipuladores.
- Importar tipos de atividade e identificadores de canal.
Registrar manipuladores de notificações
- Use métodos de manipulador de notificação para registrar rotas.
- Configure manipuladores para tipos de notificação específicos, como email, Word, Excel ou PowerPoint.
Notificações de processo no código do agente
- O agente recebe notificações de aplicativos Microsoft 365.
- Manipule as notificações de entrada e responda adequadamente.
Tipos de notificações
O SDK do Agente 365 suporta os seguintes tipos de notificação:
| Tipo de notificação | Descrição | ID de Subcanal |
|---|---|---|
| O agente recebe um e-mail onde é mencionado ou dirigido | email |
|
| Word | O agente é mencionado em um comentário em um documento 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 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/A |
Eventos do ciclo de vida do agente
Eventos do ciclo de vida do agente permitem que seu agente responda a eventos específicos do sistema relacionados ao gerenciamento de identidade de usuário agente. Atualmente, o SDK suporta três eventos do ciclo de vida:
| Tipo de evento | ID do evento | Descrição |
|---|---|---|
| Identidade do Usuário Criada | agenticUserIdentityCreated |
Ativado quando uma identidade de usuário agente é criada |
| Incorporação da Carga de Trabalho Atualizada | agenticUserWorkloadOnboardingUpdated |
Ativado quando o status de onboarding da carga de trabalho de um usuário agente é atualizado |
| Usuário Excluído | agenticUserDeleted |
Ativado quando a identidade de um usuário agente é excluída |
Usando esses eventos, os agentes podem executar tarefas de inicialização, operações de limpeza ou gerenciamento de estado em resposta a alterações no ciclo de vida do usuário.
Manipular eventos de instalação e desinstalação do agente
Quando um usuário instala ou desinstala seu agente no Teams ou em outros canais hospedados pelo Agente 365, a plataforma envia uma InstallationUpdate atividade (também conhecida como evento agentInstanceCreated ). Seu agente pode lidar com esses eventos para enviar uma mensagem de boas-vindas quando instalado e uma mensagem de despedida quando desinstalado.
| Ação | Descrição |
|---|---|
add |
O usuário instala o agente |
remove |
O usuário desinstala o agente |
Ao contrário dos manipuladores de notificação, o InstallationUpdate manipulador não requer autenticação porque o evento de instalação ou desinstalação é acionado antes ou depois que o usuário tem uma sessão ativa.
Registrar o manipulador de instalação e desinstalação
Registre um manipulador de atividades para o InstallationUpdate tipo de atividade na inicialização do 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 é uma cadeia de caracteres definida para "add" quando o agente é instalado ou "remove" quando desinstalado.
Activity.from_property é uma instância channelaccount que contém a identidade do usuário.
Referência da carga útil de notificação
Quando seu agente recebe uma notificação, o payload contém dados estruturados específicos para o tipo de notificação. Compreender essas cargas úteis ajuda você a extrair as informações necessárias para processar notificações de forma eficaz.
Carga útil de notificação por e-mail
Quando um usuário envia um e-mail para seu agente ou menciona seu agente em um e-mail, 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>"
}
]
}
Carga útil da notificação de comentários do documento (Word, Excel, PowerPoint)
Quando um usuário menciona seu agente em um comentário em um documento de 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 estes passos para habilitar o gerenciamento de notificações no seu agente atual:
Importação de componentes de notificação
Adicione essas importações ao seu arquivo 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 aplicativos Agent365. Ele fornece a funcionalidade principal para atividades de roteamento, gerenciamento de estado e solicitações de processamento.
-
AgentNotification: Classe para registrar manipuladores de notificação com métodos decoradores. Ele fornece
on_agent_notification(),on_email(),on_word()e outros decoradores de conveniência. -
AgentNotificationActivity: Um wrapper que contém dados de notificação analisados com propriedades tipadas como
email_notificationewpx_comment_notification, que incluem metadados específicos da notificação, tais como IDs, detalhes da conversa e referências de documentos. -
NotificationTypes: enumeração de 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 processamento de notificações.
- TurnContext: O contexto de turno de conversa atual do SDK de Agentes.
Registre 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.')
Implemente manipuladores de notificações específicos
Adicionar métodos handler 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
Todas as atividades de notificação incluem Activity.From. A plataforma A365 preenche essa propriedade com a identidade básica do remetente, portanto, você não precisa de chamadas de API ou aquisição de token. Acesse-o dentro de qualquer manipulador de notificação:
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 de 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 Entra |
Importante
O nome de exibição é um texto controlado pelo usuário. Sanitize-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 o Microsoft Graph API para recuperar dados de perfil estendido (cargo, gerente, departamento) quando o agente tiver permissões apropriadas.
Manipuladores de notificação especializados
Após configurar o roteamento básico de notificações, use métodos especializados de handler para um controle mais detalhado. Usando estes métodos, você pode:
- Registre vários manipuladores para o mesmo tipo de notificação.
- Defina a prioridade do manipulador usando a classificação.
- Configure a autenticação automática para cada manipulador.
Observação
Para a maioria dos casos de uso, o padrão genérico de handler é suficiente. Use esses manipuladores especializados quando precisar de roteamento avançado ou múltiplos 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 e-mail
Registre mais manipuladores 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!')
Manipuladores especializados para comentários de documentos
Registre mais manipuladores para as notificações de comentário 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 do ciclo de vida
Registre mais manipuladores para eventos de ciclo de vida do agente, como criação de identidade do usuário, integração de carga de trabalho e exclusão de usuário:
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. Usando essas configurações, você pode controlar a ordem de execução do manipulador, gerenciar os requisitos de autenticação e otimizar o processamento de notificação para cenários complexos.
Prioridade e classificação do manipulador
Ao usar vários manipuladores especializados, especifique a ordem de prioridade usando valores de classificação. Valores 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 mecanismos de login automático para notificações que exigem 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 de trabalho completos de tratamento de notificação em todas as estruturas com suporte, consulte os Exemplos do Agente 365.
Teste 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 teste para configurar seu ambiente e, em seguida, concentre-se principalmente na seção Teste com atividades de notificação para validar suas notificações usando a autenticação agente.
Monitorar o gerenciamento de notificações
Adicione recursos de observabilidade para monitorar o tratamento de notificação do 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.