无法将twilio电话转移到新号码

时间:2017-02-17 19:24:29

标签: twilio twilio-php

我们有一个小的twilio应用程序,用于从网站调用任何客户编号。现在我们正在尝试在我们的应用程序中添加传输调用功能。 但是我们无法使用php api转移呼叫。 以下是我们正在使用的内容:

  • 我们从网站拨号,JS返回callid
  • 我们还有一个号码,我们需要在几分钟后转接电话
  • 所以我们有"转移"使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>
  • 但是当这个请求发生时,现有的呼叫正在下降,并且没有呼叫新号码。
  • 也是$ call-&gt;来为空白

我做错了吗?

更新

在实施了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 />

然而,我正确地获得了父呼叫ID,并且在$ child_calls中我正确地进出,这是第一个呼叫的用户和用户被呼叫的用户。还有什么不对吗?

是的,我们想要完全像你说的那样: 1. User1(代理)从twilio JS Client调用一个号码(客户A) 2.现在User1(代理)想要将呼叫转移到另一个可以是代理或其他号码的号码。

调试器中也没有错误

2 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

我很惊讶没有打电话。您的Twilio debugger是否有任何错误?

我可以看到一些问题。

拨出时从JS获得的CallSid是拨号分支的Sid,即您的代理拥有的分支。但是,我猜你想把被叫的人转移到一个新号码。如果是这种情况,那么您需要获得呼叫接收分支的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的好教程。

让我知道这是否有帮助。

答案 1 :(得分:0)

在PHP中,您使用POST方法,而在XML中,您使用$ _GET。您没有传递变量。

<?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" // <---NOTICE THE POST
        )
    );
    echo $call->to;
?>

将$ _GET更改为$ _POST

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