Plivo hangup_call не заканчивается звонком - PullRequest
0 голосов
/ 08 мая 2018

Введение

Мы используем Plivo PHP на стороне сервера SDK (устаревшая версия) для управления входящими вызовами. Недавно мне пришлось реализовать блокировку вызовов. Идея проста - если входящий звонок в нашей системе не соответствует определенным правилам, мы вешаем трубку. Для этого используется hangup_call функция из RestAPI.

Кусок кода

Когда наша система получает запрос с событием: StartApp от Plivo, контроллер вызовов вызывает 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 с купленными номерами в США, поскольку мы находимся в Европе.

В целях тестирования каждый вызов в этом тесте не проходит правила - блокируется.

При тестировании этого кода казалось, что все работает, но есть одна проблема - Skype (звонящий) продолжает подключаться, хотя Plivo завершил вызов. В результате, после того как наша система получит Hangup от Plivo, начнется новый вызов. И это повторяется в цикле, пока я вручную не завершу вызов в Skype как вызывающий абонент.

Использование addSpeak или addWait вместо hangup_call работает - говорить или ждать, и после этого вызов завершается.

Я также пытался использовать addHangup с параметром причина: "отклонено", но различий не было.

Вопрос

Почему после выполнения hangup_call Skype продолжает подключаться? (Вызов не заканчивается на стороне вызывающего абонента)

Может ли это быть особенностью скайпа?

Может быть, это потому, что мы используем устаревшую версию SDK? Есть ли большая разница между последней и устаревшей SDK на стороне сервера?

...