创建Teams聊天消息订阅时遭遇ExtensionError错误求助
问题分析与解决方案
核心问题
你遇到的ExtensionError(提示“Specified method is not supported”)是因为**/me/chats这个资源路径不支持创建订阅**。Microsoft Graph的订阅API仅允许对特定的可订阅资源创建通知,而/me/chats是用于获取聊天列表的端点,不属于可订阅的消息类资源。
解决方案
要捕获Teams聊天消息的通知,需要根据你的权限类型(委派/应用)选择正确的资源路径:
1. 委派权限(当前用户上下文)
如果是在当前用户的上下文下操作,需要先获取用户参与的所有聊天ID,再为每个聊天单独创建订阅,资源路径格式为:/me/chats/{chat-id}/messages
修正后的请求体示例:
{ "changeType": "created", "notificationUrl": "https://teams.execute-api.us-east-1.amazonaws.com/dev/notification-listener", "lifecycleNotificationUrl": "https://teams.execute-api.us-east-1.amazonaws.com/dev/lifecycle-notification-listener", "resource": "/me/chats/19:xxxxxx@thread.v2/messages", "expirationDateTime": "2024-12-05T22:00:00Z", "clientState": "secretClientState", "latestSupportedTlsVersion": "v1_2" }
操作步骤:
- 调用
GET /me/chats获取用户所有参与的聊天ID集合 - 遍历每个chatId,创建对应的订阅
2. 应用权限(租户全局上下文)
如果需要捕获租户内所有聊天的消息,可使用应用权限,资源路径为:/chats/messages
此方式需要授予应用权限ChatMessage.Read.All,请求体示例:
{ "changeType": "created", "notificationUrl": "https://teams.execute-api.us-east-1.amazonaws.com/dev/notification-listener", "lifecycleNotificationUrl": "https://teams.execute-api.us-east-1.amazonaws.com/dev/lifecycle-notification-listener", "resource": "/chats/messages", "expirationDateTime": "2024-12-05T22:00:00Z", "clientState": "secretClientState", "latestSupportedTlsVersion": "v1_2" }
额外检查项
- 确保
notificationUrl能正确响应Graph的订阅验证请求:当创建订阅时,Graph会向该URL发送包含validationToken的GET请求,需直接返回该token作为响应。 - 确认已授予正确的权限:委派权限需
ChatMessage.Read,应用权限需ChatMessage.Read.All,且应用权限已完成管理员同意。
内容的提问来源于stack exchange,提问作者Lucca Toledo
相关产品推荐
相关产品推荐

