@nevesomostjke

Как разобраться в API Ростелеком? Curl?

Всем привет!
Подрубил себе на сайт Виртуальную АТС Ростелекома
Пытаюсь получить журнал вызовов, исходя из ихнего гайда https://numbers.cloudpbx.rt.ru/docs/NT.API.Rukovod... надо сначала сделать запрос на формирование журнала, я делаю его:
$apikey = "";
        $signkey = "";
        $query = '
        {
            "date_start":"2022-02-25 00:00:00",
            "date_end":"2022-03-17 00:00:00",
            "direction": 1,
            "state": 0
        }';

        // Создание подписи
        $sign = $apikey.$query.$signkey;
        $sign = hash('sha256', $sign);
        
        $headers = array(
            'X-Client-ID: ',
            'X-Client-Sign: '.$sign.'',
        );
         
        $ch = curl_init('https://api.cloudpbx.rt.ru/domain_call_history');
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);  
        curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $html = curl_exec($ch);
        curl_close($ch);
         
        $json = json_decode($html);  
        // $json->order_id

Получаю ID этого журнала. Далее в соответствии с гайдом мне нужно скачать его. Я пробую скачать файл курлом
// Качаем журнал звонков
        $path = 'file.gzip';
        
        $query = '
        {
            "order_id": "'.$json->order_id.'"
        }';

        // Создание подписи
        $sign = $apikey.$query.$signkey;
        $sign = hash('sha256', $sign);

        $headers = array(
            'X-Client-ID: ',
            'X-Client-Sign: '.$sign.''
        );

        $fp = fopen($path, 'w');
        
        $ch = curl_init('https://api.cloudpbx.rt.ru/download_call_history');

        curl_setopt($ch, CURLOPT_FILE, $fp);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);  
        curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $data = curl_exec($ch);
        
        curl_close($ch);
        
        fclose($fp);

        print_r($data);

В ответ я получаю:
404 Not Found
nginx

Тоже самое записывается в файл.
Может нужно какие-то заголовки передавать типо multi-data и тп?
  • Вопрос задан
  • 301 просмотр
Решения вопроса 2
402d
@402d
начинал с бейсика на УКНЦ в 1988
проверить что запрос на формирование выгрузки принят успешно
Сам журнал попробывать скачать через одну минуту
Ответ написан
@haveacess
404 - ресурс не найден, скачать в целом ничего не получится. Тоесть отправляете не то или не туда.
Когда ресурс уже будет получен - тогда уже можно с ним работать.

Беглым взглядом глянул доку. Изначально файл еще не формируется. Отправляется лишь запрос на его формирование, а затем - получаете ID задания. После - стучитесь по этому ID задания как только файл будет готов и получаете его.
Выдержка из доки которую вы скинули - В случае успешной обработки запроса в ответе приходит номер, присвоенный заданию на формирование файла с выгрузкой

Как понять что файл был готов - опять же судя по всему вам отправится callback в ваш crm
Уведомление отправляется в CRM, когда файл с журналом вызовов готов и его
можно скачать по указанному идентификатору выгрузки.


ну и последнее запрос самого файла - смотрите внимательно. Отправлять нужно - идентификатор выгрузки журнала (не перепутайте с другим айдишником)
Уведомление отправляется в CRM, когда файл с журналом вызовов готов и его
можно скачать по указанному идентификатору выгрузки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы