Plivo hangup_call没有结束通话

时间:2018-05-08 15:34:09

标签: php plivo

简介

我们正在使用Plivo PHP服务器端SDK(旧版)来管理入站呼叫。最近我不得不实现呼叫阻止。想法很简单 - 如果我们系统中的入站呼叫与某些规则不匹配,我们会挂机。对于使用RestAPI的hangup_call函数。

一段代码

当我们的系统收到来自Plivo的事件:StartApp的请求时,调用控制器调用StartCall类函数handle。此功能包含所有启动呼叫的逻辑(检查规则,保存数据库中的呼叫,开始记录等):

public function handle($data) {
    // Finding caller from DB by callerNumber ...
    // Finding campaign from DB by targetNumber ...
    // Checking if caller already called in certain time interval (isDuplicate) ...

    // Starting call - call MUST be saved in DB !
    $call = Call::start($data["CallUUID"], $campaign, $caller, $isDuplicate);
    $call->save();

    try {
        // Checking call rules, throwing exceptions and changing call status accordingly
        $call->guardCall();
    } catch (CountryNotAllowedException $e) {
        // Hanging up if caller country not allowed
        return $this->callsApi->hangUp($call);
    } 
    // If everything went good waiting(Plivo addWait) for our systems waiting call service to find call consumer and execute transfer...
}

注意:hangUp是包含hangup_call以及一些日志记录的函数。

测试

目前,对于呼叫测试,我们使用Skype购买美国号码,因为我们位于欧洲。

出于测试目的,此测试中的每个调用都不会通过规则 - 被阻止。

测试此代码时,一切似乎都有效,但有一个问题 - 尽管Plivo结束了呼叫,skype(调用方)仍保持连接。结果,在我们的系统从Plivo收到Hangup后,新的呼叫开始。这是循环重复,直到我手动结束调用Skype作为调用者。

使用addSpeakaddWait代替hangup_call有效 - 执行发言或等待,并在该通话结束后执行。

我还尝试使用addHangup参数原因:"拒绝",但没有区别。

问题

为什么执行hangup_call后,skype保持连接? (呼叫未在呼叫者方面结束)

这可能是skype的特点吗?

也许是因为我们使用旧版SDK?最新的和旧的服务器端SDK之间有很大的区别吗?

0 个答案:

没有答案