Открытые входящие вызовы перенаправляют на другой клиент Twilio, когда кладут трубку - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть два доступных Twilio <client> для приема входящих вызовов на моем веб-сайте (после ввода кода вызывающим абонентом) с использованием библиотеки JS Quickstart и Twilio client PHP, эти вызовы записываются и регистрируются в моей базе данных.

Я заметил, что когда один <client> вешает открытый входящий вызов, этот вызов переходит на сайт другого <client> У меня в базе данных есть 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>'));
}

?>

Как я могу это исправить?

Мне нужна ваша помощь.

1 Ответ

1 голос
/ 19 февраля 2020

Я полагаю, что это может произойти, потому что один входящий голосовой вызов вызовет оба ваших оператора $ estd if.

Согласно документации Twilio (https://www.twilio.com/docs/voice/client/javascript/connection#status), входящий вызов сначала будет иметь статус ожидающий, а затем статус открытый. Если ваш statuscallbackURL установлен на время изменения статуса, вы можете вызывать свой код хранения записей более одного раза. В зависимости от того, как у вас есть SQL, вы можете каждый раз вставлять новые записи.

Способ предотвращения двойной записи - сохранить SID ресурса для вызова в вашей базе данных и insert on duplicate key или * 1009. * чтобы предотвратить создание новых записей.


В качестве альтернативы, если отображаемый фрагмент кода взят из записи. php, когда вы совершаете исходящий вызов с использованием Twiml, вы используете callbackURL для вызова записи. php - при которой время, когда вы можете создавать новую запись в вашей базе данных (так как этот вызов будет иметь свой собственный уникальный SID). Если вы хотите присоединить ее к текущей записи, вам нужно будет создать другой callbackURL для исходящих наборов, сделанных из этого сценария.

(Но из предоставленных вами данных трудно понять, какой код вызывается когда).

...