我们有一个小的twilio应用程序,用于从网站调用任何客户编号。现在我们正在尝试在我们的应用程序中添加传输调用功能。 但是我们无法使用php api转移呼叫。 以下是我们正在使用的内容:
有以下代码:
<?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>
我做错了吗?
更新
在实施了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->exception(Object(Twilio\Http\Response), 'Unable to updat...')
#1 /twilo/twillo_php_master_new/Twilio/Rest/Api/V2010/Account/CallContext.php(109): Twilio\Version->update('POST', '/Accounts/AC618...', Array, Array)
#2 /twilo/twilo_call_transfer.php(26): Twilio\Rest\Api\V2010\Account\CallContext->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(代理)想要将呼叫转移到另一个可以是代理或其他号码的号码。
调试器中也没有错误
答案 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>