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

关于SMS Gateway中DLR URL的用途及Python实现方法咨询

DLR URL 用途及Python实现方案

一、DLR URL的具体用途

你对DLR的理解完全准确,DLR全称Delivery Receipt(短信递送回执),这个URL是你提供给SMS网关的回调地址,核心作用有这些:

  • 接收网关推送的短信发送状态:比如短信是否成功送达用户手机、是否因号码无效/运营商故障失败、是否处于待发送队列等
  • 获取关键回执数据:网关通常会通过POST请求把状态码、短信唯一ID、接收号码、实际送达时间、失败原因(如果失败)等参数传给这个URL
  • 实现业务闭环:你可以基于这些数据更新本地业务状态(比如订单通知已送达)、统计短信送达率、给用户补发通知等

二、用Python创建DLR回调端点

方案1:Flask快速搭建(适合入门)

  1. 先安装依赖:
pip install flask
  1. 编写回调代码:
from flask import Flask, request, jsonify

app = Flask(__name__)

# 对应你设置的dlr-url路径/dlr
@app.route('/dlr', methods=['POST'])
def process_dlr():
    # 解析网关推送的数据,兼容JSON和表单格式
    try:
        dlr_info = request.get_json()
    except:
        dlr_info = request.form.to_dict()
    
    # 这里可根据需求处理数据,比如写入日志或数据库
    print("收到DLR回执:", dlr_info)
    
    # 必须返回200状态码,告知网关已成功接收
    return jsonify({"result": "success"}), 200

if __name__ == '__main__':
    # 本地测试可启动,生产环境需部署到公网服务器
    app.run(host='0.0.0.0', port=5000, debug=False)

方案2:FastAPI实现(现代轻量框架)

  1. 安装依赖:
pip install fastapi uvicorn
  1. 编写代码:
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse

app = FastAPI()

@app.post("/dlr")
async def process_dlr(request: Request):
    # 解析请求数据
    try:
        dlr_info = await request.json()
    except:
        form_data = await request.form()
        dlr_info = dict(form_data)
    
    # 处理回执逻辑,比如存入数据库
    print("DLR回执内容:", dlr_info)
    
    # 返回成功响应
    return JSONResponse(content={"status": "received"}, status_code=200)

启动命令:

uvicorn main:app --host 0.0.0.0 --port 5000

关键注意事项

  • DLR URL必须是公网可访问的,网关才能推送数据;本地测试可使用ngrok等工具临时暴露端口
  • 务必返回200状态码给网关,否则网关会判定推送失败,可能重复发送回执
  • 不同SMS网关的DLR参数格式可能有差异,要对照官方文档解析字段(比如状态码字段可能叫status或delivery_status)
  • 生产环境要做好数据校验、异常捕获和日志留存,避免丢失重要回执信息

内容的提问来源于stack exchange,提问作者Kaiss B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:48:18