twilio:检测到拨号目标正忙吗?

时间:2018-11-17 21:45:00

标签: python-3.x flask twilio status detect

我正在通过python3下的flask使用twilio REST接口。

我正在使用dial方法将传入呼叫路由到另一个号码(存储在target变量中),如下所示:

resp = VoiceResponse()
resp.dial(
    target,
    action=url_for('callstatus'),
    method='GET',
    timeout=20
)
return Response(str(resp), 200, mimetype='application/xml')

如果目标号码开始振铃,这将没有问题。但是,如果目标号码正忙,则dial方法不会检测到它,而只是让呼叫者听到忙音,直到发生超时为止。

我想以某种方式立即检测到目标忙,然后在这种情况下将呼叫路由到语音邮件。

我知道如何路由到语音邮件,但是我不知道在遇到忙音时如何自动进行路由。

是否可以通过twilio REST API做到这一点?

更新:我尝试了以下操作,但没有成功...

resp = VoiceResponse()
dial = Dial(
    action=url_for('callstatus'),
    method='GET',
    timeout=20
)
dial.number(
    target,
    status_callback=url_for('callstatus'),
    status_callback_event='initiated ringing answered completed',
    status_callback_method='GET'
)
resp.append(dial)
return Response(str(resp), 200, mimetype='application/xml')

当我以这种方式执行操作时,我会收到一个忙音,并且信号会一直持续下去。原始Dial对象中的超时将被忽略。

注意:我是根据twilio文档中Number ...

上的以下示例创建上述代码的。
response = VoiceResponse()
dial = Dial()
dial.number(
    '+14158675310',
    status_callback_event='initiated ringing answered completed',
    status_callback='https://myapp.com/calls/events',
    status_callback_method='POST'
)
response.append(dial)

print(response)

另一个注意事项:status_callback对象中的number被忽略。如果我在action对象中注释掉dial,即使挂断电话,也不会调用状态回调。而且,如果我将action放回dial对象中,并注释掉status_callback对象中的所有number属性,则操作回调 会执行 被呼叫。这意味着action被识别,而status_callback被忽略。

...无论将方法设置为POST还是GET,我都会得到完全相同的行为。

1 个答案:

答案 0 :(得分:0)

这里是Twilio开发人员的传播者。

您可以尝试在<Number>中使用<Dial>,其中包括statusCallback attribute。当拨打的号码占线时,Twilio将发送一个网络摘机,以表明呼叫已完成,原因是该通话已占线。然后,您可以use the REST API to modify the call并将其发送到一些新的TwiML来收集语音邮件。

或者,您可以使用<Enqueue>将传入呼叫放入队列中,并使用REST API拨出电话号码。如果该呼叫随后以忙碌状态返回,则可以将传入呼叫从队列中重定向到语音邮件。如果呼出成功,则您用<Dial><Queue>进行响应以连接呼叫者。