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

Twilio Python快速入门遇404错误:SMS回复功能故障求助

Troubleshooting Twilio SMS Reply 404 Error with Flask and ngrok

Question

我正在遵循Twilio Python快速入门指南,但SMS回复功能无法正常工作。当我向Twilio号码发送消息时,ngrok日志记录了HTTP请求,但标记为404 NOT FOUND错误。我的run.py文件代码如下:

# /usr/bin/env python
# Download the twilio-python library from twilio.com/docs/libraries/python
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse

app = Flask(__name__)

@app.route("/sms", methods=['GET', 'POST'])
def sms_ahoy_reply():
    """Respond to incoming messages with a friendly SMS."""
    # Start our response
    resp = MessagingResponse()

    # Add a message
    resp.message("Ahoy! Thanks so much for your message.")

    return str(resp)

if __name__ == "__main__":
    app.run(debug=True)

我已为Twilio号码配置了正确的ngrok转发网址,请问可能存在哪些问题?

Answers

Let’s break down the most likely causes and fixes for your 404 error:

  • Missing /sms endpoint in Twilio’s webhook URL
    This is the #1 culprit. Double-check that the full URL you’ve set in Twilio’s console includes the /sms path. For example, if your ngrok URL is https://abc123.ngrok.io, the webhook must be https://abc123.ngrok.io/sms—omitting this suffix will lead Twilio to hit the root of your server, which has no route defined, hence the 404.

  • Mismatched port between Flask and ngrok
    By default, Flask runs on port 5000. If you’ve changed the port in your Flask app (e.g., app.run(debug=True, port=8080)), make sure your ngrok command targets the same port: ngrok http 8080. A port mismatch means ngrok isn’t forwarding to your Flask server correctly.

  • Typos or case sensitivity in the Flask route
    Flask routes are case-sensitive by default. If you accidentally typed /SMS (uppercase) in Twilio’s webhook but your route is /sms (lowercase), or vice versa, this will trigger a 404. Also check for typos like /sm or /sms/ (trailing slash)—your route is /sms without a trailing slash, so the webhook shouldn’t include one either.

  • Expired or changed ngrok URL
    Free ngrok sessions expire after a few hours, and restarting ngrok generates a new URL. Make sure the URL in Twilio’s settings exactly matches the one shown in your ngrok terminal. If they don’t, update Twilio’s webhook to the new ngrok URL.

  • Test the endpoint directly to isolate the issue
    Send a GET request to https://your-ngrok-url/sms using your browser or a tool like curl. If you get a 404 here, the problem is with your Flask app’s routing (not Twilio). If you see the TwiML response (<Response><Message>Ahoy! Thanks so much for your message.</Message></Response>), then check if you configured Twilio’s webhook for the correct channel—you might have set it for voice instead of SMS.

  • Check Flask’s console logs for incoming requests
    Since you’re running Flask in debug mode, keep an eye on the console output. If you don’t see any incoming requests when sending an SMS, it means ngrok isn’t forwarding traffic to your Flask server (double-check the ngrok command and port). If you do see the request but it returns 404, the route configuration is the issue.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:27:43