2017-02-17 5 views
1

У нас есть небольшое приложение twilio, которое мы используем для вызова любого номера клиента с веб-сайта. Теперь мы пытаемся добавить функциональность переадресации в нашем приложении. Но мы не можем передать вызов, используя php api. Вот что мы используем:Невозможно перевести вызов twilio на новый номер

  • Мы набрать номер с веб-сайта, JS возвращает CallID
  • У нас есть еще один номер, на который мы должны передать вызов через несколько минут
  • Так у нас есть кнопка «Transfer» что делает Ajax вызов PHP файл

, которые имеют следующий код:

<?php 
    $existing_call_sid = $_REQUEST['CallSid']; 
    $new_number = $_REQUEST['new_number']; 
    $call = $client->calls($existing_call_sid)->update(
       array(
        "url" => "transfer_xml_main.php?new_number=".$new_number, 
        "method" => "POST" 
       ) 
      ); 
    echo $call->to; 
?> 

transfer_xml_main.php содержит:

<Response> 
    <Dial><?php echo $_GET['new_number'];?></Dial> 
    <Say>Please be on line we are transferring your call</Say> 
</Response> 
  • Но когда запрос происходит существующий вызов не падает и не призыва к новому номеру.
  • также $ по призванию> в пустой

Могу ли я делать что-то неправильно?

Update

После реализации ответ philnash я получаю следующее фатальной ошибки:

<b>Fatal error</b>: Uncaught exception 'Twilio\Exceptions\RestException' with message '[HTTP 400] Unable to update record: No 'To' number is specified' in /twilo/twillo_php_master_new/Twilio/Version.php:85 
Stack trace: 
#0 /twilo/twillo_php_master_new/Twilio/Version.php(127): Twilio\Version-&gt;exception(Object(Twilio\Http\Response), 'Unable to updat...') 
#1 /twilo/twillo_php_master_new/Twilio/Rest/Api/V2010/Account/CallContext.php(109): Twilio\Version-&gt;update('POST', '/Accounts/AC618...', Array, Array) 
#2 /twilo/twilo_call_transfer.php(26): Twilio\Rest\Api\V2010\Account\CallContext-&gt;update(Array) 
#3 {main} 
    thrown in <b>/twilo/twillo_php_master_new/Twilio/Version.php</b> on line <b>85</b><br /> 

Однако я получаю родительский идентификатор вызова правильно и в $ child_calls я получаю и от правильно которой это тот, кто вызвал первый и тот, кого вызвал пользователь. Еще ничего плохого?

И да, мы хотим так же, как вы сказали: 1. User1 (агент) называется один номер (клиент A) от Twilio JS Client 2. Теперь User1 (агент) хочет передать вызов на другой номер, который может быть агентом или какой-либо другой номер.

Также нет никаких ошибок в отладчике

+0

Можете ли вы отправить мне CallSid для звонка, на котором это произошло? Вы можете отправить его по электронной почте на адрес [email protected] – philnash

+0

Спасибо! Отправил вам электронное письмо. –

+0

У меня есть идея. Как вы отправляете 'new_number', что вы переадресовываете вызов? Можете ли вы поделиться этим JS? – philnash

ответ

0

Twilio разработчик евангелист здесь.

Я удивлен, что звонок не происходит. Есть ли ошибки в вашем Twilio debugger?

Я вижу некоторые проблемы.

CallSid, ​​который вы получаете от JS, когда вы набираете номер, является Sid из набора, который принадлежит вашему агенту. Но, я предполагаю, вы хотите перенести человека, который вызывается на новый номер. Если это так, то вам нужно получить Сид на этапе приема вызова. Набор Sid является родителем Sid для звонков, так что вы можете посмотреть на другую ногу на listing child legs, как это:

<?php 
    $parent_call_sid = $_REQUEST['CallSid']; 
    $child_calls = $this->client->calls->read(array("ParentCallSid" => $parent_call_sid)); 
    $child_call_sid = $childCalls[0]->sid; 
    $new_number = $_REQUEST['new_number']; 
    $call = $client->calls($child_call_sid)->update(
     array(
      "url" => "transfer_xml_main.php?new_number=".$new_number, 
      "method" => "POST" 
     ) 
    ); 
    echo $call->to; 
?> 

Во-вторых, ваш TwiML вы возвращаете неправильный путь круглый. Если вы хотите, чтобы сообщение появилось до того, как вы начнете набор, вам нужно сначала поставить <Say>.

<Response> 
    <Say>Please be on line we are transferring your call</Say> 
    <Dial><?php echo $_GET['new_number'];?></Dial> 
</Response> 

Когда вы все это сделаете, ваш оригинальный дозвон будет отключен при передаче вызова. Вы можете это хотеть, хотя вы можете обнаружить, что теплый перевод - лучший опыт. Существует хороший учебник о том, как выполнить warm transfer using PHP and Laravel, который может помочь.

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

+0

@philinash \t Благодарим вас за ответ. Я попробовал код, как вы сказали. но я получаю фатальную ошибку. Я обновил вопрос об ошибке и прочем. что-то еще не так? –

 Смежные вопросы

  • Нет связанных вопросов^_^