【问题标题】:How do I run more code in Twilio/Flask after enqueuing an incoming caller?入队后如何在 Twilio/Flask 中运行更多代码?
【发布时间】:2021-02-15 00:44:47
【问题描述】:

我想让我的 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

这个想法是在我运行callCircle() 联系某人时将呼叫者发送到/ivr/queue。照原样,在返回queue_connect() TWiML 后,我不知道如何运行任何东西。我可以将callCircle() 作为/ivr/queue 的一部分运行,但是在其余代码运行之前,TWiML 不会运行,这违背了将它们放在首位的目的。

【问题讨论】:

    标签: python flask twilio twilio-programmable-voice


    【解决方案1】:

    我认为你有两个选择:

    • 您可以从队列方法切换到使用 Twilio 会议,即在 queue_connect 中拨打新会议中的呼叫者,然后通过 statusCallbackstatusCallbackEvent 连接 webhook。有关事件列表,请参阅doc。我认为与此相关的是join,它应该在呼叫者连接到会议后立即触发,从而解决您的问题,并为您提供一个继续您的业务逻辑的钩子。
    • 在将 TwiML 返回给用户之前,您可以在 queue_connect 中使用异步 HTTP 请求。因为实际上您并不关心对/ivr/call_circle 的响应,所以您可以开火然后忘记。您可以使用 requests-futures 或类似名称。

    【讨论】:

    • 让它与 requests-futures 一起工作,谢谢!
    • 很高兴你能成功!那么请考虑accepting的答案。
    【解决方案2】:

    这里是 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请求。

    【讨论】:

    • 我正在使用 API!但这里的问题是callCircle() 有几个不同的步骤(它会呼叫一个人,如果他们不接电话,就会呼叫更多人,等等),所以设置和忘记不是一种选择
    • 你能在callCircle()分享代码吗?
    • 我实际上让它与 requests-futures 一起工作,但谢谢!
    • 好消息!很高兴你把它整理好了。
    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多