You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何返回特定JSON属性?Slack Webhook URL验证中正确返回challenge值的技术问询

解决Slack Webhook URL验证的Flask响应问题

我来帮你搞定这个Slack Webhook的验证问题!当Slack发送url_verification类型的请求时,核心要求就是把请求体里的challenge字段值原封不动返回给Slack就行。你的现有代码有两个小问题:一是缺少json模块的导入,二是没有正确提取并返回challenge值。

下面是修正后的完整可运行代码:

import os
import json  # 补充缺失的json模块导入
from flask import Flask
from flask import request
from flask import make_response

app = Flask(__name__)

@app.route('/webhook2', methods=['POST'])  # 注意:Slack的Webhook请求是POST方法,原代码只支持GET会导致请求失败
def hello_slack():    
    request_json = request.get_json(silent=True, force=True)
    
    # 针对Slack的URL验证请求,提取并返回challenge值
    if request_json.get('type') == 'url_verification':
        challenge_value = request_json['challenge']
        response = make_response(challenge_value, 200)
        response.headers['Content-Type'] = 'text/plain'
        return response
    
    # 后续如果要处理其他Slack事件(比如event_callback),可以在这里添加逻辑
    # ...
    
    # 默认返回(如果不是验证请求的情况)
    return make_response('OK', 200)

if __name__ == '__main__':    
    port = int(os.getenv('PORT', 5000))
    app.run(debug=False, port=port, host='0.0.0.0')

关键修正点说明:

  • 补充了import json,解决原代码中json.dumps未定义的错误(不过在验证场景里其实用不到json.dumps,直接返回字符串即可)
  • 给路由添加了methods=['POST']:Slack发送的Webhook请求都是POST类型,原代码只支持GET会导致请求失败
  • 增加了类型判断:通过request_json.get('type')识别验证请求,提取challenge字段作为响应体
  • 直接将challenge_value传入make_response,替代原代码中空的响应体,这样Slack就能收到正确的验证值

这样修改后,你的Flask服务就能正确响应Slack的URL验证请求啦!

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

火山引擎 最新活动