Χειρισμός μηνυμάτων

Χρησιμοποιώντας το Agent 365 SDK, ο παράγοντας σας μπορεί να διαχειρίζεται συμβάντα δραστηριότητας πλατφόρμας όπως εγκατάσταση και απεγκατάσταση, και να αποστέλλει πολλαπλά διακριτά μηνύματα μέσα σε έναν μόνο κύκλο επικοινωνίας. Το άρθρο αυτό καλύπτει τα βασικά πρότυπα για την ανταπόκριση στους χρήστες και την ενημέρωσή τους, ενώ ο παράγοντας σας επεξεργάζεται αιτήματα.

Χειριστείτε τα συμβάντα εγκατάστασης και απεγκατάστασης του παράγοντα

Όταν ένας χρήστης εγκαθιστά ή απεγκαθιστά τον παράγοντα σας στο Teams ή σε άλλα κανάλια που φιλοξενούνται στο Agent 365, η πλατφόρμα στέλνει μια InstallationUpdate δραστηριότητα (αναφέρεται επίσης ως συμβάν agentInstanceCreated). Ο παράγοντας σας μπορεί να διαχειριστεί αυτά τα συμβάντα ώστε να στέλνει μήνυμα καλωσορίσματος κατά την εγκατάσταση και αποχαιρετιστήριο μήνυμα κατά την απεγκατάσταση.

Ενέργεια Περιγραφή
add Ο χρήστης εγκαθιστά τον παράγοντας
remove Ο χρήστης απεγκαθιστά τον παράγοντα

Σε αντίθεση με τους χειριστές ειδοποιήσεων, ο χειριστής InstallationUpdate δεν απαιτεί έλεγχο ταυτότητας, επειδή το συμβάν εγκατάστασης ή απεγκατάστασης ενεργοποιείται πριν ή μετά την ενεργή συνεδρία του χρήστη.

Καταχωρήστε τον χειριστή εγκατάστασης και απεγκατάστασης

Καταχωρήστε έναν χειριστή δραστηριότητας για τον τύπο δραστηριότητας InstallationUpdate στην αρχικοποίηση του παράγοντα σας:

@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 είναι ένα σύνολο συμβολοσειρών για να "add" όταν εγκαθιστάτε τον παράγοντα ή "remove" όταν τον απεγκαθιστάτε. Activity.from_property είναι ένα αντικείμενο ChannelAccount που περιέχει την ταυτότητα του χρήστη.

Αποστολή πολλαπλών μηνυμάτων

Οι παράγοντες του Agent 365 μπορούν να στείλουν πολλαπλά διακριτά μηνύματα ως απάντηση σε μία μόνο προτροπή χρήστη. Για να το κάνετε αυτό, καλέστε SendActivityAsync (.NET), send_activity (Python) ή sendActivity (JavaScript) πολλές φορές μέσα σε μία μόνο στροφή.

Σημαντικό

Το Teams δεν υποστηρίζει απαντήσεις ροής για ταυτότητες παράγοντα. Το SDK ανιχνεύει την ταυτότητα παράγοντα και συγκεντρώνει τη ροή σε ένα μόνο μήνυμα. Χρησιμοποιήστε το SendActivityAsync, το send_activity ή το sendActivity απευθείας για να στείλετε άμεσα, ξεχωριστά μηνύματα στον χρήστη.

Τα παρακάτω παραδείγματα παρουσιάζουν το μοτίβο στέλνοντας μια άμεση επιβεβαίωση πριν από την απάντηση LLM:

@agent_app.activity("message")
async def on_message(context: TurnContext, state: TurnState):
    # Message 1: immediate ack — reaches the user right away
    await context.send_activity("Got it — working on it…")

    # ... LLM processing ...

    # Message 2: the LLM response
    await context.send_activity(response)

Το δείγμα δείχνει αυτό το μοτίβο στο on_message (host_agent_server.py) στέλνοντας μια άμεση επιβεβαίωση πριν από την απάντηση LLM.

Κάθε κλήση στα sendActivity, send_activity ή SendActivityAsync δημιουργεί ένα ξεχωριστό μήνυμα. Μπορείτε να το καλέσετε όσες φορές χρειάζεται για να στείλετε ενημερώσεις προόδου, ενδιάμεσα αποτελέσματα ή την τελική απάντηση.

Δείκτες πληκτρολόγησης

Οι ενδείξεις πληκτρολόγησης εμφανίζουν μια κινούμενη εικόνα προόδου ... στο Teams:

  • Έχουν ενσωματωμένο οπτικό χρονικό όριο περίπου 5 δευτερολέπτων και αυτό πρέπει να ανανεώνεται σε βρόχο περίπου κάθε τέσσερα δευτερόλεπτα.
  • Είναι ορατά μόνο σε συνομιλίες ένας προς έναν και μικρές ομαδικές συνομιλίες, όχι σε κανάλια.

Ο παράγοντας στέλνει δείκτες πληκτρολόγησης σε βρόχο κάθε τέσσερα δευτερόλεπτα για να διατηρήσει ζωντανή την κινούμενη εικόνα ...ενώ το LLM επεξεργάζεται το αίτημα:

# Message 1: immediate ack — reaches the user right away
await context.send_activity("Got it — working on it…")

# Send typing indicator immediately (awaited so it arrives before the LLM call starts).
await context.send_activity(Activity(type="typing"))

# Background loop refreshes the "..." animation every ~4s (it times out after ~5s).
async def _typing_loop():
    try:
        while True:
            await asyncio.sleep(4)
            await context.send_activity(Activity(type="typing"))
    except asyncio.CancelledError:
        pass  # Expected on cancel.

typing_task = asyncio.create_task(_typing_loop())
try:
    response = await agent.process_user_message(...)
    await context.send_activity(response)
finally:
    typing_task.cancel()
    try:
        await typing_task
    except asyncio.CancelledError:
        pass