Ограничение выдачи результата в методе 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'));
...
ну дальше уже обработка результата
- Покажите что Вы дальше делаете с переменной
$generator
, чтобы обработать результаты. - По соображениям безопасности реальное значение
$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;
-
Переменная
$generator
у Вас используется корректно. -
В таком простом цикле с запросом "быстрым методом"
fetchLeadList()
должны быть выгружены все лиды по 50 штук в одном ответе от генератора. Попробуйте.
foreach ($generator as $leads) {
foreach ($leads as $lead) {
print_r($lead);
}
}
- Если Ваша версия Bitrix24 по каким-то причинам возвращает с методом
fetchLeadList()
только 50 лидов, то попробуйте более простой и более медленный методgetLeadList()
. С ним тоже должны выгружаться все лиды.
Нашел проблему. Неправильно записывал $response->spam
и подобные. Это ж массивы, а я перезаписывал.
Спасибо
Пожалуйста. Успехов в борьбе с кодом )