Ошибка 404 на локальном хосте с Twilio + Flask + Ngrok + Python (2.7)

Я следую руководству из 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 в другом терминале (ngrok http 5000), копирования и вставки URL-адреса пересылки http в поле консоли 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 возвращает 404 на локальном хосте: 5000 с Twilio похоже, не решает мою проблему.

ОБНОВЛЕНИЕ 1: часть проблемы заключалась в отсутствии «/ sms» в конце моего URL-адреса ngrok, который я вставил в консоль Twilio.

Теперь у меня ошибка, что у twiml нет атрибута Response.


person mjfred    schedule 05.07.2017    source источник
comment
Публикуйте решения как ответы, а не как обновления вашего вопроса. Вы можете найти свое решение в редакциях. Спасибо.   -  person Bugs    schedule 05.07.2017


Ответы (2)


Проповедник разработчиков 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)

Изменить

Просто хотел извиниться, сообщение в блоге, о котором вы говорите, использовало библиотеку Python версии 5, которая действительно использовала twiml.Response. С тех пор мы выпустили версию 6, в которой есть модуль MessagingResponse. Существует документ по миграции для обновления с версии 5. который может оказаться полезным.

person philnash    schedule 06.07.2017

Попробуйте изменить свой URL в песочнице Twilio в HTTP-запросе

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

Здесь введите свой URL-адрес localhost. введите описание изображения здесь

Также проверьте официальную документацию

person Kenil Vavaliya    schedule 23.08.2020