在将来电者排队后,如何在 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 中改为在新会议中拨叫呼叫者,然后通过 statusCallbackstatusCallbackEvent 连接 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请求的建议。