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

如何用Python Flask/Django处理The Things Stack webhook发往本地的JSON POST请求

问题解决方法

错误原因

  • 405状态码是因为Flask路由默认仅支持GET请求,没有显式声明允许POST方法
  • 当前代码没有适配The Things Stack的webhook路径,也没有JSON解析逻辑
  • 注意核对你The Things Stack后台配置的webhook路径:你之前标注的规则是上行消息走/uplink-message、入网确认走/join-accept,但当前收到的请求路径是/uplink-enabled,请先确认后台配置的路径是否正确

修改后可直接使用的Flask代码

from flask import Flask, request, jsonify

app = Flask(__name__)

# 适配上行消息路径,同时允许GET(测试用)和POST请求
@app.route('/uplink-message', methods=['GET', 'POST'])
def handle_uplink():
    if request.method == 'POST':
        # 解析请求中的JSON数据
        request_data = request.get_json()
        # 控制台打印完整JSON数据,方便调试
        print("收到上行消息,JSON内容如下:")
        print(request_data)
        # 返回200状态码和响应,告诉The Things Stack接收成功
        return jsonify({"status": "success", "message": "uplink received"}), 200
    # GET请求用于快速测试服务是否正常
    return "上行消息接口正常运行", 200

# 适配入网确认路径
@app.route('/join-accept', methods=['GET', 'POST'])
def handle_join_accept():
    if request.method == 'POST':
        request_data = request.get_json()
        print("收到入网确认消息,JSON内容如下:")
        print(request_data)
        return jsonify({"status": "success", "message": "join accept received"}), 200
    return "入网确认接口正常运行", 200

# 如果确实需要/uplink-enabled路径,添加对应路由即可
@app.route('/uplink-enabled', methods=['GET', 'POST'])
def handle_uplink_enabled():
    if request.method == 'POST':
        request_data = request.get_json()
        print("收到/uplink-enabled请求,JSON内容如下:")
        print(request_data)
        return jsonify({"status": "success"}), 200
    return "/uplink-enabled接口正常运行", 200

if __name__ == '__main__':
    # 监听所有网卡的80端口,确保ngrok可以访问到
    app.run(debug=True, host='0.0.0.0', port=80)

配置验证要点

  • 运行代码前确保80端口没有被其他程序占用
  • ngrok的配置无需修改,你当前的转发规则已经正确指向http://localhost:80
  • 可以通过ngrok提供的本地Web界面http://127.0.0.1:4040查看所有转发的请求内容,方便调试
  • 确认The Things Stack后台配置的webhook路径与代码中的路由一致,即可正常接收解析JSON数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:21:01