我正在通过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
属性,则操作回调 会执行当我挂断电话时,em> 被呼叫。这意味着action
被识别,而status_callback
被忽略。
...无论将方法设置为POST
还是GET
,我都会得到完全相同的行为。
答案 0 :(得分:0)
这里是Twilio开发人员的传播者。
您可以尝试在<Number>
中使用<Dial>
,其中包括statusCallback
attribute。当拨打的号码占线时,Twilio将发送一个网络摘机,以表明呼叫已完成,原因是该通话已占线。然后,您可以use the REST API to modify the call并将其发送到一些新的TwiML来收集语音邮件。
或者,您可以使用<Enqueue>
将传入呼叫放入队列中,并使用REST API拨出电话号码。如果该呼叫随后以忙碌状态返回,则可以将传入呼叫从队列中重定向到语音邮件。如果呼出成功,则您用<Dial>
和<Queue>
进行响应以连接呼叫者。