简介
我们正在使用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作为调用者。
使用addSpeak
或addWait
代替hangup_call
有效 - 执行发言或等待,并在该通话结束后执行。
我还尝试使用addHangup
参数原因:"拒绝",但没有区别。
问题
为什么执行hangup_call
后,skype保持连接? (呼叫未在呼叫者方面结束)
这可能是skype的特点吗?
也许是因为我们使用旧版SDK?最新的和旧的服务器端SDK之间有很大的区别吗?