带有呼叫显示的Twilio外呼给收件人(Google语音)



我有一个工作的服务,在那里我们做这样的呼出。

$sid = getenv("TWILIO_ACCOUNT_SID");
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio = new Client($sid, $token);
$call = $twilio->calls
->create("+14155551212", // to
"+14155551212", // from
["url" => "http://demo.twilio.com/docs/classic.mp3"]
);
print($call->sid);

问题是当接收方有呼叫筛选时,对URL参数的回调在筛选开始后立即完成(带有callbackstatus "in-progress"!),这意味着我们必须在响应中添加暂停。

<Response>
<Pause length="10"/>
<Say>
This is an important message
</Say>
<Gather action="https://xxx" method="GET" timeout="15" speechTimeout="auto" numDigits="1" input="dtmf speech">
<Say>Please press 1 followed by the pound sign or say confirm to confirm your appointment</Say>
</Gather>
<Redirect method="GET">https://xxx</Redirect>
</Response>

是否有办法绕过筛选或使系统在筛选时不启动响应?

编辑:我已经添加了AMD选项,它似乎是正确的工作。现在唯一剩下的问题是当打电话到谷歌语音时,当有呼叫筛选时,我添加的语音记录在收件人实际接听之前开始读取

$call = $client->calls->create(
$to, $from,
array(
"url" => $url,
"statusCallback" => $statusURL,
"statusCallbackMethod" => 'POST',
"machineDetection" => "DetectMessageEnd",
"machineDetectionTimeout" => 5
)
);

您正在寻找应答机检测(AMD)。

通过设置MachineDetection参数为EnableDetectMessageEnd,可以使能AMD。

$call = $twilio->calls
->create("+14155551212", // to
"+14155551212", // from
[
"url" => "http://demo.twilio.com/docs/classic.mp3",
"machineDetection" => "Enabled"
]
);

当您使用MachineDetection参数时,对url的请求将包括AnsweredBy参数。来自文档:

如果您希望Twilio在识别被调用方后立即返回AnsweredBy值,则使用Enable。如果您想对人采取特定的操作(例如,连接到代理,播放消息),但在机器上挂断电话,这是有用的。

如果您想在答录机上留言,请指定DetectMessageEnd。在这种情况下,Twilio将在检测到有人时立即返回AnsweredBy,但对于应答机,AnsweredBy仅在到达问候语结束时返回,通常由哔哔声表示。

还有一个异步AMD的选项。有了异步检测,你的url被立即调用,就像一个正常的调用一样,但是一旦Twilio执行了检测,一个异步webhook就会指向一个不同的URL,你可以使用回调数据来决定是否更新调用。

最新更新