twilio - 防止客户端未连接时通话中断

标签 twilio twilio-api twilio-twiml

我正在尝试在 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/

相关文章:

twilio - 如何阻止 Twilio Voice API 扩展语音消息中的缩写?

javascript - 我如何可靠地获取特定参与者离开(和加入)twilio 房间的时间戳?

javascript - 在 Twilio 上使用一台设备进行多个连接

node.js - Twiml POST 请求上的参数为空

javascript - 批量短信 - Twilio

Twilio Voice Api - 是否可以录制消息并在流程中播放录制消息

twilio - 使用 Twiml 如何实现顺序响铃组?

node.js - Node js twilio 发送短信不起作用

ssl - 获取 "EIdHTTPProtocolException with message ' HTTP/1.1 400 BAD REQUEST'”异常

asp.net-mvc - TwiML 应用程序意外通话结束 : Cannot find the declaration of element 'response'