Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Genom att använda Agent 365 SDK kan din agent hantera plattformshändelser som installation och avinstallation, och skicka flera diskreta meddelanden under en och samma omgång. Den här artikeln beskriver de viktigaste metoderna för att svara användare och hålla dem informerade medan din agent behandlar förfrågningar.
Hantera installations- och avinstallationshändelser för agenten
När en användare installerar eller avinstallerar din agent i Teams eller andra kanaler som drivs av Agent 365, skickar plattformen en InstallationUpdate-aktivitet (även kallad agentInstanceCreated-händelse). Din agent kan hantera dessa händelser genom att skicka ett välkomstmeddelande när den är installerad och ett avskedsmeddelande när den avinstalleras.
| Åtgärd | beskrivning |
|---|---|
add |
Användaren installerar agenten |
remove |
Användaren avinstallerar agenten |
Till skillnad från notifikationshanterare kräver InstallationUpdate-hanteraren ingen autentisering eftersom installations- eller avinstallationshändelsen sker före eller efter att användaren har en engagerad session.
Registrera installations- och avinstallationshanteraren
Registrera en aktivitetshanterare för aktivitetstypen InstallationUpdate i din agents initialisering:
@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 är en sträng inställd på "add" när du installerar agenten eller "remove" när du avinstallerar den.
Activity.from_property är en instans av ChannelAccount som innehåller användarens identitet.
Skicka flera meddelanden
Agent 365-agenter kan skicka flera separata meddelanden som svar på en enda användarprompt. För att göra detta, anropa SendActivityAsync (.NET), send_activity (Python) eller sendActivity (JavaScript) flera gånger inom samma omgång.
Viktigt
Teams stöder inte strömmande svar för agentiska identiteter. SDK:n upptäcker agentisk identitet och buffrar strömmen till ett enda meddelande. Använd SendActivityAsync, send_activity eller sendActivity direkt för att skicka omedelbara, diskreta meddelanden till användaren.
Följande exempel visar mönstret genom att skicka en omedelbar bekräftelse före LLM-svaret:
@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)
Exemplet demonstrerar detta mönster i on_message (host_agent_server.py) genom att skicka en omedelbar bekräftelse före LLM-svaret.
Varje anrop till sendActivity, send_activity eller SendActivityAsync skapar ett separat meddelande. Du kan anropa den så många gånger du behöver för att skicka framstegsuppdateringar, delresultat eller ett slutgiltigt svar.
Skrivindikatorer
Skrivindikatorer visar en ... framstegsanimation i Teams:
- De har en inbyggd visuell timeout på cirka 5 sekunder och den måste uppdateras i en loop ungefär var fjärde sekund.
- De syns bara i enskilda chattar och små gruppchattar, inte i kanaler.
Agenten skickar typindikatorer upprepade gånger, ungefär var fjärde sekund, för att hålla ...-animationen aktiv medan LLM bearbetar förfrågan:
# 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