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

MS Teams outgoing webhook无法连通Python Flask HTTPS端点求助

解决MS Teams Outgoing Webhook无法调用Python Flask HTTPS端点的问题

核心问题排查与修复步骤

1. 未完成HMAC签名验证

Teams Outgoing Webhook强制要求验证请求的HMAC签名,未验证的请求会被Teams判定为无效,直接返回错误。你的代码仅生成了签名但未执行验证逻辑,这是首要问题。

修复代码:

# 替换原验证段代码
security_token = b"1PmR9wjAFJP8U+BZiZKL6Y8hwGywVZN79riLSd8xfHE="
request_data = request.get_data()
digest = hmac.new(base64.b64decode(security_token), msg=request_data, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest).decode()

# 获取Teams请求头中的签名
teams_signature = request.headers.get('Authorization', '').split(' ')[-1]

# 严格校验签名
if signature != teams_signature:
    return jsonify({'type': 'message', 'text': '权限验证失败'}), 403

2. SSL证书不可信

Teams仅接受公共可信CA签发的SSL证书,自签名证书会被拦截。

  • 更换为Let's Encrypt等公共CA签发的证书
  • 用openssl s_client -connect 你的域名:端口命令验证证书链完整性
  • 确保证书文件包含完整的中间证书链

3. 端口配置不匹配

代码中设置的服务端口是8100,但运行日志显示服务实际在5000端口启动,导致Teams配置的Webhook地址与实际服务地址不一致。

  • 统一端口配置,修改代码或Teams的Webhook地址:
if __name__ == '__main__':
  app.run(host='0.0.0.0', debug=True, port=5000, ssl_context=('/usr/local/oracle/jey/xxxxx.crt', '/usr/local/oracle/jey/xxxx.key'))

4. 请求解析存在异常风险

直接通过data['from']['name']这类方式取值,若Teams请求缺少对应字段会抛出KeyError,导致服务返回500错误,触发Teams的报错提示。

添加异常处理:

# 替换原数据解析代码
try:
    channel = data.get('channelId', '未知频道')
    message_type = data.get('type', '未知类型')
    sender = data.get('from', {}).get('name', '未知发送者')
    message_format = data.get('textFormat', '未知格式')
    message = data.get('text', '')
except Exception as e:
    app.logger.error(f'请求数据解析失败:{str(e)}')
    return jsonify({'type': 'message', 'text': '请求格式错误'}), 400

5. 响应格式不符合要求

Teams对Webhook的响应格式有严格要求,确保返回的JSON字段规范:

return jsonify({
    'type': 'message',
    'text': f'已收到消息:{message}(来自{sender})'
})

调试技巧

  • 开启Flask详细日志,排查Teams请求的具体内容:
import logging
app.logger.setLevel(logging.INFO)
  • 使用ngrok将本地服务暴露到公网,测试完整请求流程(ngrok提供可信的HTTPS证书,可排除证书问题干扰)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:05:36