使用Python开发Twilio短信服务无法接收入站短信,如何解决?
解决Twilio入站短信接收问题的步骤
检查Twilio号码的Webhook配置
登录Twilio控制台,找到你的目标短信号码,查看「当收到消息时」的设置:- 确认选择的是「Webhook」选项(若用TwiML Bin或其他服务需对应配置)
- 确保Webhook的URL是公网可访问的HTTP/HTTPS地址,localhost或内网地址无法被Twilio访问
- 验证请求方法为POST(Twilio默认使用POST,若选GET需确保代码逻辑匹配)
确认Webhook的可访问性
- 用curl、Postman等工具模拟Twilio请求发送到你的Webhook地址,检查是否能正常返回响应
- 检查服务器/应用的防火墙、安全组规则,确保放行Twilio官方IP段的请求
- 本地开发时,必须用ngrok这类工具将本地端口映射到公网,否则Twilio无法触达你的服务
核查Python代码的Webhook处理逻辑
- 确保Web框架(如Flask/Django)的路由正确指向入站短信处理接口,以下是Flask的基础示例:
from flask import Flask, request app = Flask(__name__) @app.route('/receive-sms', methods=['POST']) def handle_inbound_sms(): # 打印请求参数用于调试 print(f"发送方: {request.form.get('From')}, 内容: {request.form.get('Body')}") # 必须返回合法的TwiML响应,否则Twilio会判定请求失败 return '<Response></Response>' if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)- 代码必须返回有效的TwiML(即使是空的
<Response>标签),否则Twilio不会记录该条入站短信 - 添加异常捕获逻辑,避免代码报错导致返回500错误,这类错误会让Twilio标记Webhook无效
排查Twilio日志与错误信息
- 进入Twilio控制台的「Monitor」->「Logs」->「Messaging」,切换到「Inbound」标签查看记录
- 若存在失败记录,根据错误提示修复:比如「Webhook URL unreachable」需检查URL可达性,「Invalid TwiML」需修正响应格式
- 确认Twilio账号无欠费情况,欠费会暂停入站短信服务
验证号码的接收权限
- 确认购买的Twilio号码支持短信接收功能(部分虚拟号码仅支持发送)
- 检查号码所属地区是否允许接收回复,避免地区限制导致短信无法送达
内容的提问来源于stack exchange,提问作者Pratik Korgaonkar
相关产品推荐
相关产品推荐

