【问题标题】:Unable to transfer twilio call to new number无法将 twilio 呼叫转移到新号码
【发布时间】:2017-02-17 19:24:29
【问题描述】:

我们有一个小型的 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->to 也是空白

我做错了吗?

更新

在实现 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. 现在用户1(代理)想将呼叫转移到另一个号码,可以是代理或其他号码。

调试器也没有错误

【问题讨论】:

  • 你能给我发一个 CallSid 来处理发生这种情况的电话吗?您可以通过电子邮件将其发送至 philnash@twilio.com。
  • 谢谢!给你发了一封电子邮件。
  • 我有个主意。您如何发送您正在转发呼叫的new_number?你能分享那个JS吗?
  • 好的,给你邮寄了 JS。

标签: twilio twilio-php


【解决方案1】:

这里是 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 是错误的。如果您希望在开始拨号之前收到消息,则需要先输入&lt;Say&gt;

<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 的很好的教程可能会有所帮助。

让我知道这是否有帮助。

【讨论】:

  • @philinash 谢谢你的回答。我按照你说的尝试了代码。但我遇到了致命错误。我已经更新了错误和其他问题的问题。还有什么问题吗?
  • 这不起作用。没有(不再?)为被叫/接收方创建的呼叫 sid。有一个呼叫 sid 仅适用于发起者/呼叫者。
  • 嘿@BrianH,我看到你问了你自己的问题,所以我会在那里发表评论,试图为你解决这个问题。
【解决方案2】:

在您的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多