Notifiera agenter

Genom att använda aviseringsmodulen kan du skapa agenter som svarar på händelser och aviseringar från Microsoft 365-applikationer. Genom att använda notifikationsstöd kan agenter ta emot och bearbeta aviseringar när användare interagerar med dem via e-post, dokumentkommentarer eller andra samarbetssituationer.

Arbetsflöde för notifieringar

Följ detta arbetsflöde för att aktivera aviseringar i din AI-agentapplikation:

  1. Installera aviseringspaket.

  2. Importnotifieringskomponenter

    • Importera notifikationsklasser och hanterare.
    • Importera aktivitetstyper och kanalidentifierare.
  3. Registrera notifikationshanterare

    • Använd notifikationshanteringsmetoder för att registrera rutter.
    • Konfigurera hanterare för specifika notifikationstyper, såsom e-post, Word, Excel eller PowerPoint.
  4. Bearbeta aviseringar i agentkod

    • Agenten tar emot aviseringar från Microsoft 365-applikationer.
    • Hantera inkommande aviseringar och svara på rätt sätt.

Meddelandetyper

Agent 365 SDK stöder nu följande aviseringstyper:

Aviseringstyp beskrivning ID för underordnad kanal
E-post Agenten får ett mejl där de nämns eller adresseras email
Word Agenten nämns i en kommentar i ett Word-dokument word
Excel Agenten nämns i en kommentar i ett Excel-dokument excel
PowerPoint Agenten nämns i en kommentar i ett PowerPoint-dokument. powerpoint
Livscykelhändelser Agentlivscykelnotiser (användaridentitet skapad, arbetsbelastning initierad, användare borttagen) Inte tillämpligt

Agentlivscykelhändelser

Agentlivscykelhändelser gör det möjligt för din agent att reagera på specifika systemhändelser kopplade till hanteringen av agentens användaridentitet. SDK:n stöder för närvarande tre livscykelhändelser:

Händelsetyp Händelse-ID beskrivning
Användaridentitet skapad agenticUserIdentityCreated Utlöses när en agents användaridentitet skapas
Onboarding för arbetsbelastning uppdaterad agenticUserWorkloadOnboardingUpdated Utlöses när en agents arbetsbelastnings-onboardingstatus uppdateras
Användare raderad agenticUserDeleted Utlöses när en agents användaridentitet tas bort

Genom att använda dessa händelser kan agenter utföra initialiseringsuppgifter, rensningsåtgärder eller hantera tillstånd som svar på förändringar i användarens livscykel.

Referens för aviseringens nyttolast

När din agent tar emot en avisering innehåller nyttolasten strukturerad data som är specifik för typen av notifikation. Genom att förstå dessa nyttolaster kan du extrahera den information du behöver för att effektivt behandla aviseringar.

E-postnotifikationens nyttolast

När en användare skickar ett mejl till din agent eller nämner din agent i ett mejl, får din agent en e-postavisering med följande struktur:

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

Meddelandepaket för dokumentkommentarer (Word, Excel, PowerPoint)

När en användare nämner din agent i en kommentar i ett Word-, Excel- eller PowerPoint-dokument får din agent en WPX-notis (Word, PowerPoint, Excel) om kommentaren:

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

Lägga till aviseringar i agenten

Följ dessa steg för att aktivera hantering av aviseringar i din befintliga agent:

Importnotifieringskomponenter

Lägg till dessa importer i din agentfil:

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: Basklass för att skapa Agent365-applikationer. Den tillhandahåller kärnfunktionalitet för routing av aktiviteter, hantering av tillstånd och bearbetning av förfrågningar.
  • AgentNotification: Klass för registrering av aviseringshanterare med dekoratorer. Den tillhandahåller on_agent_notification(), on_email(), on_word(), och andra bekvämlighetsdekoratörer.
  • AgentNotificationActivity: Omslutning som innehåller tolkade aviseringsdata med typade egenskaper som email_notification och wpx_comment_notification som innehåller aviseringsspecifika metadata såsom ID:n, konversationsdetaljer och dokumentreferenser.
  • NotificationTypes: Uppräkning av aviseringstyper som stöds såsom EMAIL_NOTIFICATION, WPX_COMMENT.
  • ChannelId: Ange kanaler för aviseringar, till exempel ChannelId(channel="agents", sub_channel="*").
  • Auktoriseringskontext: Auktoriseringskontext för bearbetning av aviseringar.
  • TurnContext: Aktuell konversationskontext från Agents SDK.

Registrera aviseringshanterare i din agent

Lägg till aviseringshanterare vid initiering av din agent:

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

Implementera specifika notifikationshanterare

Lägg till hanteringsmetoder för varje aviseringstyp:

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

Identifiera avsändaren

Varje aviseringsaktivitet inkluderar Activity.From. A365-plattformen fyller i denna egenskap med avsändarens grundläggande identitet, så du behöver inga API-anrop eller hämta token. Du kan få åtkomst till den i en aviseringshanterare:

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 är en instans av ChannelAccount-klassen som har följande egenskaper:

Egenskap Description
name Visningsnamn
id Användar-ID för kanalen
aad_object_id Objekt-ID för Entra

Viktigt

Visningsnamnet är användarkontrollerad text. Rensa visningsnamnet (ta bort kontrolltecken, begränsa till en maximal längd) innan du matar in det i LLM-systemprompter för att förhindra promptinmatningsattacker.

Dricks

Använd aadObjectId Microsoft Graph API för att hämta utökad profildata (jobbtitel, chef, avdelning) när din agent har rätt behörigheter.

Specialiserade notifikationshanterare

Efter att ha konfigurerat grundläggande notifikationsrouting, använd specialiserade hanterarmetoder för mer granulär kontroll. Genom att använda dessa metoder kan du:

  • Registrera flera hanterare för samma notifikationstyp.
  • Ställ in prioritet för hanterare genom att använda rangordning.
  • Konfigurera automatisk autentisering för varje hanterare.

Kommentar

För de flesta användningsfall räcker det generiska hanterarmönstret. Använd dessa specialiserade hanterare när du behöver avancerad routing eller flera hanterare för samma notifikationstyp.

Specialiserad hanterare för alla aviseringar

Registrera fler hanterare som hanterar alla notifikationstyper:

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

Specialiserad hanterare för e-postaviseringar

Registrera fler hanterare specifikt för e-postnotiser:

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

Specialiserade hanterare för dokumentkommentarer

Registrera fler hanterare för Word-, Excel- och PowerPoint-kommentarsaviseringar:

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

Specialiserade hanterare för livscykelhändelser

Registrera fler hanterare för agentens livscykelhändelser, såsom skapande av användaridentitet, onboarding av arbetsuppgifter och borttagning av användare:

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

Avancerad konfiguration

Detta avsnitt behandlar avancerade konfigurationsalternativ för att finjustera dina notifikationshanterare. Genom att använda dessa konfigurationer kan du styra hanterarnas exekveringsordning, hantera autentiseringskrav och optimera hanteringen av aviseringar för komplexa scenarier.

Prioritet och rangordning för hanterare

När du använder flera specialiserade hanterare, ange prioritetsordningen med hjälp av rangvärden. Ju lägre rankvärde, desto högre prioritet:

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

Autentiseringshanterare

Konfigurera automatiska inloggningshanterare för aviseringar som kräver autentisering:

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

Exempelkod

För kompletta exempel på hantering av aviseringar för alla stödda ramverk, se Agent 365-exempel.

Testa din agent med aviseringar

När du har implementerat notifikationshanterare, testa din agent för att säkerställa att den korrekt tar emot och bearbetar olika notifikationstyper. Följ testguiden för att konfigurera din miljö och fokusera sedan i första hand på avsnittet Test med notifikationsaktiviteter för att verifiera dina aviseringar med agentbaserad autentisering.

Övervaka notifikationshantering

Implementera observabilitetsfunktioner för att övervaka agentens notifikationshantering. Följ notishantering, svarstider och felfrekvenser för att förstå agentens prestation. Läs mer om hur du implementerar spårning och övervakning.