andrey-tech / bitrix24-api-php

Обертка на PHP7+ для работы с REST API Битрикс24 с использованием механизма входящих вебхуков, троттлингом запросов к API и логированием в файл.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ограничение выдачи результата в методе fetchLeadList

nikolablin opened this issue · comments

Добрый день.
Получаю список лидов за вчерашний день методом fetchLeadList.
В ответе возвращается не более 50 лидов. Это заложено вашей библиотекой или это ограничение метода API Битрикса?
Можно ли его обойти?
Не нашел нигде свойства next или подобного.

Добрый день.
Приведите фрагмент вашего кода с методом fetchLeadList(), дабы понять что происходит.

  public function collectBitrixData($dateFrom = false, $dateTo = false)
  {
    try {
        $webhookURL = '***';
        $bx24 = new Bitrix24API($webhookURL);

        $bx24->http->debugLevel = HTTP::DEBUG_CONTENT;
        $bx24->http->throttle = 0.5;
        $bx24->http->curlTimeout = 30;

        $logFileName = __DIR__ . '/debug_bitrix24api.log';
        $logger = DebugLogger::instance($logFileName);
        $logger->isActive = true;
        $bx24->setLogger($logger);

        $filter = [
          '>DATE_CREATE' => $dateFrom->format('Y-m-d\T00:00:00'),
          '<DATE_CREATE' => $dateTo->format('Y-m-d\T23:59:59')
        ];

        $generator = $bx24->fetchLeadList($filter,array('*','UF_CRM_1649237225000'),array('DATE_CREATE'));
        ...

ну дальше уже обработка результата

  1. Покажите что Вы дальше делаете с переменной $generator, чтобы обработать результаты.
  2. По соображениям безопасности реальное значение $webhookURL тут лучше не показывать.

Извиняюсь, что-то я забыл про вебхук открытый)

Дальше проходим по результатам и собираем нужную информацию.

        $response = (object)array();
        $response->calls            = array();
        $response->website          = array();
        $response->creditors        = array();
        $response->coldleads        = array();
        $response->officeleads      = array();
        $response->firstTimeClient  = array();
        $response->backClient       = array();
        $response->spam             = array();

        foreach ($generator as $leads) {
          foreach ($leads as $lead) {
            $actfLead = false;
            switch($lead['SOURCE_ID']){
              case '9681736567':
                $response->calls[] = $lead;
                $actfLead = true;
                break;
              case '9681736580':
                $response->website[] = $lead;
                $actfLead = true;
                break;
              case '9681736581':
                $response->creditors[] = $lead;
                $actfLead = true;
                break;
              case '4':
                $response->coldleads[] = $lead;
                $actfLead = true;
                break;
              case '9681736518':
                $response->officeleads[] = $lead;
                $actfLead = true;
                break;
            }

            if($lead['UF_CRM_1649237225000'] == 586 OR $actfLead === true){
              if($lead['IS_RETURN_CUSTOMER'] == 'Y'){
                $response->backClient = $lead;
              }

              if($lead['IS_RETURN_CUSTOMER'] == 'N'){
                $response->firstTimeClient = $lead;
              }

              if($lead['STATUS_ID'] == 'JUNK' OR
                $lead['STATUS_ID'] == '10' OR
                $lead['STATUS_ID'] == '2' OR
                $lead['STATUS_ID'] == '6' OR
                $lead['STATUS_ID'] == '7' OR
                $lead['STATUS_ID'] == '8' OR
                $lead['STATUS_ID'] == '9' OR
                $lead['STATUS_ID'] == '11' OR
                $lead['STATUS_ID'] == '12'){
                $response->spam = $lead;
              }
            }
          }
        }

    } catch (Bitrix24APIException $e) {
        printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
    } catch (Exception $e) {
        printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
    }

    return $response;

  1. Переменная $generator у Вас используется корректно.

  2. В таком простом цикле с запросом "быстрым методом" fetchLeadList() должны быть выгружены все лиды по 50 штук в одном ответе от генератора. Попробуйте.

foreach ($generator as $leads) {
    foreach ($leads as $lead) {
        print_r($lead);
    }
}
  1. Если Ваша версия Bitrix24 по каким-то причинам возвращает с методом fetchLeadList() только 50 лидов, то попробуйте более простой и более медленный метод getLeadList(). С ним тоже должны выгружаться все лиды.

Нашел проблему. Неправильно записывал $response->spam и подобные. Это ж массивы, а я перезаписывал.
Спасибо

Пожалуйста. Успехов в борьбе с кодом )