【发布时间】:2016-09-07 21:50:15
【问题描述】:
我正在使用 Python 烧瓶和 twillo-python helper library 构建一个简单的 Twillo(可编程语音)应用程序。语音菜单有几个步骤,但第一个步骤要求呼叫者输入密码。
我正在尝试找出以 DRY 方式处理来自 TwiML <Gather> 动词的无调用者输入的最佳实践。我创建了一个函数process_no_input_response,它接收并返回一个带有适当<Say> 消息的twllio resp 对象,具体取决于是否达到了允许的最大重试次数。代码示例如下。
有没有更好的方法来处理这些情况?渴望获得有关此代码的任何建议或反馈。
def process_no_input_response(resp, endpoint, num_retries_allowed=3):
"""Handle cases where the caller does not respond to a `gather` command.
Determines whether to output a 'please try again' message, or redirect
to the hand up process
Inputs:
resp -- A Twillo resp object
endpoint -- the Flask endpoint
num_retries_allowed -- Number of allowed tries before redirecting to
the hang up process
Returns:
Twillo resp object, with appropriate ('please try again' or redirect) syntax
"""
# Add initial caller message
resp.say("Sorry, I did not hear a response.")
session['num_retries_allowed'] = num_retries_allowed
# Increment number of attempts
if endpoint in session:
session[endpoint] += 1
else:
session[endpoint] = 1
if session[endpoint] >= num_retries_allowed:
# Reached maximum number of retries, so redirect to a message before hanging up
resp.redirect(url=url_for('bye'))
else:
# Allow user to try again
resp.say("Please try again.")
resp.redirect(url=url_for(endpoint))
return resp
@app.route('/', methods=['GET', 'POST'])
def step_one():
"""Entry point to respond to incoming requests."""
resp = twilio.twiml.Response()
with resp.gather(numDigits=6, action="/post_step_one_logic", method="POST") as gather:
gather.say("Hello. Welcome to my amazing telephone app! Please enter your pin.")
return str(process_no_input_response(resp, request.endpoint))
@app.route('/bye', methods=['GET', 'POST'])
def bye():
"""Hangup after a number of failed input attempts."""
resp = twilio.twiml.Response()
resp.say("You have reached the maximum number of retries allowed.
Please hang up and try calling again.")
resp.hangup()
return str(resp)
【问题讨论】:
标签: python flask twilio twilio-twiml