在将来电者排队后,如何在 Twilio/Flask 中 运行 更多代码?
How do I run more code in Twilio/Flask after enqueuing an incoming caller?
我想让我的 Twilio/Flask 应用程序保留来电,同时我 运行 更多代码联系对方。
我代码的相关部分:
@app.route('/ivr', methods=['POST'])
def welcome():
response = VoiceResponse()
with response.gather(
num_digits=1, action=url_for('router'), method="POST"
) as g:
g.say('if this is an emergency press 1, otherwise press 2')
return twiml(response)
@app.route('/ivr/router', methods=['POST'])
def status_router():
selected_option = request.form['Digits']
if selected_option == '1':
return redirect('/ivr/queue')
elif selected option == '2':
return redirect('/ivr/voicemail')
@app.route('/ivr/queue', methods=['POST', 'GET'])
def queue_connect():
response = VoiceResponse()
response.say("we are connecting you to our team")
response.enqueue('otg')
return twiml(response)
@app.route('/ivr/call_circle', methods=['POST'])
def call_circle():
callCircle(on_call=True)
return
我的想法是将呼叫者转给 /ivr/queue
,而我 运行 callCircle()
联系某人。照原样,我不知道如何在返回 queue_connect()
TWiML 后向 运行 获取任何内容。我可以 运行 callCircle()
作为 /ivr/queue
的一部分,但是 TWiML 不会 运行 直到代码的其余部分 运行,这违背了放置它们的目的首先搁置。
我想你有两个选择:
- 您可以从队列方法切换到使用 Twilio 会议,即在
queue_connect
中改为在新会议中拨叫呼叫者,然后通过 statusCallback
和 statusCallbackEvent
连接 webhook。有关事件列表,请参阅 doc。我认为这里相关的是join
,一旦呼叫者连接到会议,它应该立即触发,从而解决您的问题,并给您一个钩子来继续您的业务逻辑。
- 在将 TwiML 返回给用户之前,您可以在
queue_connect
中使用异步 HTTP 请求。因为实际上您不关心对 /ivr/call_circle
的响应,所以您可以开火后忘记。您可以使用 requests-futures 或类似的。
这里是 Twilio 开发人员布道者。
我认为你的方法是正确的。我猜 callCircle()
使用 REST API to create a new call?
我会设置queue_connect()
@app.route('/ivr/queue', methods=['POST', 'GET'])
def queue_connect():
callCircle(on_call=True)
response = VoiceResponse()
response.say("we are connecting you to our team")
response.enqueue('otg')
return twiml(response)
请注意,当您使用 API 创建调用时,它实际上会在 Twilio 系统内部对调用进行排队。同时,您的 Flask 端点随后完成处理,并且 returns <Enqueue>
TwiML 返回 Twilio 以将调用方发送到队列中。
然后拨打电话,被叫phone会响铃,他们选择接听电话。所有这些都比将传入呼叫排队花费的时间更长。因此,当有人接听 phone 时,呼叫者将在队列中等待连接。
如果你真的很担心这个操作顺序,那么我也同意yvesonline的使用异步HTTP请求的建议。
我想让我的 Twilio/Flask 应用程序保留来电,同时我 运行 更多代码联系对方。
我代码的相关部分:
@app.route('/ivr', methods=['POST'])
def welcome():
response = VoiceResponse()
with response.gather(
num_digits=1, action=url_for('router'), method="POST"
) as g:
g.say('if this is an emergency press 1, otherwise press 2')
return twiml(response)
@app.route('/ivr/router', methods=['POST'])
def status_router():
selected_option = request.form['Digits']
if selected_option == '1':
return redirect('/ivr/queue')
elif selected option == '2':
return redirect('/ivr/voicemail')
@app.route('/ivr/queue', methods=['POST', 'GET'])
def queue_connect():
response = VoiceResponse()
response.say("we are connecting you to our team")
response.enqueue('otg')
return twiml(response)
@app.route('/ivr/call_circle', methods=['POST'])
def call_circle():
callCircle(on_call=True)
return
我的想法是将呼叫者转给 /ivr/queue
,而我 运行 callCircle()
联系某人。照原样,我不知道如何在返回 queue_connect()
TWiML 后向 运行 获取任何内容。我可以 运行 callCircle()
作为 /ivr/queue
的一部分,但是 TWiML 不会 运行 直到代码的其余部分 运行,这违背了放置它们的目的首先搁置。
我想你有两个选择:
- 您可以从队列方法切换到使用 Twilio 会议,即在
queue_connect
中改为在新会议中拨叫呼叫者,然后通过statusCallback
和statusCallbackEvent
连接 webhook。有关事件列表,请参阅 doc。我认为这里相关的是join
,一旦呼叫者连接到会议,它应该立即触发,从而解决您的问题,并给您一个钩子来继续您的业务逻辑。 - 在将 TwiML 返回给用户之前,您可以在
queue_connect
中使用异步 HTTP 请求。因为实际上您不关心对/ivr/call_circle
的响应,所以您可以开火后忘记。您可以使用 requests-futures 或类似的。
这里是 Twilio 开发人员布道者。
我认为你的方法是正确的。我猜 callCircle()
使用 REST API to create a new call?
我会设置queue_connect()
@app.route('/ivr/queue', methods=['POST', 'GET'])
def queue_connect():
callCircle(on_call=True)
response = VoiceResponse()
response.say("we are connecting you to our team")
response.enqueue('otg')
return twiml(response)
请注意,当您使用 API 创建调用时,它实际上会在 Twilio 系统内部对调用进行排队。同时,您的 Flask 端点随后完成处理,并且 returns <Enqueue>
TwiML 返回 Twilio 以将调用方发送到队列中。
然后拨打电话,被叫phone会响铃,他们选择接听电话。所有这些都比将传入呼叫排队花费的时间更长。因此,当有人接听 phone 时,呼叫者将在队列中等待连接。
如果你真的很担心这个操作顺序,那么我也同意yvesonline的使用异步HTTP请求的建议。