Agenteille ilmoittaminen

Ilmoitusmoduulin avulla voidaan kehittää agentteja, jotka vastaavat Microsoft 365 -sovelluksista peräisin oleviin tapahtumiin ja ilmoituksiin. Ilmoitustuen avulla agentit voivat vastaanottaa ja käsitellä hälytyksiä, kun käyttäjät käyttävät agentteja sähköpostitse, asiakirjojen kommenteissa tai muissa yhteistyöskenaarioissa.

Ilmoitustyönkulku

Tekoälyagenttisovelluksen ilmoitukset otetaan käyttöön seuraavan työnkulun mukaisesti:

  1. Ilmoituspakettien asennus.

  2. Ilmoituskomponenttien tuonti

    • Ilmoitusluokkien ja käsittelijöiden tuonti.
    • Aktiviteettityyppien ja kanavatunnisteiden tuonti.
  3. Ilmoitusten käsittelijöiden rekisteröinti

    • Reittien rekisteröinti ilmoitusten käsittelijämenetelmien avulla.
    • Ilmoitustyyppien, kuten sähköposti, Word, Excel tai PowerPoint, käsittelijöiden määritys.
  4. Ilmoitusten käsittely agenttikoodissa

    • Agentti vastaanottaa ilmoituksia Microsoft 365 -sovelluksista.
    • Saapuvat ilmoitukset käsitellään ja vastataan asianmukaisesti.

Ilmoitustyypit

Agent 365 SDK tukee seuraavia ilmoitustyyppejä:

Ilmoituksen tyyppi Description Alikanavan tunnus
Sähköposti Agentti saa sähköpostiviestin, jossa se mainitaan, tai viesti on osoitettu agentille. email
Word Agentti mainitaan Word-asiakirjan kommentissa word
Excel Agentti mainitaan Excel-tiedoston kommentissa excel
PowerPoint Agentti mainitaan PowerPoint-tiedoston kommentissa powerpoint
Elinkaaren tapahtumat Agentin elinkaari-ilmoitukset (käyttäjätiedot luotu, työkuorma otettu käyttöön, käyttäjä poistettu) Ei käytettävissä

Agentin elinkaaritapahtumat

Agentin elinkaaritapahtumat antavat agentille mahdollisuuden reagoida tiettyihin agentin käyttäjätunnuksen hallintaan liittyviin järjestelmätapahtumiin. SDK tukee tällä hetkellä kolmea elinkaaritapahtumaa:

Tapahtumatyyppi Tapahtumatunnus Description
Käyttäjätiedot luotu agenticUserIdentityCreated Käynnistyy, kun agentin käyttäjätiedot luodaan
Työkuorman käyttöönotto päivitetty agenticUserWorkloadOnboardingUpdated Käynnistyy, kun agentin käyttäjän työkuorman käyttöönottotila päivitetään
Käyttäjä poistettu agenticUserDeleted Käynnistyy, kun agentin käyttäjätiedot poistetaan

Agentit voivat suorittaa näiden tapahtumien avulla alustustehtäviä, puhdistustoimenpiteitä tai tilanhallintaa vastauksena käyttäjän elinkaaren muutoksiin.

Ilmoituksen tietoviittaus

Kun agenttisi saa ilmoituksen, tiedot sisältävät ilmoitustyypin mukaista jäsennettyä tietoa. Näiden tietojen ymmärtäminen auttaa sinua poimimaan tiedot, joita tarvitaan ilmoitusten tehokkaaseen käsittelyyn.

Sähköposti-ilmoituksen tiedot

Kun käyttäjä lähettää sähköpostin agentille tai mainitsee agentin sähköpostissa, agenttisi saa sähköposti-ilmoituksen, jonka rakenne seuraavanlainen:

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

Asiakirjan kommentti-ilmoituksen tiedot (Word, Excel, PowerPoint)

Kun käyttäjä mainitsee agentin Word-, Excel- tai PowerPoint-asiakirjan kommentissa, agentti saa WPX (Word, PowerPoint, Excel) -kommentti-ilmoituksen:

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

Ilmoitusten lisääminen agenttiin

Ota ilmoituksen käsittely käyttöön aiemmin luodussa agentissa seuraavasti:

Ilmoituskomponenttien tuonti

Lisää seuraavat tuonnit agenttitiedostooni:

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: Agent365-sovellusten kehittämisen perusluokka. Sen avulla saadaan aktiviteettien reitityksen, tilan hallinnan ja pyyntöjen käsittelyn perustoiminnot.
  • AgentNotification: Luokka, jolla ilmoituskäsittelijöitä rekisteröidään somistemenetelmillä. Sen sisältönä on on_agent_notification(), on_email(), on_word() ja muita käteviä somisteita.
  • AgentNotificationActivity: Paketoija sisältää jäsennetyt ilmoitustiedot ja tyypitetyt ominaisuudet, kuten email_notification ja wpx_comment_notification. Ne puolestaan sisältävät ilmoitukseen liittyviä metatietoja, kuten tunnisteita, keskustelutietoja ja asiakirjaviittauksia.
  • NotificationTypes: tuettujen ilmoitustyyppien, kuten EMAIL_NOTIFICATION, WPX_COMMENT, luetteloinnin.
  • ChannelId: käytetään ilmoituskanavien määrittämiseen, esimerkiksi ChannelId(channel="agents", sub_channel="*").
  • Authorization: ilmoitusten käsittelyn valtuutuskonteksti.
  • TurnContext: nykyisen keskusteluvuoron konteksti Agentti SDK:sta.

Ilmoitusten käsittelijöiden rekisteröinti agenttiin

Lisää ilmoitusten käsittelijät agentin alustukseen:

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

Tiettyjen ilmoitusten käsittelijöiden toteuttaminen

Lisää käsittelijämenetelmät kuhunkin ilmoitustyyppiin:

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

Lähettäjän tunnistaminen

Jokaiseen ilmoitusaktiviteettiin sisältyy Activity.From. A365-ympäristö täyttää tähän ominaisuuteen lähettäjän peruskäyttäjätiedot, joten ohjelmointirajapintakutsuja tai tunnuksen hakemista ei tarvita. Käyttö on mahdollista missä tahansa ilmoituksen käsittelijässä:

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 on ChannelAccount-luokan esiintymä, jolla on seuraavat ominaisuudet:

Ominaisuus Description
name Näyttönimi
id Kanavan käyttäjätunnus
aad_object_id Entra-objektin tunnus

Tärkeää

Näyttönimi on käyttäjän hallitsema teksti. Estä kehotteen injektiohyökkäykset siistimällä näyttönimi (poista ohjausmerkit, rajaa maksimipituuteen) ennen LLM-järjestelmän kehotteisiin syöttämistä.

Vinkki

Nouda laajennetut profiilitiedot (työnimike, esihenkilö, osasto) käyttämällä aadObjectId-ominaisuutta yhdessä Microsoft Graph API:n kanssa, kun agentilla soveltuvat oikeudet.

Erikoistuneet ilmoitusten käsittelijät

Kun ilmoitusten perusreititys on määritetty, käytä erikoistuneita käsittelijämenetelmiä, kun haluat tarkkarajaista hallintaa. Näiden menetelmien käyttö mahdollistaa seuraavat:

  • Useiden saman ilmoitustyypin käsittelijöiden rekisteröinti.
  • Käsittelijän prioriteetin määrittäminen luokittelun avulla.
  • Automaattinen todennuksen määrittäminen kullekin käsittelijälle.

Muistiinpano

Useimmissa käyttötapauksissa yleinen käsittelijämalli on riittävä. Käytä näitä erikoistuneita käsittelijöitä, kun tarvitset reitityksen lisäasetuksia tai useita saman ilmoitustyypin käsittelijöitä.

Kaikkien ilmoitusten käsittelyyn erikoistunut käsittelijä

Rekisteröi lisää kaikkia ilmoitustyyppejä käsitteleviä käsittelijöitä:

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

Sähköposti-ilmoituksiin erikoistunut käsittelijä

Rekisteröi lisää sähköposti-ilmoituksiin erikoistuneita käsittelijöitä:

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

Asiakirjojen kommentteihin erikoistuneet käsittelijät

Rekisteröi lisää Wordin, Excelin ja PowerPointin kommentti-ilmoituksiin erikoistuneita käsittelijöitä:

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

Elinkaaritapahtumiin erikoistuneet käsittelijät

Rekisteröi lisää agentin elinkaaritapahtumiin, kuten käyttäjätietojen luontiin, työkuorman käyttöönottoon ja käyttäjän poistoon, erikoistuneita käsittelijöitä:

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

Lisämääritykset

Tässä osiossa käsitellään ilmoituskäsittelijöiden tarkentamiseen tarkoitettuja määritysten lisäasetuksia. Näiden määritysten avulla voit hallita käsittelijöiden suoritusjärjestystä ja todennusvaatimuksia sekä optimoida ilmoitusten käsittelyä monimutkaisissa skenaarioissa.

Käsittelijän prioriteetti ja luokittelu

Jos käytät useita erikoistuneita käsittelijöitä, määritä prioriteettijärjestys luokitteluarvojen avulla. Mitä pienempi luokitteluarvo on, sitä korkeampi on prioriteetti:

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

Todennuksen käsittelijät

Määritä automaattinen kirjautuminen sellaisten ilmoitusten käsittelijöille, joissa edellytetään todennusta:

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

Näytekoodi

Täydellisiä käytännön esimerkkejä ilmoitusten käsittelystä kaikissa tuetuissa kehyksissä on kohdassa Agent 365 -esimerkit.

Ilmoituksia sisältävien agenttien testaus

Testaa agentti ilmoituskäsittelijöiden toteutuksen jälkeen ja varmista, että erilaiset ilmoitustyypit vastaanotetaan ja käsitellään oikein. Määritä ympäristö testausoppaan mukaisesti ja keskity sen jälkeen ensisijaisesti Testaus ilmoitusaktiviteettien avulla -osioon, kun tarkistat ilmoitukset agenttipohjaisen todennuksen avulla.

Ilmoitusten käsittelyn valvonta

Lisää havaittavuusominaisuuksia agentin ilmoitusten käsittelyn valvontaa varten. Hahmota agentin suorituskyky seuraamalla ilmoitusten käsittelyä, vasteaikoja ja virheiden esiintyvyyttä. Lue lisää jäljityksen ja seurannan toteuttamisesta.