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 modul Notifikasi, Anda dapat membuat agen yang merespons peristiwa dan notifikasi dari aplikasi Microsoft 365. Dengan menggunakan fitur pemberitahuan, agen dapat menerima dan memproses peringatan saat pengguna berinteraksi dengan mereka melalui email, komentar dokumen, atau skenario kolaboratif lainnya.
Alur kerja pemberitahuan
Ikuti alur kerja ini untuk mengaktifkan pemberitahuan pada aplikasi agen AI Anda:
Impor komponen pemberitahuan
- Impor kelas dan handler pemberitahuan.
- Impor jenis aktivitas dan ID saluran.
Mendaftarkan handler pemberitahuan
- Gunakan metode handler pemberitahuan untuk mendaftarkan rute.
- Konfigurasikan handler untuk jenis pemberitahuan tertentu, seperti email, Word, Excel, atau PowerPoint.
Memproses pemberitahuan dalam kode agen
- Agen menerima pemberitahuan dari aplikasi Microsoft 365.
- Tangani pemberitahuan yang masuk dan berikan respons yang sesuai.
Jenis Pemberitahuan
SDK Agent 365 mendukung jenis pemberitahuan berikut:
| Jenis pemberitahuan | Deskripsi | ID Sub-Saluran |
|---|---|---|
| Agen menerima email ketika mereka disebutkan atau ditujukan kepada mereka | email |
|
| Word | Agen disebutkan dalam komentar di dokumen Word | word |
| Excel | Agen disebutkan dalam komentar di dokumen Excel | excel |
| PowerPoint | Agen disebutkan dalam komentar di dokumen PowerPoint | powerpoint |
| Peristiwa Siklus Hidup | Pemberitahuan siklus hidup agen (identitas pengguna dibuat, onboarding beban kerja, pengguna dihapus) | Tidak Tersedia |
Peristiwa siklus hidup agen
Peristiwa siklus hidup agen memungkinkan agen Anda merespons peristiwa sistem tertentu yang terkait dengan manajemen identitas pengguna agen. SDK saat ini mendukung tiga peristiwa siklus hidup:
| Jenis peristiwa | ID Peristiwa | Deskripsi |
|---|---|---|
| Identitas Pengguna Dibuat | agenticUserIdentityCreated |
Dipicu ketika identitas pengguna agen dibuat |
| Onboarding Beban Kerja Diperbarui | agenticUserWorkloadOnboardingUpdated |
Dipicu ketika status onboarding beban kerja pengguna agen diperbarui |
| Pengguna Dihapus | agenticUserDeleted |
Dipicu ketika identitas pengguna agen dihapus |
Dengan memanfaatkan peristiwa ini, agen dapat melakukan tugas inisialisasi, operasi pembersihan, atau pengelolaan status sebagai respons terhadap perubahan siklus hidup pengguna.
Referensi payload pemberitahuan
Saat agen Anda menerima pemberitahuan, payload berisi data terstruktur yang khusus untuk jenis pemberitahuan. Memahami payload ini membantu Anda mengekstrak informasi yang Anda butuhkan untuk memproses pemberitahuan secara efektif.
Payload pemberitahuan email
Saat pengguna mengirim email ke agen Anda atau menyebut agen Anda dalam email, agen Anda akan menerima pemberitahuan email dengan struktur berikut:
{
"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>"
}
]
}
Payload pemberitahuan komentar dokumen (Word, Excel, PowerPoint)
Ketika seorang pengguna menyebut agen Anda dalam komentar di dokumen Word, Excel, atau PowerPoint, agen Anda akan menerima pemberitahuan komentar WPX (Word, PowerPoint, Excel):
{
"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"
}
]
}
Menambahkan pemberitahuan ke agen Anda
Ikuti langkah-langkah berikut untuk mengaktifkan penanganan pemberitahuan di agen yang ada:
Impor komponen pemberitahuan
Tambahkan impor ini ke file agen Anda:
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: Kelas dasar untuk membangun aplikasi Agent365. Ini menyediakan fungsionalitas inti untuk perutean aktivitas, mengelola status, dan memproses permintaan.
-
AgentNotification: Kelas untuk mendaftarkan handler pemberitahuan dengan metode dekorator. Ini menyediakan
on_agent_notification(),on_email(),on_word(), dan dekorator kenyamanan lainnya. -
AgentNotificationActivity: Pembungkus yang berisi data pemberitahuan yang telah diurai dengan properti bertipe seperti
email_notificationandwpx_comment_notificationyang berisi metadata khusus pemberitahuan seperti ID, detail percakapan, dan referensi dokumen. -
NotificationTypes: Enumerasi tipe pemberitahuan yang didukung seperti
EMAIL_NOTIFICATION,WPX_COMMENT. -
ChannelId: Gunakan untuk menentukan saluran pemberitahuan, misalnya,
ChannelId(channel="agents", sub_channel="*"). - Otorisasi: Konteks otorisasi untuk memproses pemberitahuan.
- TurnContext: Konteks giliran percakapan saat ini dari Agents SDK.
Mendaftarkan handler pemberitahuan kepada agen Anda
Tambahkan handler pemberitahuan ke inisialisasi agen Anda:
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.')
Mengimplementasikan handler pemberitahuan spesifik
Tambahkan metode handler untuk setiap jenis pemberitahuan:
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
Identifikasi pengirim
Setiap aktivitas pemberitahuan memuat Activity.From. Platform A365 mengisi properti ini dengan identitas dasar pengirim, sehingga Anda tidak perlu melakukan panggilan API atau memperoleh token apa pun. Akseslah dalam handler pemberitahuan apa pun:
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 adalah instans ChannelAccount class yang memiliki properti berikut:
| Properti | Deskripsi |
|---|---|
name |
Nama tampilan |
id |
ID pengguna saluran |
aad_object_id |
ID Objek Entra |
Penting
Nama tampilan adalah teks yang dikendalikan pengguna. Hapus (karakter kontrol strip, dan batasi panjang maksimum) sebelum memasukkannya ke perintah sistem LLM untuk mencegah serangan injeksi perintah.
Kiat
Gunakan aadObjectId dengan Microsoft Graph API untuk mengambil data profil yang diperluas (jabatan, manajer, departemen) saat agen Anda memiliki izin yang sesuai.
Penanganan pemberitahuan khusus
Setelah menyiapkan perutean pemberitahuan dasar, gunakan metode handler khusus untuk kontrol yang lebih mendetail. Menggunakan metode ini, Anda dapat:
- Mendaftarkan beberapa handler untuk jenis pemberitahuan yang sama.
- Menetapkan prioritas handler menggunakan peringkat.
- Mengonfigurasikan autentikasi otomatis untuk setiap handler.
Catatan
Untuk sebagian besar kasus penggunaan, pola handler generik sudah cukup. Gunakan handler khusus ini saat Anda memerlukan perutean tingkat lanjut atau beberapa handler untuk jenis pemberitahuan yang sama.
Handler khusus untuk semua pemberitahuan
Mendaftarkan lebih banyak handler yang memproses semua jenis pemberitahuan:
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}")
Handler khusus untuk pemberitahuan email
Daftarkan handler khusus tambahan untuk pemberitahuan email:
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!')
Handler khusus untuk komentar dokumen
Daftarkan lebih banyak handler untuk pemberitahuan komentar Word, Excel, dan PowerPoint:
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')
Handler khusus untuk peristiwa siklus hidup
Daftarkan lebih banyak handler untuk peristiwa siklus hidup agen, seperti pembuatan identitas pengguna, onboarding beban kerja, dan penghapusan pengguna:
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')
Konfigurasi tingkat lanjut
Bagian ini membahas opsi konfigurasi tingkat lanjut untuk mengatur secara lebih rinci handler pemberitahuan Anda. Dengan menggunakan konfigurasi ini, Anda dapat mengontrol urutan eksekusi handler, mengelola persyaratan autentikasi, dan mengoptimalkan proses pemberitahuan untuk skenario yang kompleks.
Prioritas dan peringkat handler
Saat Anda menggunakan beberapa handler khusus, tentukan urutan prioritas menggunakan nilai peringkat. Nilai peringkat yang lebih rendah menunjukkan prioritas yang lebih tinggi.
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
Handler autentikasi
Konfigurasikan handler masuk otomatis untuk pemberitahuan yang memerlukan autentikasi:
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
Kode Sampel
Untuk contoh lengkap penanganan pemberitahuan di semua kerangka kerja yang didukung, lihat Sampel Agent 365.
Menguji agen Anda dengan pemberitahuan
Setelah mengimplementasikan handler pemberitahuan, uji agen Anda untuk memastikan bahwa agen menerima dan memproses berbagai tipe pemberitahuan dengan benar. Ikuti menguji panduan untuk menyiapkan lingkungan Anda, lalu fokuskan terutama pada bagian Uji dengan aktivitas pemberitahuan untuk memvalidasi pemberitahuan Anda menggunakan autentikasi agenik.
Memantau penanganan pemberitahuan
Tambahkan kemampuan observabilitas untuk memantau penanganan pemberitahuan agen Anda. Lacak pemrosesan pemberitahuan, waktu respons, dan tingkat kesalahan untuk memahami performa agen. Pelajari lebih lanjut cara menerapkan pelacakan dan pemantauan.