python - Twilo python Flask传递参数

标签 python flask twilio

我有一个使用 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?

最佳答案

此处为 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)

然后您可以在 mainFlow 中使用 SpeechResult,例如:

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

最后,您可以在 session 中设置 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)

让我知道这是否有帮助。

关于python - Twilo python Flask传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56840572/

相关文章:

python - RaspberryPi3 上的 WebDriverException : Message: invalid argument: can't kill an exited process with GeckoDriver, Selenium 和 Python

javascript - 如何将 Python FLASK 中的数据输入数据库?

python - 属性错误 : module 'jinja2.ext' has no attribute 'autoescape' while trying to use Flask-Babel

asp.net - Twilio 回调在我的 .NET 服务中不起作用

python - 如何使用 Python 向 Twilio API 提供代理信息

python - AttributeError: 'function' 对象没有属性 'replace'

python - 如何根据 QcomboBox 索引切换小部件的启用状态

python - flask.logger 比更通用的 python 日志记录模块有什么优势?

java - 在twilio中创建 channel 时,如何设置CreatedBy属性?

python - 如何在 Django 中查询一天中某个时间之前创建的对象?