Колба питона, класс и объект, ориентированный с помощью twilio - PullRequest
0 голосов
/ 01 июля 2019

Я могу запустить Twilo с Flask в Python без объектно-ориентированного.В Twilo Dashboard я использую webhook и устанавливаю: https://123456.ngrok.io/voice, и он работает нормально.

Однако я хотел бы сделать мой код объектно-ориентированным, чтобы я мог использовать результаты распознавания речи в глобальном масштабе.

Я пытался это сделать, но когда Twilo достигает моего кода, я получаю эту ошибку

127.0.0.1 - - [01/Jul/2019 08:59:05] "POST /voice HTTP/1.1" 404 -

Вот мой код, почему он не может найти / voice

app = Flask(__name__)

class MyServer(Flask):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    @app.route("/voice", methods=['GET', 'POST'])
    def voice(self):
        self.resp = VoiceResponse()
        self.resp.say("What is your name?")
        print("1---------------")
        self.resp.gather(input='speech', timeout="3", action='/gather', method='POST')

        # resp.append(gather)
        print("2---------------")
        # print (str(resp))
        # resp.say("Thank you for telling us your name")
        return str(self.resp)

    @app.route("/gather", methods=['GET', 'POST'])
    def gather(self):
        self.resp = VoiceResponse()
        print("3---------------")
        self.speechRecogRes = request.values.get("SpeechResult", "")
        print("4--------------->" + str(self.speechRecogRes))
        self.resp.redirect('/voice')
        return str(self.resp)

if __name__ == '__main__':
    print('Hello!!')
    app = MyServer(__name__)
    app.run(debug=True)

Я даже попытался изменить адрес webhook в Twilo Dashboard для установки на self.voice:

https://123456.ngrok.io/self.voice

но это не работает

1 Ответ

2 голосов
/ 02 июля 2019

Разработчик Twilio здесь.

Извините, я не разработчик Python, и у меня нет полностью сформированного ответа для вас здесь. Хотя я могу попытаться направить вас на правильный путь.

Во-первых, в вашем классе MyServer вы используете декоратор @app.route, но нет объекта app, с которым можно иметь дело.

Насколько я могу судить по документации Flask, вы можете создать подкласс Flask, но это только для того, чтобы настроить его на уровне сервера.

Я полагаю, что когда вы хотите модульно настроить приложения Flask, вы действительно хотите изучить Blueprints . Это может быть вашим лучшим выбором, если вы хотите следовать принципам Flask.


Тем не менее, если вы продаете такие подклассы, лучший пример успешного использования таких классов, как этот, - это GitHub gist: https://gist.github.com/dplepage/2024129. Это не сопровождается комментариями, но, надеюсь, это относительно само за себя. Идея состоит в том, что вам нужно выполнить маршрутизацию, используя self.route в конструкторе.

Так что для вашего приложения это может выглядеть примерно так (не проверено):

class MyServer(Flask):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.route('/voice', self.voice, methods=['GET', 'POST'])
        self.route('/gather', self.gather, methods=['GET', 'POST'])

    def voice(self):
        self.resp = VoiceResponse()
        self.resp.say("What is your name?")
        print("1---------------")
        self.resp.gather(input='speech', timeout="3", action='/gather', method='POST')

        # resp.append(gather)
        print("2---------------")
        # print (str(resp))
        # resp.say("Thank you for telling us your name")
        return str(self.resp)

    def gather(self):
        self.resp = VoiceResponse()
        print("3---------------")
        self.speechRecogRes = request.values.get("SpeechResult", "")
        print("4--------------->" + str(self.speechRecogRes))
        self.resp.redirect('/voice')
        return str(self.resp)

if __name__ == '__main__':
    print('Hello!!')
    app = MyServer(__name__)
    app.run(debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...