我知道拨打电话时,Twilio 可以检测到应答机,并做出不同的反应。
但是,如果我使用
<dial>
动词,则没有明显的地方可以添加此功能,即使它本质上是相同的东西。
我的预期流程是:
来自官方文档关于
<Dial>
动词(强调我的):
这是 Dial 最简单的情况。 Twilio 将拨打 415-123-4567。如果有人接听,Twilio 会将呼叫者连接到被叫方。如果呼叫者挂断电话,Twilio 会话就会结束。 如果线路占线、无人应答或被叫方挂断,则
退出,并在呼叫流程结束之前为呼叫者执行<Dial>
动词。<Say>
<?xml version="1.0" encoding="UTF-8"?>
<!-- page located at http://example.com/simple_dial.xml -->
<Response>
<Dial>415-123-4567</Dial>
<Say>Goodbye</Say>
</Response>
在
<Record>
动词后面放置 <Say>
动词听起来就像您正在寻找的一样。您可以像这样更改默认值 30 秒的超时:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial timeout="9001">415-123-4567</Dial>
<Say>Please leave a message</Say>
<Record action="/process_new_voicemail" />
</Response>
我确信这已经晚了,但希望它能对某人有所帮助。听起来您可能只需要筛选呼叫。 基本上,您可以要求您拨打的“代理”接听电话,如果没有收到输入则挂断电话。
我不确定你使用的是什么语言,但这里有一个很棒的 php/Laravel 教程来解释: https://www.twilio.com/docs/tutorials/walkthrough/ivr-screening/php/laravel
关键部分在这里:
$dialCommand = $response->dial(
['action' => route('agent-voicemail', ['agent' => $agent->id], false),
'method' => 'POST']
);
$dialCommand->number(
$numberToDial,
['url' => route('screen-call', [], false)]
);
请注意,dial 命令使用“操作”来指定在呼叫结束时发送 POST 请求的位置,即 POST 到 /agent-voicemail。
然后,拨打该号码以及“url”参数这是在客服人员接听后但在连接两方之前请求的位置。
/screen-call 路由然后要求座席接受呼叫,如果没有收到输入,则会挂断并向初始设置 /agent-voicemail 路由发出 POST 请求。
此方法将处理您的情况,因为如果它转到语音邮件,则不会收到任何输入,并且呼叫将结束。
有一种名为“人体检测”的解决方案,您可以让客服人员按一个键来接听电话。
url
属性,在呼叫连接之前向客服人员发送 <Gather>
<Gather>
将超时,此时您可以发送
<Hangup>
动词来终止座席端的呼叫。
<Dial>
动词的
action
回调中,如果 $_POST['DialCallStatus'] == 'completed' && !array_key_exists('DialCallDuration', $_POST)
则启动基于 Twilio 的语音邮件流程,因为这表示 #2 中的场景,其中客服人员的语音邮件已应答并且呼叫在呼叫者连接之前就结束了。