You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取正确serviceUrl?实现Teams Bot通过REST API发单聊消息

解决方案

方案一:直接使用Microsoft Graph API完成消息发送(推荐)

无需依赖Bot Framework的REST API,直接通过Microsoft Graph即可创建Bot与用户的一对一聊天并发送提醒消息,全程无需处理serviceUrl:

  1. 创建一对一聊天
    调用POST /chats接口,请求体指定聊天类型为oneOnOne,并添加目标用户和你的Bot为成员:
{
  "chatType": "oneOnOne",
  "members": [
    {
      "@odata.type": "#microsoft.graph.aadUserConversationMember",
      "roles": ["owner"],
      "user@odata.bind": "https://graph.microsoft.com/v1.0/users('{目标用户ID}')"
    },
    {
      "@odata.type": "#microsoft.graph.botConversationMember",
      "roles": ["owner"],
      "bot@odata.bind": "https://graph.microsoft.com/v1.0/bots('{你的Bot ID}')"
    }
  ]
}

接口返回的chat对象包含唯一id(聊天ID),后续发送消息会用到。

  1. 发送提醒消息
    调用POST /chats/{聊天ID}/messages接口,构造带专属链接的消息内容:
{
  "body": {
    "contentType": "html",
    "content": "这是您的专属提醒:<a href='{你的专属链接}'>点击查看详情</a>"
  },
  "from": {
    "application": {
      "id": "{你的Bot ID}"
    }
  }
}
  1. 所需权限
    需为Azure应用申请应用权限(而非委托权限),并由租户管理员同意:
  • Chat.Create:用于创建一对一聊天
  • ChatMessage.Send:用于发送消息

方案二:自动获取serviceUrl用于Bot Framework API调用

若坚持使用Bot Framework的REST API,可通过以下步骤动态获取有效serviceUrl:

  1. 获取租户级serviceUrl
    调用GET /bots/{你的Bot ID}/installedApps接口,返回的每个teamsAppInstallation对象中包含的serviceUrl,即为该租户对应的Bot服务端点。

  2. 获取用户聊天专属serviceUrl(更精准)
    先通过Graph创建Bot与目标用户的一对一聊天(同方案一第一步),返回的chat对象中的serviceUrl字段,是该聊天对应的专属服务端点,适配性更强。

  3. 发送消息的Bot Framework API调用
    拿到有效serviceUrl后,调用POST {serviceUrl}/v3/conversations/{聊天ID}/activities发送消息,请求体示例:

{
  "type": "message",
  "text": "这是您的专属提醒:{你的专属链接}",
  "from": {
    "id": "{你的Bot ID}"
  },
  "recipient": {
    "id": "{目标用户ID}"
  }
}

注意事项

  • 两种方案均使用应用权限,适配后台定时任务的无交互场景;
  • 无需Bot持续在线,所有操作通过API后台完成;
  • 动态获取serviceUrl可避免硬编码带来的租户适配问题。

内容的提问来源于stack exchange,提问作者brakeley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:33:20