Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dengan menggunakan Agent 365 SDK, agen Anda dapat menangani event aktivitas platform seperti pemasangan dan pencopotan, serta mengirim beberapa pesan terpisah dalam satu giliran. Artikel ini menjelaskan pola-pola penting untuk merespons pengguna dan menjaga mereka tetap mendapat informasi selama agen Anda memproses permintaan.
Menangani event instalasi dan uninstall agen
Ketika pengguna menginstal atau menghapus instalasi agen Anda di Teams atau saluran lain yang dihosting oleh Agent 365, platform akan mengirimkan aktivitas InstallationUpdate (juga disebut sebagai peristiwa agentInstanceCreated). Agen Anda dapat menangani event ini untuk mengirim pesan selamat datang saat diinstal dan pesan perpisahan saat instalasi dihapus.
| Tindakan | Deskripsi |
|---|---|
add |
Pengguna menginstal agen |
remove |
Pengguna menghapus instalasi agen |
Berbeda dengan penanganan notifikasi, penanganan InstallationUpdate tidak memerlukan autentikasi karena peristiwa instalasi atau penghapusan terjadi sebelum atau setelah sesi aktif pengguna.
Daftarkan penanganan instalasi dan penghapusan
Daftarkan penangan aktivitas untuk tipe aktivitas InstallationUpdate dalam inisialisasi agen Anda:
@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 adalah set string untuk "add" saat Anda menginstal agen atau "remove" saat Anda menghapus instalasi agen tersebut.
Activity.from_property adalah instans ChannelAccount yang berisi identitas pengguna.
Mengirim beberapa pesan
Agent 365 dapat mengirim beberapa pesan terpisah sebagai respons terhadap satu perintah pengguna. Untuk melakukan ini, panggil SendActivityAsync (.NET), send_activity (Python), atau sendActivity (JavaScript) beberapa kali dalam satu putaran.
Penting
Teams tidak mendukung respons streaming untuk identitas agentik. SDK mendeteksi identitas agen dan menyangga aliran ke dalam satu pesan. Gunakan SendActivityAsync, send_activity, atau sendActivity secara langsung untuk mengirim pesan segera dan terpisah kepada pengguna.
Contoh berikut menunjukkan pola dengan mengirimkan konfirmasi langsung sebelum respons 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)
Sampel menunjukkan pola ini dalam on_message (host_agent_server.py) dengan mengirimkan pengakuan langsung sebelum respons LLM.
Setiap panggilan ke sendActivity, send_activity, atau SendActivityAsync membuat pesan terpisah. Anda dapat memanggilnya sebanyak yang diperlukan untuk mengirim pembaruan kemajuan, hasil parsial, atau jawaban akhir.
Indikator pengetikan
Indikator pengetikan menunjukkan ... animasi kemajuan di Teams:
- Indikator ini memiliki batas waktu visual bawaan sekitar 5 detik dan itu harus di-refresh dalam perulangan sekitar setiap empat detik.
- Indikator ini hanya terlihat dalam obrolan satu lawan satu dan obrolan grup kecil, bukan di saluran.
Agen mengirim indikator pengetikan secara berulang setiap empat detik untuk menjaga animasi ... tetap aktif selama LLM memproses permintaan:
# 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