如何解决将来电者排队后,如何在 Twilio/Flask 中运行更多代码?
我想让我的 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
连接网络钩子。有关事件列表,请参阅 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 端点然后完成处理并将 <Enqueue>
TwiML 返回给 Twilio 以将调用方发送到队列中。
然后拨打电话,被叫方的电话会响起,他们选择接听电话。所有这些都比将来电加入队列需要更长的时间。因此,当有人接听电话时,来电者将在队列中等待接通。
如果你真的很担心这个操作顺序,那么我也同意yvesonline关于使用异步HTTP请求的建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。