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

基于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

    # 后续的处理逻辑...

测试步骤

  1. 运行Flask应用,默认端口是5000
  2. 用ngrok暴露端口:ngrok http 5000,拿到类似https://xxxx-xx-xx-xx-xx.ngrok.io的URL
  3. 登录Twilio控制台,找到你的号码,在「Messaging」->「A Message Comes In」里选择「Webhook」,填入https://xxxx-xx-xx-xx-xx.ngrok.io/sms,请求方法选POST
  4. 用手机给你的Twilio号码发短信,就能看到自动回复啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:20:25