继续 the question I had raised before,我遇到了另一个问题。我花了很多时间尝试各种组合来解决问题,但我没有提出任何问题。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Hello Monkey</Say>
<Gather action="/user-A-input" method="POST">
<Say>Please press the input A.</Say>
</Gather>
<Gather action="/user-B-input" method="POST">
<Say>Please press the input B.</Say>
</Gather>
</Response>
但是,当我尝试输入输入A时,它会立即挂断,并且不会执行输入B聚集部分。据我所搜索,没有任何其他人正在使用这个相同逻辑的文档。
这是我的代码的Route.py中用户A输入和用户B输入的样子:
@app.route("/user-A-input", methods=['GET', 'POST'])
def UserAInput():
"""Handle key press from a user."""
# Get the digit pressed by the user
#The below logs are not printed, so somehow this method isn't called
logger.debug('before considering user input A')
strA = request.values.get('Digits', None)
logger.debug('In side A| A:' + strA)
resp = VoiceResponse()
return str(resp) #Something feels wrong here
@app.route("/user-B-input", methods=['GET', 'POST'])
def UserBInput():
"""Handle key press from a user."""
# Get the digit pressed by the user
#The below logs are not printed, so somehow this method isn't called
logger.debug('before considering user input B')
strB = request.values.get('Digits', None)
logger.debug('In side B| B:' + strB)
resp = VoiceResponse()
return str(resp) #Something feels wrong here
我真的很感激,如果有人能帮助我理解我在这里搞砸了什么。可能它与回归有关,但我不确定。或者可能是问题的解决方法。我计划使用输入A和B并进行API调用以获取数据并将其反馈给用户。
答案 0 :(得分:0)
Twilio开发者传道者在这里。
您不能在同一回复中使用两个<Gather>
标记。但是,您可以通过一些更改来获得所需的结果。
让我解释一下先发生的事情。当Twilio在某些TwiML中达到<Gather>
时,它会等待收集用户的响应,然后将响应提交到action
URL并将呼叫定向到该URL。在一个动作<Gather>
之后,任何事情都将被发现。
要做的是从您的<Gather>
返回第二个/user-A-input
。
这样的事情:
First TwiML
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Hello Monkey</Say>
<Gather action="/user-A-input" method="POST">
<Say>Please press the input A.</Say>
</Gather>
</Response>
用户A输入
@app.route("/user-A-input", methods=['GET', 'POST'])
def UserAInput():
"""Handle key press from a user."""
logger.debug('before considering user input A')
strA = request.values.get('Digits', None)
logger.debug('In side A| A:' + strA)
resp = VoiceResponse()
gather = Gather(action='/user-B-input')
gather.say('Please press the input B.')
resp.append(gather)
return str(resp)
然后用户B输入应该可以正常工作。
最后一点,您目前依赖于<Gather>
的默认超时,这意味着在用户停止输入5秒或按下{{1}后将提交Digits
钥匙。如果您需要一定数量的输入,可以使用numDigits
attribute of <Gather>
。您还可以使用finishOnKey
attribute设置其他完成键。
如果有帮助,请告诉我。
答案 1 :(得分:0)
虽然我无法提出道德和正确的解决方案,但我仍然想办法通过放置用户A输入,用户B输入和API调用请求(一个)的逻辑来解决问题。在用户A输入法中我需要A和B输入。在接收输入A的末尾,我将调用重定向到main方法(“/”),而main方法再次调用user-A-input,但是有一些标志帮助我跳过输入A部分并直接进入输入B部分,我确保我在正确的变量中记录它,然后将输入A和B传递给另一个API以获得响应。它可能听起来有点模糊和复杂,但如果你检查my git repo,你肯定会明白。我希望有一个更好的解决方案。