Teams Workflow Webhook
Teams Workflows 可创建“收到 Webhook 请求时发布到频道”的流程。本文依据 Microsoft Learn 资料整理,核验日期为 2026-09-08;未使用真实 Microsoft 365 租户执行验证。
- Microsoft 365 租户允许使用 Teams Workflows。
- 有目标团队或频道的相应权限。
- 明确工作流由哪个账号拥有,并安排共同所有者以避免离职后失效。
- 在 Teams 的 Workflows 中选择 Webhook 触发的频道发布模板。
- 选择目标团队和频道,完成连接授权。
- 保存工作流并复制生成的 Webhook URL。
- 按工作流触发器期望的架构发送 Adaptive Card 消息体。
- 在工作流运行历史中检查每一步结果。
| 字段 | 必需 | 说明 |
|---|---|---|
WORKFLOW_WEBHOOK_URL | 是 | 工作流生成的完整触发 URL,视为密钥 |
TEAM_ID / CHANNEL_ID | 配置时 | 通常在工作流动作中固定,不直接放进请求 |
JavaScript 示例需要 Node.js 20 或更新版本;Python 示例需要安装 requests。
下面是常见的 Adaptive Card 消息结构;具体字段必须与所选工作流模板的触发器定义一致:
curl -X POST "$WORKFLOW_WEBHOOK_URL" \ -H 'Content-Type: application/json' \ -d '{"type":"message","attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","contentUrl":null,"content":{"$schema":"http://adaptivecards.io/schemas/adaptive-card.json","type":"AdaptiveCard","version":"1.4","body":[{"type":"TextBlock","text":"通知渠道连通性测试","wrap":true}]}}]}'const payload = { type: 'message', attachments: [{ contentType: 'application/vnd.microsoft.card.adaptive', contentUrl: null, content: { $schema: 'http://adaptivecards.io/schemas/adaptive-card.json', type: 'AdaptiveCard', version: '1.4', body: [{ type: 'TextBlock', text: '通知渠道连通性测试', wrap: true }], }, }],};
const response = await fetch(process.env.WORKFLOW_WEBHOOK_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload),});if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);console.log(await response.text());import osimport requests
payload = { "type": "message", "attachments": [{ "contentType": "application/vnd.microsoft.card.adaptive", "contentUrl": None, "content": { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.4", "body": [{"type": "TextBlock", "text": "通知渠道连通性测试", "wrap": True}], }, }],}response = requests.post(os.environ["WORKFLOW_WEBHOOK_URL"], json=payload, timeout=15)response.raise_for_status()print(response.text)检查 HTTP 响应、工作流运行历史和目标频道消息。Webhook 受理成功但流程后续动作失败时,应以运行历史中的具体步骤为准。
- Webhook URL 只保存在服务端密钥存储中。
- 为工作流配置共同所有者,并定期检查连接身份是否仍有效。
- 限制工作流动作的频道和权限,不在卡片中发送敏感数据。
工作流未触发:检查 URL 是否完整、请求方法和 JSON 类型是否匹配。
触发成功但频道无消息:查看运行历史中的发布动作、连接授权和目标频道。
所有者离职后失效:增加共同所有者并更新连接身份。