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

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

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
void BX24.callBatch(
    Object|Array calls,
    [Function callback[,
    Boolean bHaltOnError = false]]
);

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

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

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

Параметры

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

Название
тип

Описание

calls*
object|array

Команды пакета — массив или объект команд (подробное описание). Ключи объекта становятся ключами результатов в callback.

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

callback
function

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

bHaltOnError
boolean

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

Команда пакета

Команду можно записать массивом [method, params] или объектом {method, params}.

Название
тип

Описание

method*
string

Название метода Битрикс24, например user.current. Команду без названия метода библиотека пропустит

params
object

Параметры метода в том же формате, что у BX24.callMethod. Если у метода нет обязательных параметров, params можно не передавать.

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

Примеры кода

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

Получить текущего пользователя методом user.current и в том же пакете — его отделы методом department.get. Вторая команда берет идентификаторы отделов из ответа первой через макрос. Поле UF_DEPARTMENT — массив, а department.get принимает в параметре ID и список идентификаторов, поэтому вернет отделы пользователя. Оба метода может вызвать любой пользователь. Приложению нужны 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"
    }
}

Библиотека раскладывает этот ответ по командам. Если calls — объект, callback получит результаты с теми же ключами, если массив — массив результатов в том же порядке. Каждый результат — объект ajaxResult. Его методы читают поля исходного ответа по ключу команды:

Метод

Поле исходного ответа

Что возвращает

data()

result.result[ключ]

Данные команды. У команды с ошибкой — пустой объект {}

error()

result.result_error[ключ]

Объект ошибки или undefined, если ошибки нет

total()

result.result_total[ключ]

Общее число записей списка или NaN, если метод его не вернул

more()

result.result_next[ключ]

true, если у списка есть следующая страница, иначе false

next(cb)

result.result_next[ключ]

Запрашивает следующую страницу. Возвращает false, если страниц больше нет, и undefined, если запрос отправлен

Например, result.get_department.data() вернет массив из поля result.result.get_department. Все поля исходного ответа описаны на странице метода batch.

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

  • error_description() всегда возвращает undefined. Текст ошибки лежит в result[ключ].error().ex.error_description
  • в свойстве answer нет времени выполнения запроса
  • next() запрашивает следующую страницу отдельным вызовом метода, вне пакета. Передайте в next() отдельный обработчик: без него страница придет в callback пакета одним результатом, а не объектом с ключами
  • если в параметрах команды есть макрос $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!"
    }
}

В исходном ответе пакета эта ошибка находится в поле result.result_error под ключом команды — пример есть на странице метода batch.

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

Название
тип

Описание

error
string

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

error_description
string

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

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

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

Статус

Код

Описание

Значение

200

ERROR_BATCH_LENGTH_EXCEEDED

Max batch length exceeded

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

200

ERROR_BATCH_METHOD_NOT_ALLOWED

Method is not allowed for batch usage

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

В callback не попадают:

  • ошибка expired_token. Библиотека сама обновляет авторизацию и повторяет пакет, а 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

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

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