Notifier les assistants

Le module Notifications permet aux développeurs de créer des assistants capables de répondre aux événements et notifications provenant des applications Microsoft 365. Grâce à la prise en charge des notifications, les assistants peuvent recevoir et traiter des alertes lorsque les utilisateurs interagissent avec eux par courrier électronique, via des commentaires dans des documents ou dans d’autres scénarios collaboratifs.

Flux de travail de notifications

Suivez ce flux de travail pour activer les notifications pour votre application d’assistant IA :

  1. Installer les packages de notification.

  2. Importer des composants de notification

    • Importez des classes de notification et des gestionnaires.
    • Importez des types d’activités et des identificateurs de canal.
  3. Inscrire des gestionnaires de notification

    • Utilisez des méthodes de gestionnaire de notification pour inscrire des routages.
    • Configurez des gestionnaires pour des types de notification spécifiques, par exemple : courrier électronique, Word, Excel ou PowerPoint.
  4. Traiter les notifications dans le code de l’assistant

    • L’assistant reçoit des notifications provenant des applications Microsoft 365.
    • Gérez les notifications entrantes et répondre de manière appropriée.

Types de notifications

Le SDK Agent 365 prend en charge les types de notifications suivants :

Type de notification Description ID de sous-canal
Courrier électronique L’assistant reçoit un courrier électronique dans lequel il est mentionné ou directement adressé email
Word L’assistant est mentionné dans un commentaire d’un document Word word
Excel L’assistant est mentionné dans un commentaire d’un document Excel excel
PowerPoint L’assistant est mentionné dans un commentaire d’un document PowerPoint powerpoint
Événements de cycle de vie Notifications du cycle de vie de l’assistant (identité utilisateur créée, intégration à une charge de travail, utilisateur supprimé) S.O.

Événements de cycle de vie de l’assistant

Les événements du cycle de vie de l’assistant permettent à votre assistant de répondre à des événements système spécifiques liés à la gestion de l’identité utilisateur de l’assistant. Le SDK prend actuellement en charge trois événements du cycle de vie :

Type d’événement ID de l’événement Description
Identité utilisateur créée agenticUserIdentityCreated Déclenché lors de la création d’une identité d’utilisateur de l’assistant
Mise à jour de l’intégration à une charge de travail agenticUserWorkloadOnboardingUpdated Déclenché lorsque le statut d’intégration à une charge de travail d’un utilisateur d’assistant est mis à jour
Utilisateur supprimé agenticUserDeleted Déclenché lors de la suppression d’une identité d’utilisateur d’assistant

Avec ces événements, les assistants peuvent exécuter des tâches d’initialisation, des opérations de nettoyage ou une gestion d’état en réponse aux changements du cycle de vie de l’utilisateur.

Référence du contenu de notification

Lorsque votre assistant reçoit une notification, la charge utile contient des données structurées propres au type de notification. La compréhension de ces charges utiles vous aide à extraire les informations dont vous avez besoin pour traiter efficacement les notifications.

Charge utile de la notification par courrier électronique

Lorsqu’un utilisateur envoie un courrier électronique à votre assistant ou mentionne votre assistant dans un courrier électronique, votre assistant reçoit une notification par courrier électronique avec la structure suivante :

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

Charge utile de notification de commentaires de document (Word, Excel, PowerPoint)

Lorsqu’un utilisateur mentionne votre assistant dans un commentaire d’un document Word, Excel ou PowerPoint, votre assistant reçoit une notification de commentaire 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"
    }
  ]
}

Ajouter des notifications à votre assistant

Procédez comme suit pour activer la gestion des notifications dans votre assistant existant :

Importer des composants de notification

Ajoutez ces importations à votre fichier d’assistant :

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 de base pour la création d’applications Agent365. Elle fournit les fonctionnalités de base pour le routage des activités, la gestion de l’état et le traitement des requêtes.
  • AgentNotification : classe permettant d’enregistrer des gestionnaires de notifications à l’aide de méthodes décoratrices. Fournit on_agent_notification(), on_email(), on_word(), et d’autres décorateurs utilitaires.
  • AgentNotificationActivity : wrapper contenant des données de notification analysées, avec des propriétés typées telles que email_notification et wpx_comment_notification qui contiennent des métadonnées spécifiques à la notification (ID, détails de conversation, références de document).
  • NotificationTypes : énumération des types de notification pris en charge comme EMAIL_NOTIFICATION, WPX_COMMENT.
  • ChannelId : utilisez pour spécifier des canaux de notification, par exemple, ChannelId(channel="agents", sub_channel="*").
  • Autorisation : contexte d’autorisation pour le traitement des notifications.
  • TurnContext : contexte de tour de conversation actuel à partir du kit de développement logiciel des assistants.

Inscrire des gestionnaires de notification dans votre assistant

Ajouter des gestionnaires de notifications à l’initialisation de votre assistant :

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

Implémenter des gestionnaires de notification spécifiques

Ajouter des méthodes de gestionnaire pour chaque type de notification :

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

Identification de l’expéditeur

Chaque activité de notification inclut Activity.From. La plateforme A365 renseigne cette propriété avec l’identité de base de l’expéditeur ; vous n’avez donc pas besoin d’appel API ni d’acquisition de jetons. Accédez à cette propriété à l’intérieur de tout gestionnaire de notifications :

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 est une instance de la classe ChannelAccount qui possède les propriétés suivantes :

Propriété Description
name Display name
id Identifiant utilisateur du canal
aad_object_id ID d’objet Entra

Important

Le nom affiché est un texte contrôlé par l’utilisateur. Nettoyez-le (supprimez les caractères de contrôle, appliquez une longueur maximale) avant de l’injecter dans les requêtes du LLM afin de prévenir les attaques par injection de prompt.

Astuce

Utilisez aadObjectId avec l’API Microsoft Graph pour récupérer des données de profil étendues (poste, responsable, service) lorsque votre assistant dispose des autorisations appropriées.

Gestionnaires de notification spécialisés

Après avoir configuré le routage de notification de base, utilisez des méthodes de gestionnaire spécialisées pour un contrôle plus granulaire. En utilisant ces méthodes, vous pouvez :

  • Inscrivez plusieurs gestionnaires pour le même type de notification.
  • Définissez la priorité des gestionnaires à l’aide d’un classement.
  • Configurez l’authentification automatique par gestionnaire.

Remarque

Pour la plupart des cas d’usage, le modèle de gestionnaire générique est suffisant. Utilisez ces gestionnaires spécialisés lorsque vous avez besoin d’un routage avancé ou de plusieurs gestionnaires pour le même type de notification.

Gestionnaire spécialisé pour toutes les notifications

Inscrire d’autres gestionnaires qui traitent tous les types de notification :

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

Gestionnaire spécialisé pour les notifications de courrier électronique

Inscrire davantage de gestionnaires spécifiquement pour les notifications de courrier électronique :

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

Gestionnaires spécialisés pour les commentaires de documents

Inscrire davantage de gestionnaires pour les notifications de commentaires Word, Excel et 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')

Gestionnaires spécialisés pour les événements de cycle de vie

Inscrire d’autres gestionnaires pour les événements de cycle de vie de l’assistant, tels que la création d’identité d’utilisateur, l’intégration des charges de travail et la suppression des utilisateurs :

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

Configuration avancée

Cette section décrit les options de configuration avancées pour affiner vos gestionnaires de notification. Ces configurations vous permettent de contrôler l’ordre d’exécution du gestionnaire, de gérer les exigences d’authentification et d’optimiser le traitement des notifications pour les scénarios complexes.

Priorité et classement des gestionnaires

Lorsque vous utilisez plusieurs gestionnaires spécialisés, vous pouvez spécifier l’ordre de priorité à l’aide de valeurs de classement. Des valeurs de classement plus faibles indiquent une priorité plus élevée :

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

Gestionnaires d’authentification

Configurer des gestionnaires de connexion automatique pour les notifications nécessitant une authentification :

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

Exemple de code

Pour obtenir des exemples complets et fonctionnels de gestion des notifications dans tous les frameworks pris en charge, reportez-vous aux exemples Agent 365.

Tester votre assistant avec des notifications

Après avoir implémenté les gestionnaires de notifications, testez votre assistant pour vous assurer qu’il reçoit et traite correctement les différents types de notifications. Suivez le guide de test pour configurer votre environnement, puis concentrez-vous principalement sur la section Tester avec des activités de notification pour valider vos notifications à l’aide de l’authentification agentique.

Surveiller la gestion des notifications

Ajoutez des fonctionnalités d’observabilité pour surveiller la gestion des notifications de votre assistant. Suivre le traitement des notifications, les temps de réponse et les taux d’erreur pour comprendre les performances de l’assistant. En savoir plus sur l’implémentation du suivi et de la surveillance.