Отправить пакет запросов BX24.callBatch

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Функция BX24.callBatch отправляет несколько вызовов методов Битрикс24 одним запросом. Пакет удобен, когда нужно выполнить серию вызовов подряд: например, при установке приложения создать нужные объекты или получить пользователя и сразу его отдел.

void BX24.callBatch(
    Object|Array calls,
    [Function callback[,
    Boolean bHaltOnError = false]]
);

Функция ничего не возвращает: результаты всех команд приходят в функцию callback. Если вызвать BX24.callBatch до BX24.init, библиотека отложит запрос до завершения инициализации.

Параметры

Обязательные параметры отмечены *

Название
тип

Описание

calls*
object|array

Команды пакета — массив или объект. Каждая команда — массив [имя_метода, параметры_метода] или объект {method: имя_метода, params: параметры_метода}. Ключи объекта становятся ключами результатов в callback.

В параметрах команды можно сослаться на результат предыдущей команды макросом $result[ключ_команды][поле_ответа], например $result[get_user][UF_DEPARTMENT].

Команды сверх 50-й Битрикс24 не выполнит. Пустой пакет библиотека не отправляет, и callback не вызывается

callback
function

Функция, которая получит результаты команд — массив или объект объектов ajaxResult с теми же ключами, что в calls

bHaltOnError
boolean

Останавливать ли пакет на первой ошибке. Команды после ошибки не выполнятся, и их ключей не будет в результате. По умолчанию — false: Битрикс24 выполнит все команды

Примеры кода

Как использовать примеры в документации

Получить текущего пользователя методом user.current и в том же пакете — его отделы методом department.get. Вторая команда берет идентификаторы отделов из ответа первой через макрос. Приложению нужны scope department и один из scope для данных пользователя: user, user_brief или user_basic:

BX24.init(() => {
    BX24.callBatch({
        get_user: ['user.current', {}],
        get_department: {
            method: 'department.get',
            params: {
                ID: '$result[get_user][UF_DEPARTMENT]',
            },
        },
    }, (result) => {
        for (const key of ['get_user', 'get_department'])
        {
            // с bHaltOnError = true команд после ошибки в результате нет
            if (!result[key])
            {
                console.error(key + ': команда не выполнялась');
                return;
            }

            if (result[key].error())
            {
                console.error(key + ': ' + result[key].error().toString());
                return;
            }
        }

        const user = result.get_user.data();
        const departments = result.get_department.data().map((department) => department.NAME);
        console.log(user.NAME + ' ' + user.LAST_NAME + ': ' + departments.join(', ')); // Иван Петров: Отдел продаж
    }, true);
});

Обработка ответа

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

{
    "result": {
        "result": {
            "get_user": {
                "ID": "10",
                "ACTIVE": true,
                "NAME": "Иван",
                "LAST_NAME": "Петров",
                "UF_DEPARTMENT": [1]
            },
            "get_department": [
                {
                    "ID": "1",
                    "NAME": "Отдел продаж",
                    "SORT": 500
                }
            ]
        },
        "result_error": [],
        "result_total": {
            "get_department": 1
        },
        "result_next": [],
        "result_time": {
            "get_user": {
                "start": 1790289763,
                "finish": 1790289763.9619,
                "duration": 0.9619,
                "processing": 0,
                "date_start": "2026-09-24T22:42:43+00:00",
                "date_finish": "2026-09-24T22:42:43+00:00"
            },
            "get_department": {
                "start": 1790289763,
                "finish": 1790289763.9637,
                "duration": 0.9637,
                "processing": 0,
                "date_start": "2026-09-24T22:42:43+00:00",
                "date_finish": "2026-09-24T22:42:43+00:00"
            }
        }
    },
    "time": {
        "start": 1790289763,
        "finish": 1790289763.9651,
        "duration": 0.9651,
        "processing": 0,
        "date_start": "2026-09-24T22:42:43+00:00",
        "date_finish": "2026-09-24T22:42:43+00:00"
    }
}

Библиотека раскладывает этот ответ по командам: callback получает результаты с теми же ключами, что в calls. Каждый результат — объект ajaxResult: данные команды возвращает метод data(), ошибку — метод error(). Например, result.get_department.data() вернет массив из поля result.result.get_department.

Результат команды отличается от результата BX24.callMethod:

  • у команды с ошибкой data() возвращает пустой объект {}, а не undefined
  • error_description() всегда возвращает undefined. Текст ошибки лежит в result[ключ].error().ex.error_description
  • в свойстве answer нет времени выполнения запроса
  • next() запрашивает следующую страницу отдельным вызовом метода, вне пакета. Без аргумента он передаст страницу в callback пакета одним результатом, а не объектом с ключами, поэтому передайте в next() отдельный обработчик
  • если в параметрах команды есть макрос $result, next() отправит его как есть: Битрикс24 подставляет макросы только внутри пакета. Для такой команды запросите следующую страницу новым пакетом из одной команды — с готовыми значениями параметров и параметром start. Через BX24.callMethod так не получится: параметр start из params библиотека удаляет

Обработка ошибок

Ошибка приходит по каждой команде отдельно. Если bHaltOnError не включен, остальные команды пакета выполнятся. Метод result[ключ].error() возвращает такой же объект ошибки, как у BX24.callMethod. HTTP-статус в нем — статус всего пакета, поэтому у ошибки команды он обычно 200:

{
    "status": 200,
    "ex": {
        "error": "ERROR_METHOD_NOT_FOUND",
        "error_description": "Method not found!"
    }
}

Если включен bHaltOnError, ключей команд после ошибки в результате нет. Проверьте, что ключ есть, прежде чем вызывать error(): иначе обработчик остановится с ошибкой JavaScript.

Название
тип

Описание

error
string

Строковый код ошибки. Состоит из цифр, латинских букв и знака подчеркивания. Может прийти пустым — тогда причину показывает только error_description

error_description
string

Текст ошибки для разработчика. Не показывайте его конечному пользователю без обработки

Возможные коды ошибок

Коды ошибок команды зависят от вызванного метода и описаны на его странице. Ошибки самого пакета:

Статус

Код

Описание

Значение

200

ERROR_BATCH_LENGTH_EXCEEDED

Max batch length exceeded

В пакете больше 50 команд. Если bHaltOnError не включен, эту ошибку получит каждая команда сверх лимита, иначе — только 51-я

200

ERROR_BATCH_METHOD_NOT_ALLOWED

Method is not allowed for batch usage

В пакет передан метод, который нельзя вызывать в пакете, например вложенный batch

Ошибка всего пакета в callback не попадает:

  • если Битрикс24 вернул ошибку на весь пакет, а не на отдельную команду, библиотека остановится с ошибкой JavaScript при разборе ответа
  • при ответе со статусом 5xx, сетевом сбое и ответе, который не удалось разобрать как JSON, библиотека выбрасывает исключение Query error! из асинхронного обработчика запроса, поэтому try/catch вокруг вызова его не перехватит

Статусы и коды системных ошибок

HTTP-статус: 4xx, 5xx

Описанные ниже ошибки возвращает сам REST API, а не логика конкретного метода. Они могут прийти в ответ на любой метод.

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Сервер вернул неожиданный ответ. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически, когда накопленное время выполнения метода перестает превышать лимит

401

NO_AUTH_FOUND
Wrong authorization data

В запросе нет авторизационных данных: не передан ни access-токен, ни код вебхука

401

INVALID_REQUEST
Https required

Методы вызываются только по протоколу HTTPS

401

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка. Чтобы ее снять, обратитесь в техническую поддержку Битрикс24

401

ACCESS_DENIED
REST is available only on commercial plans

REST API доступен только на коммерческих тарифах. У вебхука текст ошибки другой — REST is available only by subscription

401

INVALID_CREDENTIALS
Invalid request credentials

Не найден активный вебхук с указанным идентификатором пользователя и секретным кодом

404

ERROR_METHOD_NOT_FOUND
Method not found!

Метод с таким именем не найден. Имя написано с ошибкой, метода нет в REST API или он недоступен без нужного скоупа

401

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более широких прав, чем есть у токена: у вебхука это выданные ему права, у приложения — скоуп. У приложения текст ошибки заканчивается на provided by the access token

401

expired_token
The access token provided has expired

Срок действия access-токена истек

401

user_access_error
The user does not have access to the application

Приложение установлено, но администратор Битрикс24 открыл доступ к нему только конкретным пользователям

403

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть ее на коробочной установке, отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение