基于Python与Twilio实现短信接收及处理的技术求助
处理Twilio接收的短信内容:从获取到处理的完整指南
嘿,很高兴看到你已经搞定了基础的短信收发流程!其实把Twilio收到的短信转换成可处理的数据非常直接,Twilio会把所有关键信息打包成表单参数发送给你的Flask服务,咱们一步步来:
核心:从Flask请求中提取短信数据
Twilio在收到用户短信后,会以POST请求的形式将短信相关数据发送到你配置的Webhook路由(也就是你用ngrok暴露的Flask接口)。这些数据都存在请求的表单参数里,你只需要用Flask的request对象就能轻松获取。
完整代码示例
下面是一个可直接运行的示例,包含获取短信内容、处理逻辑和返回响应的全流程:
from flask import Flask, request from twilio.twiml.messaging_response import MessagingResponse app = Flask(__name__) # 这个路由就是Twilio会调用的Webhook地址 @app.route("/sms", methods=['POST']) def sms_processing(): # 提取关键短信数据 sender_number = request.form.get('From') # 发件人手机号 sms_content = request.form.get('Body').strip() # 短信内容,去掉首尾空格更易处理 twilio_number = request.form.get('To') # 你的Twilio号码 # ------------------- 这里写你的业务处理逻辑 ------------------- reply_message = "" # 根据短信内容返回对应信息 if sms_content.lower() == "hi" or sms_content.lower() == "hello": reply_message = f"👋 嗨,{sender_number}!欢迎联系我~" elif sms_content.lower().startswith("查询余额"): # 假设这里调用你的余额查询逻辑 reply_message = "你的账户余额为123.45元" elif sms_content.lower() == "帮助": reply_message = "支持的指令:\n- 嗨/Hello:打招呼\n- 查询余额:查看账户余额\n- 帮助:获取指令列表" else: reply_message = "抱歉,我暂时无法理解你的请求,请发送「帮助」查看可用指令~" # ------------------------------------------------------------- # 生成Twilio要求的响应格式 resp = MessagingResponse() resp.message(reply_message) return str(resp) if __name__ == "__main__": app.run(debug=True)
你需要知道的常用Twilio表单参数
除了上面用到的From、Body、To,Twilio还会发送这些实用参数:
MessageSid: 这条短信的唯一标识符,可用于日志或后续查询NumMedia: 短信附带的媒体文件数量(比如图片、视频)MediaUrl0: 如果有媒体文件,第一个文件的URL(多个的话依次是MediaUrl1、MediaUrl2...)
额外提示:验证Twilio请求的合法性
为了避免恶意请求调用你的接口,建议添加Twilio请求验证:
from twilio.request_validator import RequestValidator import os # 从环境变量获取你的Twilio Auth Token(不要硬编码!) validator = RequestValidator(os.environ.get('TWILIO_AUTH_TOKEN')) @app.route("/sms", methods=['POST']) def sms_processing(): # 验证请求是否来自Twilio url = request.url post_data = request.form signature = request.headers.get('X-Twilio-Signature') if not validator.validate(url, post_data, signature): return "Invalid request", 403 # 后续的处理逻辑...
测试步骤
- 运行Flask应用,默认端口是5000
- 用ngrok暴露端口:
ngrok http 5000,拿到类似https://xxxx-xx-xx-xx-xx.ngrok.io的URL - 登录Twilio控制台,找到你的号码,在「Messaging」->「A Message Comes In」里选择「Webhook」,填入
https://xxxx-xx-xx-xx-xx.ngrok.io/sms,请求方法选POST - 用手机给你的Twilio号码发短信,就能看到自动回复啦!
内容的提问来源于stack exchange,提问作者jaspar
相关产品推荐
相关产品推荐

