Twilo Python Flask передавая параметр - PullRequest
1 голос
/ 01 июля 2019

У меня есть приложение с python, которое работает, но мне нравится передавать результат распознавания речи вызывающей стороне, я не знаю, как, я перепробовал все. Я даже пытался установить lastRes в глобальную переменную, объявив ее сверху, она не работает

lastRes = ""
app = Flask(__name__)

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

@app.route("/mainFlow", methods=['GET', 'POST'])
def mainFlow():
  resp = VoiceResponse()
  resp.say("We are done?")
  print("5--------------->" + str(lastRes))
  return str(resp)

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

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

Как я могу передать lastRes в рутину / mainFlow?

1 Ответ

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

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

Прежде всего, я бы спросил, почему вы пытаетесь перенаправить, прежде чем использовать результат. У вас уже есть речевой результат в вашей /gather конечной точке, почему бы тогда не ответить? Как это:

@app.route("/gather", methods=['GET', 'POST'])
def gather():
  resp = VoiceResponse()
  lastRes = request.values.get("SpeechResult", "")
  resp.say('Thank you ' + lastRes + '.')
  resp.redirect('/mainFlow')
  return str(resp)

В этом ответе будет сказано «Спасибо» и результат речи, после чего вы будете перенаправлены в основной поток.

Кроме того, вы работаете с URL здесь. Вы можете установить ответ в качестве параметра URL, например:

import urllib

@app.route("/gather", methods=['GET', 'POST'])
def gather():
  resp = VoiceResponse()
  SpeechResult = request.values.get("SpeechResult", "")
  params = urllib.urlencode({"SpeechResult": SpeechResult})
  resp.redirect('/mainFlow?' + params)
  return str(resp)

Тогда вы можете использовать SpeechResult в mainFlow, например:

@app.route("/mainFlow", methods=['GET', 'POST'])
def mainFlow():
  SpeechResult = request.args.get('SpeechResult')
  resp = VoiceResponse()
  resp.say("We are done? " + SpeechResult)
  return str(resp)

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

from flask import Flask, session, request

@app.route("/gather", methods=['GET', 'POST'])
def gather():
  resp = VoiceResponse()
  session['SpeechResult'] = request.values.get("SpeechResult", "")
  resp.redirect('/mainFlow')
  return str(resp)

@app.route("/mainFlow", methods=['GET', 'POST'])
def mainFlow():
  SpeechResult = session['SpeechResult']
  resp = VoiceResponse()
  resp.say("We are done? " + SpeechResult)
  return str(resp)

Дайте мне знать, поможет ли это вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...