问题描述
我正在创建一个基于 Twilio 的应用程序,如果未接听电话,它将接收语音邮件。
目前,我已经在控制台中针对电话号码设置了来电 URL。
<?PHP
header('content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
error_reporting(E_ALL);
ini_set('display_errors',1);
file_put_contents('incoming_call.log',"\n" .json_encode($_REQUEST) . "\n",FILE_APPEND);
?>
<Response>
<Dial timeout="15" action="/voicemail.PHP">
</Dial>
</Response>
<?PHP
// echo "hello ";exit;
header('content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
file_put_contents('incoming_voicemail.log',FILE_APPEND);
?>
<Response>
<Say voice="alice">Your call Could not be answered at the moment. Please leave a voice message.
</Say>
<Record></Record>
</Response>
我没有收到语音邮件。我在哪里可以在 twiml 中设置 recordingStatusCallback attribute
?
其次,我尝试通过拨打 One 电话和再次拨打 Second 电话将语音邮件从 Twilio 号码发送到电话号码,因为第二个电话将收到忙状态,我们能够发送语音邮件,但它不起作用。我的代码是
$call = $twilio->account->calls->create(
$phone_no,// To
$from_no,// From
array(
"method" => "GET","statusCallback" => SURL . "voicemail?to_phone_no=" . $phone_no,"statusCallbackEvent" => ["initiated","ringing"],"statusCallbackMethod" => "POST","twiml" => '<Response><Say>Testing voicemail</Say></Response>'
)
);
sleep(3);
$call2 = $twilio->account->calls->create(
$phone_no,// To
$from_no,// From
array(
"url" => AURL.'Vm/audio_file'
)
);
请指导我我做错了什么。如需帮助,请提前致谢。
解决方法
这里是 Twilio 开发者布道者。
对于您的第一个问题,如果您不包含要尝试连接的 number(或 SIP address 或 Client identity),则 <Dial>
将直接移至 action
网址,而无需理会 timeout
。
如果您希望 <Dial>
尝试连接到手机,那么您应该添加一个电话号码。
其次,如果您想在录制完成后接收网络钩子,那么您需要将带有发送网络钩子的 URL 的 the recordingStatusCallback
attribute 添加到您的 <Record>
,例如:>
<Response>
<Say voice="alice">Your call could not be answered at the moment. Please leave a voice message.
</Say>
<Record recordingStatusCallback="/recording-complete.php"></Record>
</Response>
最后,我们不支持尝试拨打一个号码两次以阻止它然后留下语音邮件的最终用例。 Making calls and then dropping them is against the terms of service(请参阅“禁止的服务”下的第 19 点。因此,我鼓励您考虑采用不同的方式来联系您的客户或以合法方式与他们互动的联系人。