Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Devi far parte del programma di anteprima Frontier per ottenere l'accesso in anteprima a Microsoft Agent 365. Frontier ti mette in contatto diretto con le ultime innovazioni di Microsoft nell'IA. Le anteprime Frontier sono soggette alle condizioni di anteprima esistenti dei tuoi contratti del cliente. Poiché queste funzionalità sono ancora in fase di sviluppo, la disponibilità e le funzionalità possono cambiare nel tempo.
Usando il modulo Notifiche, è possibile compilare agenti che rispondono a eventi e notifiche da Microsoft 365 applicazioni. Utilizzando il supporto alle notifiche, gli agenti possono ricevere ed elaborare avvisi quando gli utenti interagiscono con loro tramite email, commenti ai documenti o altri scenari collaborativi.
Flusso di lavoro delle notifiche
Segui questo flusso di lavoro per abilitare le notifiche per l'applicazione dell'agente IA:
Importare i componenti delle notifiche
- Importare classi e gestori di notifica.
- Importare tipi di attività e identificatori di canale.
Registrare i gestori di notifica
- Usare i metodi del gestore delle notifiche per registrare le route.
- Configurare i gestori per tipi di notifica specifici, ad esempio posta elettronica, Word, Excel o PowerPoint.
Elaborare le notifiche nel codice dell'agente
- L'agente riceve notifiche dalle applicazioni Microsoft 365.
- Gestire le notifiche in ingresso e rispondere in modo appropriato.
Tipi di notifica
L'SDK dell'Agente 365 supporta i seguenti tipi di notifica:
| Tipo di notifica | Descrizione | ID canale-secondario |
|---|---|---|
| L'agente riceve un'email in cui viene citato o a cui viene indirizzato | email |
|
| Word | L'agente è menzionato in un commento in un documento di Word | word |
| Excel | L'agente è menzionato in un commento in un documento Excel | excel |
| PowerPoint | L'agente è menzionato in un commento in un documento PowerPoint. | powerpoint |
| Eventi del ciclo di vita | Notifiche del ciclo di vita dell'agente (identità utente creata, onboarding del carico di lavoro, utente eliminato) | N/A |
Eventi del ciclo di vita dell'agente
Gli eventi del ciclo di vita dell'agente consentono all'agente di rispondere a eventi di sistema specifici correlati alla gestione delle identità utente dell'agente. L'SDK supporta attualmente tre eventi del ciclo di vita:
| Tipo di evento | ID evento | Descrizione |
|---|---|---|
| Identità utente creata | agenticUserIdentityCreated |
Attivato quando viene creata un'identità utente agente |
| Aggiornamento dell'onboarding del carico di lavoro | agenticUserWorkloadOnboardingUpdated |
Attivato quando viene aggiornato lo stato di onboarding del carico di lavoro di un utente agente |
| Utente eliminato | agenticUserDeleted |
Attivato quando viene eliminata un'identità utente agente |
Usando questi eventi, gli agenti possono eseguire attività di inizializzazione, operazioni di pulizia o gestione dello stato in risposta alle modifiche del ciclo di vita dell'utente.
Gestire gli eventi di installazione e disinstallazione dell'agente
Quando un utente installa o disinstalla l'agente in Teams o in altri canali ospitati da Agent 365, la piattaforma invia un'attività InstallationUpdate (detta anche evento agentInstanceCreated). L'agente può gestire questi eventi per inviare un messaggio di benvenuto quando è installato e un messaggio di saluto quando viene disinstallato.
| Action | Descrizione |
|---|---|
add |
L'utente installa l'agente |
remove |
L'utente disinstalla l'agente |
A differenza dei gestori di notifica, il InstallationUpdate gestore non richiede l'autenticazione perché l'evento di installazione o disinstallazione viene attivato prima o dopo che l'utente ha una sessione attiva.
Registrare il gestore di installazione e disinstallazione
Registrare un gestore di attività per il tipo di attività InstallationUpdate durante l'inizializzazione dell'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 è una stringa impostata su "add" quando l'agente viene installato o "remove" quando viene disinstallato.
Activity.from_property è un'istanza ChannelAccount contenente l'identità dell'utente.
Riferimento al carico utile di notifica
Quando il tuo agente riceve una notifica, il payload contiene dati strutturati specifici per il tipo di notifica. Comprendere questi payload ti aiuta a estrarre le informazioni necessarie per elaborare efficacemente le notifiche.
Payload della notifica tramite email
Quando un utente invia un'email al tuo agente o menziona il tuo agente in un'email, il tuo agente riceve una notifica via email con la seguente struttura:
{
"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 di notifica dei commenti al documento (Word, Excel, PowerPoint)
Quando un utente menziona l'agente in un commento all'interno di un documento di Word, Excel o PowerPoint, l'agente riceve una notifica di commento 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"
}
]
}
Aggiungi notifiche al tuo agente
Segui questa procedura per abilitare la gestione delle notifiche nell'agente esistente:
Importare i componenti delle notifiche
Aggiungi queste importazioni al file dell'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 di base per la compilazione di applicazioni Agent365. Offre funzionalità di base per le attività di routing, la gestione dello stato e l'elaborazione delle richieste.
-
AgentNotification: classe per la registrazione di gestori di notifica con metodi decorator. Fornisce
on_agent_notification(),on_email(),on_word()e altri decoratori di convenienza. -
AgentNotificationActivity: wrapper contenente dati di notifica analizzati con proprietà tipizzate come
email_notificationewpx_comment_notificationche contengono metadati specifici della notifica, ad esempio ID, dettagli della conversazione e riferimenti a documenti. -
NotificationTypes: enumerazione di tipi di notifica supportati come
EMAIL_NOTIFICATION,WPX_COMMENT. -
ChannelId: usare per specificare i canali di notifica,
ChannelId(channel="agents", sub_channel="*")ad esempio . - Autorizzazione: contesto di autorizzazione per l'elaborazione delle notifiche.
- TurnContext: contesto del turno di conversazione corrente da Agents SDK.
Registrare i gestori di notifica nell'agente
Aggiungere gestori di notifica all'inizializzazione dell'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.')
Implementare gestori di notifica specifici
Aggiungere metodi del gestore per ogni tipo di notifica:
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
Identificare il mittente
Ogni attività di notifica include Activity.From. La piattaforma A365 popola questa proprietà con l'identità di base del mittente, quindi non sono necessarie chiamate API o acquisizioni di token. Accedere all'interno di qualsiasi gestore di notifica:
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 è un'istanza della classe ChannelAccount con le proprietà seguenti:
| Proprietà | Descrizione |
|---|---|
name |
Nome visualizzato |
id |
ID utente canale |
aad_object_id |
ID oggetto Entra |
Importante
Il nome visualizzato è testo controllato dall'utente. Purificarlo (rimuovere i caratteri di controllo, applicare una lunghezza massima) prima di inserirlo nelle richieste di sistema LLM per evitare attacchi di tipo prompt injection.
Suggerimento
Usare aadObjectId con Microsoft Graph API per recuperare i dati del profilo esteso (posizione, responsabile, reparto) quando l'agente dispone delle autorizzazioni appropriate.
Gestori di notifica specializzati
Dopo aver configurato il routing delle notifiche di base, usa metodi del gestore specializzati per un controllo più granulare. Usando questi metodi, è possibile:
- Registrare più gestori per lo stesso tipo di notifica.
- Impostare la priorità del gestore usando la classificazione.
- Configurare l'autenticazione automatica per ogni gestore.
Nota
Per la maggior parte dei casi d'uso, il modello di gestore generico è sufficiente. Usa questi gestori specializzati quando sono necessari routing avanzato o più gestori per lo stesso tipo di notifica.
Gestore specializzato per tutte le notifiche
Registra più gestori che elaborano tutti i tipi di notifica:
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}")
Gestore specializzato per le notifiche e-mail
Registra più gestori in particolare per le notifiche tramite 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!')
Gestori specializzati per i commenti dei documenti
Registrare altri gestori per le notifiche di commenti di 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')
Gestori specializzati per gli eventi del ciclo di vita
Registrare più gestori per gli eventi del ciclo di vita dell'agente, ad esempio la creazione dell'identità utente, l'onboarding del carico di lavoro e l'eliminazione dell'utente:
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')
Configurazione avanzata
Questa sezione illustra le opzioni di configurazione avanzate per ottimizzare i gestori di notifica. Usando queste configurazioni, è possibile controllare l'ordine di esecuzione del gestore, gestire i requisiti di autenticazione e ottimizzare l'elaborazione delle notifiche per scenari complessi.
Priorità e classificazione del gestore
Quando si usano più gestori specializzati, specificare l'ordine di priorità usando i valori di classificazione. Valori di classificazione più bassi indicano una priorità più 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
Gestori dell'autenticazione
Configura i gestori di accesso automatico per le notifiche che richiedono l'autenticazione:
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
Esempio di codice
Per esempi di lavoro completi sulla gestione delle notifiche in tutti i framework supportati, vedere gli esempi di Agent 365.
Metti alla prova il tuo agente con le notifiche
Dopo l'implementazione dei gestori di notifica, testa l'agente per assicurarsi che riceva correttamente ed elabori tipi di notifica diversi. Seguire la guida ai test per configurare l'ambiente e quindi concentrarsi principalmente sulla sezione Test con attività di notifica per convalidare le notifiche usando l'autenticazione agente.
Monitorare la gestione delle notifiche
Aggiungere funzionalità di osservabilità per monitorare la gestione delle notifiche dell'agente. Tieni traccia dell'elaborazione delle notifiche, dei tempi di risposta e delle percentuali di errore per comprendere le prestazioni dell'agente. Scopri di più sull'implementazione del tracciamento e del monitoraggio.