Особенности обновления данных на облачном портале Битрикс 24

Очень часто в рамках портала Битрикс 24 необходимо решать задачи по обновлению начальных данных. Например, у вас есть клиентская база, вы получили информацию по дням рождения клиентов и хотите обновить данные в облаке. Как выполнить обновление большого массива данных Битрикс 24?

Рабочим вариантом будет импорт базы с днями рождениями в какую — либо готовую структуру данных, в частности, лиды на определенном этапе. Далее, надо написать обработчик на базе вебхуков, который пройдется по этим лидам, возьмет из них информацию, отыщет соответствующий контакт и обновит последний.

При разработке учитываем следующие нюансы:

  • за раз в выборку любого метода *.*.list попадает не более 50ти записей. Чтобы обойти это ограничение программируем своеобразную «матрешку»: вначале вычисляем общее количество лидов в выборке — $total, потом передаем это значение в пакетную функцию, кодом которой любезно делюсь ниже
function executeBatch ($method, $params, $domain, $access_token, $total, $user) {
$calls = ceil($total / 50); $current_call = 0;
$batch = array();
$result = array();
do {
$current_call++;
$batch['get_' . $current_call] =
$method.'?'.http_build_query(
array_merge($params,
array(
"start" => ($current_call - 1) * 50
)
)
);
if ((count($batch) == 50) || ($current_call == $calls)) {

global $debug;
if ($debug) {
echo 'batch: '.$method.': <pre>';
print_r($batch);
echo '</pre>';
}

$batch_result = executeREST('batch', array('halt' => 0, 'cmd' => $batch), $domain, $access_token, $user);

$result = array_merge($result, $batch_result);

$batch = array();
}


} while ($current_call < $calls);
return $result;
}

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

$result['result']['result']['get_'.$n.']
  • как показывает практика одновременный запуск свыше 1000 вебхуков ведет к падению облачного портала в рамках http-ошибки.
Обновление большого массива данных Битрикс 24

Нормальных инструментов обойти вендор пока не предлагает. Поэтому, единственным вариантом выступает запись в текстовый лог или таблицу базы данных на сервере, где запускается php — скрипт, ID каждого обработанного лида и последующий перезапуск скрипта с условием ID больше (или меньше — в зависимости от сортировки) вашего скрипта.

Общую информацию по написанию вебхуков вы можете получить по ссылке , однако рекомендаций как правильно выполнить обновление большого массива данных Битрикс 24 последняя не содержит.