使用 Twilio + Flask + Ngrok + Python (2.7) 在本地主机上出现 404 错误

Posted

技术标签:

【中文标题】使用 Twilio + Flask + Ngrok + Python (2.7) 在本地主机上出现 404 错误【英文标题】:404 Error on Localhost with Twilio + Flask + Ngrok + Python (2.7) 【发布时间】:2017-12-09 08:08:54 【问题描述】:

我正在学习https://www.twilio.com/blog/2016/09/how-to-receive-and-respond-to-a-text-message-with-python-flask-and-twilio.html的教程。

但是,在一个终端窗口 (python textapi.py) 中启动我的烧瓶应用程序后,在另一个终端 (ngrok http 5000) 中启动 ngrok,将转发 http url 复制并粘贴到 twilio 控制台的“消息进来”字段中,然后给号码发短信,我得到一个 404 错误。

我的烧瓶终端和我的 ngrok 终端都注册了传入的 POST,但都以 404 错误响应。

我的烧瓶应用如下所示:

from flask import Flask, request, redirect
import twilio
from twilio.rest import Client
from twilio.twiml.messaging_response import MessagingResponse
import pandas
import os

# Load some background data and credentials

app = Flask(__name__)

# Initiate Twilio Client
client = Client(account_sid, auth_token)

@app.route('/sms', methods=['POST'])
def sms():
    number = request.form['From']
    message_body = request.form['Body']
    # Do stuff to get response_String
    response = response_string
    resp = twiml.Response()
    resp.message(response)
    return str(resp)

if __name__ == '__main__':
    app.run()

谁能解释一下 404 错误是从哪里来的,为什么找不到“localhost:5000/sms”?

另外:Flask server returns 404 on localhost:5000 w/ Twilio 似乎没有解决我的问题。

更新 1:部分问题是我粘贴到 Twilio 控制台的 ngrok 网址末尾没有“/sms”。

现在我遇到一个错误,即 twiml 没有属性 Response。

【问题讨论】:

请将解决方案发布为答案,而不是更新您的问题。您可以在revisions 中找到您的解决方案。谢谢。 【参考方案1】:

这里是 Twilio 开发者宣传员。

您导入了MessagingResponse,这是您需要使用的,而不是twiml.Response()。所以,你的代码应该是:

@app.route('/sms', methods=['POST'])
def sms():
    number = request.form['From']
    message_body = request.form['Body']
    # Do stuff to get response_String
    response = response_string
    resp = MessagingResponse()
    resp.message(response)
    return str(resp)

编辑

只是想道歉,您所指的博客文章使用的是版本 5 Python 库,它确实使用了twiml.Response。我们已经发布了版本 6,其中包含 MessagingResponse 模块。 a migration document for upgrading from version 5 可能对您有用。

【讨论】:

【参考方案2】:

尝试在 HTTP 请求中更改 Twilio 沙箱中的 URL

http://your-ngrok-url.ngrok.io/sms

在此处输入您的本地主机 URL。

Also check official documentation

【讨论】:

以上是关于使用 Twilio + Flask + Ngrok + Python (2.7) 在本地主机上出现 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 ngrok 地址来电自动设置 Twilio webhook 地址

无法让 Twilio 应用程序与 ngrok 一起正常工作

注册 Twilio 电话号码时出现 ngrok 错误

为啥我不能使用 serveo 而不是 ngrok 来隧道连接到托管在 EC2 服务器上的 mvc 应用程序以在 Twilio 上接收 SMS

twilio.js 浏览器软件电话 - JWT 签名验证问题(Mac OSX / Chrome)

twilio - 使用本地(在 NAT 之后)HTTP 服务器