Twilio - загруженные записи о вызовах иногда пусты

В настоящее время я борюсь с проблемой, когда небольшое количество записей пусто (при загрузке их с серверов Twilio), когда их не должно быть.

Моя заявка в настоящее время отвечает за около 10000 звонков в день. Каждый из этих вызовов, если получен ответ, записывается, и эта запись затем загружается на мой сервер.

По какой-то причине небольшое количество этих загруженных mp3-файлов пусто, их размер составляет 363 байта (без звука, только сам файл), хотя я знаю, что в mp3-файле должен быть контент. Например, некоторые вызовы будут длиться от 30 до 40 минут, но при загрузке будут иметь пустую запись.

Я занимаюсь разработкой на PHP и приложил код, используемый для загрузки записи ниже. Похоже, что-то может вызвать проблемы? Я пытался найти похожие проблемы, с которыми, возможно, сталкивались другие, пока не нашел ничего.

Имейте в виду, что этот код работает в 90% случаев... это только те 10%, которые загружаются неправильно.

Большое спасибо за ваше время!

public function index()
{
    if (isset($_REQUEST['RecordingUrl'])) {

        // Get the call ID from the url
        $confId = $this->security->xss_clean($_GET['confId']);
        $callId = $this->security->xss_clean($_GET['callId']);
        $userId = $this->security->xss_clean($_GET['userId']);

        // Twilio account information
        $accountSid = $this->config->item('twilio_accountSid');
        $authToken  = $this->config->item('twilio_authToken');

        // Download the recording to our server
        $callUrl = 'recordings/calls/' . $callId . '.mp3';
        $this->getMp3($_REQUEST['RecordingUrl'], $callUrl);

        // Delete the recording from Twilio's servers
        $this->deleteMp3($_REQUEST['RecordingUrl'], $accountSid, $authToken);

        // Mark this call as completed and update its log
        $this->call->logEndOfCall($callId);

        // Load a blank Twilio response to keep the server from throwing an error
        $this->load->view('twilio/blank_twiml');
    }
}

private function getMp3($sourceUrl = '', $destinationUrl = '')
{
    // Add the '.mp3' onto the end of the url to return an mp3 file
    $sourceUrl = $sourceUrl . '.mp3';

    // Set the variables and initialize cURL
    $destinationUrl = '/' . $destinationUrl;
    $fp = fopen($destinationUrl, 'w+');
    $ch = curl_init();
    $timeout = 300;

    // Sleep for two seconds to prevent a race condition with Twilio
    sleep(2);

    // Set the options for cURL to download the file
    curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_URL, $sourceUrl);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

    // Execute the cURL
    curl_exec($ch);

    // Save any information for future debugging purposes
    $info = curl_getinfo($ch);

    // Close the new mp3 file and cURL
    curl_close($ch);
    fclose($fp);
}

private function deleteMp3($url = '', $username, $password)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    $result = curl_exec($ch);
    curl_close($ch);
}

1 ответ

Решение

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

Что я сделал, чтобы обойти эту проблему сейчас, так это реализовать цикл, который будет вызывать getMp3 несколько раз, пока не будет подтверждено, что файл был загружен правильно. Я сделал это, используя функцию PHP для изменения размера файлов.

Другие вопросы по тегам