Используя Twilio SDK, вызывайте массив номеров последовательно, пока кто-нибудь не поднимет трубку - PullRequest
0 голосов
/ 02 февраля 2019

Я работаю над созданием функциональности центра обработки вызовов, чтобы при получении входящего вызова он набирал список телефонных номеров оператора (как определено отдельным фрагментом кода) и соединение первого номера, которое мы разрывали изкод и запустить отдельную функцию для подключения агента в очередь, где клиент ждет.Он создается в Laravel 5.7, поскольку создаются некоторые другие будущие информационные панели, и я хотел поместить его в код, который будет использовать команда.

Первоначальная очередь клиента и подключение агента кКажется, что вызов работает.

Я ищу помощь со следующим кодом:

public function findAgentByPriority($agentCount) {
    $twilio = new Client(env('TWILIO_SID'),env('TWILIO_SECRET'));

    // test numbers
    $agentArr[] = ["agent" => env('TWILIO_TEST_AGENT1')];
    $agentArr[] = ["agent" => env('TWILIO_TEST_AGENT2')];
    // $agentArr = json_encode($agentArr);

    //build the array by querying /api/v1/agile/users
    $numbers = $agentArr;

    // this part of the code will call one person after the next
    // call the next number
    if($agentCount == NULL){
        $agentCount = count($numbers);
        echo "in if<br>";
        $call = $twilio->calls
                       ->create(
                            $numbers[0],
                            env('TWILIO_MAIN_NUMBER'),
                            [
                                "url" => "https://{$_SERVER['HTTP_HOST']}/ivr/connect-agent",
                                "statusCallback" => "https://{$_SERVER['HTTP_HOST']}/ivr/next-agent?c=$agentCount",
                                "timeout" => 20
                            ]
                        );
    }elseif($agentCount > 0){
    // when we run out of numbers move out of the loop
        $agentCount = 0;

    }else{
    // when we run out of numbers move out of the loop

    }


    // once there are no more agents that were logged in today we
    // will move to dial cell phone fallback for 40s
    // and last we'll call on the voicemail function       

}

А вот наша функция connectAgent, которую вызывает маршрут connect-agent.

    public function connectAgent() {
    $response = new Twiml\VoiceResponse;
    $dequeue = $response->dial('');

    $dequeue->queue('main');
}

Я подумал, что в основном нужно перевести «statusCallback» в новый метод, когда мы прочитали, что был «нет ответа», и позвонили по следующему номеру в строке.Я не знаю, как отслеживать, какие числа остались, передавая переменную через обратный вызов.Было бы лучше установить его в базу данных и сделать что-то вроде поиска оставшихся массивов, где записи еще существуют, и набрать следующий номер?Я мог бы установить массив и его параметры в базе данных при первом вызове функции.

Я мог бы избежать проблемы, когда два человека звонят одновременно и портят код, просто создавая различные идентификаторы массива и выполняя только одинустанавливается за раз.

Любые указания приветствуются!

ОБНОВЛЕНИЕ Сервер PHP вызывал бесконечные циклы.Перемещение тестирования в мой бродячий ящик решило эту проблему, и теперь я могу без проблем вызывать маршрут Laravel с того же сервера.Это вместе с ответом прохождения массива через обратный вызов помогло мне решить эту проблему.Обновленный код для справки.

Эта следующая проблема помогла мне выяснить проблему с зависанием второго запроса: Вызов маршрута с того же сервера вызывает бесконечный цикл

1 Ответ

0 голосов
/ 04 февраля 2019

Разработчик Twilio здесь.

Что вы можете сделать, это добавить текущий номер в качестве параметра запроса к URL-адресу statusCallback.Таким образом, при вызове обратного вызова вы можете найти этот номер в списке номеров и затем перейти к следующему.Таким образом, вам не нужно ничего хранить в базе данных.

Дайте мне знать, если это поможет.

...