防止客户端未连接时呼叫断开

Prevent call from disconnected when client is not connected

我正在尝试在 Twilio 中设置一些 phone 数字。当连接特定客户端时,我可以很好地调用它们并正常连接(我使用唯一的 URL 来定义在调用特定号码时应拨打哪个客户端...像这样:https://example.io/my/path/to/the/twiml/?attribute=CLIENT_IDENTIFIER

当特定客户端未连接到我的应用程序时,就会出现问题。发生这种情况时,会说出自动消息,但随后电话会断开。我希望它像普通的 phone 一样响起,直到它到达语音信箱。这就是我遇到的问题。这是我的 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 的自动驾驶仪中的 listen action 似乎解决了您正在寻找的等待时间。

这里是 Twilio 开发人员布道者。

如果 <Dial> 无法连接,那么它将对其 action attribute 创建一个 webhook,并将 DialCallStatus 作为参数传递。您可以使用更多 TwiML 响应 webhook 以继续调用。

因此,您的初始 PHP 应该如下所示,向 <Dial> 添加了 action 属性:

<?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;

如果有帮助请告诉我。