将来电者排队后,如何在 Twilio/Flask 中运行更多代码?

如何解决将来电者排队后,如何在 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 中拨打新会议中的呼叫者,然后通过 statusCallbackstatusCallbackEvent 连接网络钩子。有关事件列表,请参阅 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?