我正在尝试在 Twilio 中设置一些电话号码。当特定客户端连接时,我可以很好地调用它们并正常连接(我使用唯一的 URL 来定义在调用特定号码时应调用哪个客户端...如下所示: https://example.io/my/path/to/the/twiml/?attribute=CLIENT_IDENTIFIER )
当特定客户端未连接到我的应用程序时,就会出现问题。发生这种情况时,系统会发出自动消息,但随后调用就会断开。我希望它像普通电话一样,一直响到接到语音信箱。这就是我遇到的问题。这是我的 PHP:
<?php
declare(strict_types=1);
use Twilio\TwiML\VoiceResponse;
require_once '../../../vendor/autoload.php';
$response = new VoiceResponse();
$response->say('This call may be monitored for quality assurance',
['voice' => 'woman', 'language' => 'us-EN']);
$dial = $response->dial('', [
'record' => 'record-from-ringing-dual',
'recordingStatusCallback' => 'https://example.com/my/callback/'
]);
$dial->client($_GET['CLIENT_IDENTIFIER'], [
'statusCallbackEvent' => 'completed',
'statusCallback' => 'https://example.com/my/callback/'
]);
echo $response;
我的状态回调没有被调用,所以我知道调用没有完成。所以我的问题实际上是这样的:
如何让 Twilio 在无法连接到我传递的客户端时不立即断开连接?
最佳答案
这里是 Twilio 开发者布道者。
如果 <Dial>
无法连接,那么它将对其 action
attribute 创建一个 webhook通过DialCallStatus
作为参数。您可以使用更多 TwiML 响应 Webhook 以继续通话。
因此,您的初始 PHP 应该如下所示,并将操作属性添加到 <Dial>
:
<?php
declare(strict_types=1);
use Twilio\TwiML\VoiceResponse;
require_once '../../../vendor/autoload.php';
$response = new VoiceResponse();
$response->say('This call may be monitored for quality assurance',
['voice' => 'woman', 'language' => 'us-EN']);
$dial = $response->dial('', [
'record' => 'record-from-ringing-dual',
'recordingStatusCallback' => 'https://example.com/my/callback/',
'action' => 'https://example.com/my/action/'
]);
$dial->client($_GET['CLIENT_IDENTIFIER'], [
'statusCallbackEvent' => 'completed',
'statusCallback' => 'https://example.com/my/callback/'
]);
echo $response;
然后/my/action/
可以做这样的事情:
<?php
declare(strict_types=1);
use Twilio\TwiML\VoiceResponse;
require_once '../../../vendor/autoload.php';
$response = new VoiceResponse();
if ($_POST['DialCallStatus'] == 'completed') {
// the call succeeded, just end it
$response->hangup();
} else {
$response->say('The person you are calling cannot be reached right now. Please leave a message',
['voice' => 'woman', 'language' => 'us-EN']);
$response->record([
'action' => 'https://example.com/my/callback/'
]);
}
echo $response;
请告诉我这是否有帮助。
关于twilio - 防止客户端未连接时通话中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820755/