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

如何向Twilio短信请求返回空响应且避免11200错误及额外收费?

如何向Twilio短信请求返回空响应且避免额外费用

刚好之前处理过类似的需求,我来给你讲清楚怎么实现:

核心问题在于,当你返回MessagingResponse生成的XML时,Twilio会把这个当成一条回复短信(对应日志里的Direction='reply'),自然会产生额外的回复费用。要解决这个问题,关键是不要返回任何Twilio的响应XML,而是直接返回一个204 No Content的HTTP状态码——这个状态码会告诉Twilio:我已经成功处理了请求,不需要发送任何回复。

具体实现示例

下面是几种常用语言的实现代码,你可以直接参考:

Python(Flask框架)

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route("/sms-webhook", methods=['POST'])
def handle_incoming_sms():
    # 第一步:处理你的业务逻辑,比如读取短信内容、存储数据等
    incoming_message = request.form.get('Body', '')
    sender_number = request.form.get('From', '')
    print(f"收到来自{sender_number}的短信: {incoming_message}")
    
    # 第二步:返回204无内容响应,不生成任何回复
    return make_response('', 204)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)

Node.js(Express框架)

const express = require('express');
const app = express();

// 解析Twilio发送的表单数据
app.use(express.urlencoded({ extended: true }));

app.post('/sms-webhook', (req, res) => {
    // 处理你的业务逻辑
    const incomingMsg = req.body.Body;
    const sender = req.body.From;
    console.log(`收到来自${sender}的短信: ${incomingMsg}`);
    
    // 返回204状态码,空响应
    res.sendStatus(204);
});

app.listen(3000, () => {
    console.log("Twilio短信处理服务已启动在3000端口");
});

关键注意事项

  • 务必返回204状态码,而不是200。虽然返回200+空内容也可能生效,但204是HTTP标准的“无内容”响应,Twilio对这个状态码的处理逻辑最明确,不会触发任何歧义。
  • 响应体必须是空的,不要返回任何XML、JSON或者空字符串以外的内容,否则Twilio可能会尝试解析内容,导致不必要的错误。
  • 测试后可以去Twilio控制台查看Webhook日志,确认响应状态码是204,且不会出现Direction='reply'的记录——这样就说明不会产生额外的回复费用了。

这种方法完全不会触发11200错误(这个错误通常是因为返回的XML格式不符合Twilio要求),因为我们根本不返回XML内容,直接用标准HTTP状态码告知Twilio处理完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:07:27