如何从Azure Function向Teams上的Bot Framework Composer v2.1机器人发消息?
解决方案
你可以通过Bot Framework REST API实现Azure Function向Teams机器人发送消息,无需依赖DirectLine,具体步骤如下:
1. 准备必要的凭据与信息
- 从Azure Bot资源的“配置”页面获取:
- 机器人的Microsoft App ID和App Password
- 机器人的消息端点(格式示例:
https://<bot-resource-name>.azurewebsites.net/api/messages)
- 在用户与机器人交互时,将对话上下文信息保存到数据库或存储服务中,供Azure Function后续调用:
conversationId:对话ID,可通过turnContext.Activity.Conversation.Id获取userId:用户ID,可通过turnContext.Activity.From.Id获取tenantId:Teams租户ID,可通过turnContext.Activity.Conversation.TenantId获取
2. 实现消息发送流程
步骤1:获取Bot Framework OAuth令牌
向微软身份认证端点发送POST请求,获取访问令牌:
POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&client_id=<你的机器人App ID>&client_secret=<你的机器人App Password>&scope=https://api.botframework.com/.default
返回结果中的access_token即为后续API调用所需的令牌。
步骤2:调用Send Activity API发送消息
向Teams的Bot服务端点发送POST请求,构造消息内容:
POST https://smba.trafficmanager.net/apis/v3/conversations/<conversationId>/activities Authorization: Bearer <获取到的access_token> Content-Type: application/json { "type": "message", "from": { "id": "<机器人App ID>", "name": "<机器人显示名称>" }, "conversation": { "id": "<conversationId>", "tenantId": "<tenantId>" }, "recipient": { "id": "<userId>" }, "text": "任务处理已完成!" }
3. 关键注意事项
- 确保Azure Function能访问上述API,无需额外Azure AD角色权限,仅需正确的机器人App ID和密码。
- 对话上下文信息(如
conversationId、userId)需妥善存储,避免数据泄露。 - 若为群聊场景,可调整
recipient字段为群聊ID,或在text中添加@<用户ID>格式实现@特定用户的效果。
内容的提问来源于stack exchange,提问作者Ibrahim Shah
相关产品推荐
相关产品推荐

