挂机时打开的入站呼叫将重定向到另一个Twilio客户端

问题描述 投票:0回答:1

我有两个可用的Twilio <client>,使用JS Quickstart和Twilio客户端PHP库在我的网站上(在呼叫者输入代码后)接收入站呼叫,这些呼叫被记录并注册在我的数据库中。

[我注意到一个<client>挂断一个打开的入站呼叫时,此呼叫转到另一个<client>的网站,我在数据库中有2个寄存器,而不是2个。

这是一个示例:

<?php

//...
//Validating connection status
//$estd is the connection status I get via AJAX

if($estd=="open"){ 
    $call = $twilio->calls($callsid)->update(array("status" => "completed"));
    $calla = $twilio->calls($callsid)->fetch();
    $parentCall = $calla->parentCallSid; //parent call
    $calld = $twilio->calls($parentCall)->update(array("status" => "completed"));
} else if($estd=="pending"){
    $call = $twilio->calls($callsid)->update(array("status" => "completed"));
    $calla = $twilio->calls($callsid)->fetch();
    $parentCall = $calla->parentCallSid; //parent call
    $calld = $twilio->calls($parentCall)->update(array("twiml" => '<Response><Dial timeout="20" record="record-from-answer" recordingStatusCallback="https://mywebsite.com/record.php" recordingStatusCallbackEvent="in-progress completed absent"><Client><Identity>the_other_client</Identity><Parameter name="numdoc" value="user_code"/></Client></Dial></Response>'));
}

?>

我该如何解决?

我需要您的帮助。

twilio twilio-api twilio-php twilio-twiml
1个回答
0
投票

我相信这可能是发生的,因为单个来电会触发您的两个$ estd if语句。

根据Twilio文档(https://www.twilio.com/docs/voice/client/javascript/connection#status),传入呼叫将首先具有待处理状态,然后处于打开状态。如果状态更改时设置了statuscallbackURL,则您可能会多次调用记录保持代码。根据您使用SQL的方式,您可能每次都插入新记录。

防止重复记录的方法是将呼叫的资源SID保存在数据库中,并使用insert on duplicate keyupdate保存以防止创建新记录。


或者,如果您显示的代码段来自record.php,则在使用Twiml进行出站呼叫时,您将使用callbackURL来调用record.php,这时您可能正在数据库中创建新记录。 (因为此调用将具有自己的唯一SID)。如果要将其附加到当前记录,则需要为此脚本创建的那些拨出电话创建一个不同的callbackURL。

(但是从您提供的详细信息中很难知道何时调用了什么代码。

© www.soinside.com 2019 - 2024. All rights reserved.