Запретить отключение вызова, когда клиент не подключен - PullRequest
2 голосов
/ 29 июня 2019

Я пытаюсь настроить некоторые телефонные номера в 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 не отключаться сразу, когда он не может подключиться к клиенту, который я передаю?

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Разработчик Twilio здесь.

Если <Dial> не может подключиться, то он подключится к своему атрибуту action , передав DialCallStatus в качестве параметра. Вы можете ответить на веб-крючок с большим количеством TwiML, чтобы продолжить вызов.

Итак, ваш первоначальный 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;

Дайте мне знать, поможет ли это вообще.

0 голосов
/ 04 июля 2019

Действие прослушивания в автопилоте Twilio, кажется, соответствует ожидаемому времени ожидания.

...