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