@bitrix24/b24jssdk — официальный JavaScript SDK для работы с REST API Bitrix24. Предназначен для создания приложений, интеграций и автоматизации бизнес-процессов в экосистеме Bitrix24.
Ключевые возможности:
- 🔄 Вызов REST API методов Bitrix24 (фронтенд iframe / бэкенд через webhook)
- 🖼️ Управление UI: слайдеры, диалоги, изменение размера фрейма, заголовки
- 📦 Helpers: профили, валюты, лицензии, опции, платежи
- 📡 Pull Client для real-time коммуникации
- 🔐 Автоматическое управление OAuth токенами и refresh
Версия: 0.4.10 | Лицензия: MIT | Node.js: ^18.0.0 || ^20.0.0 || >=22.0.0
npm install @bitrix24/b24jssdk<script src="https://unpkg.com/@bitrix24/b24jssdk@latest/dist/umd/index.min.js"></script>npx nuxi module add @bitrix24/b24jssdk-nuxtДокументация:
Примеры проектов:
Для уточнения методов и параметров REST API используйте Bitrix24 MCP server.
См. также: инструкция по MCP и официальная страница https://apidocs.bitrix24.ru/sdk/mcp.html
Используется для приложений, встроенных в портал Bitrix24 через placement.
import { initializeB24Frame, B24Frame } from '@bitrix24/b24jssdk'
let $b24: B24Frame
$b24 = await initializeB24Frame() // Всегда await перед использованием!
// Вызов REST API
const result = await $b24.callMethod('crm.deal.list', { select: ['ID', 'TITLE'] })
// Очистка при размонтировании
$b24.destroy()📚 Ссылки:
Используется для бэкенд-сервисов, скриптов, интеграций.
import { B24Hook } from '@bitrix24/b24jssdk'
// Создание из URL webhook
const $b24 = B24Hook.fromWebhookUrl('https://your_domain.bitrix24.com/rest/1/k32t88gf3azpmwv3')
// Или через параметры
const $b24 = new B24Hook({
b24Url: 'https://your_domain.bitrix24.com',
userId: 123,
secret: 'k32t88gf3azpmwv3'
})
$b24.offClientSideWarning() // Отключить warning о клиентской стороне (только для Node.js!)📚 Ссылки:
Используется для приложений с OAuth авторизацией (не стабильная реализация).
import { B24OAuth } from '@bitrix24/b24jssdk'
const $b24 = new B24OAuth({
clientId: 'your_client_id',
clientSecret: 'your_client_secret'
})
// Обработка OAuth колбэка
await $b24.auth.handleOAuthCallback(callbackParams)📚 Ссылки:
// Одиночный вызов
const result = await $b24.callMethod('crm.deal.get', { id: 123 })
// Batch вызов (объект с ключами)
const batch = await $b24.callBatch({
deals: { method: 'crm.deal.list', params: { select: ['ID'] } },
contacts: { method: 'crm.contact.list', params: { select: ['ID'] } }
}, true) // true = halt on error
// Batch массивом
const batch = await $b24.callBatch([
['crm.deal.list', { select: ['ID'] }],
['crm.contact.list', { select: ['ID'] }]
], true)📚 Ссылки:
Стратегии:
callListMethod— загружает весь список в память (< 1000 записей)fetchListMethod— stream по чанкам (рекомендуется для больших данных)callMethodс ручной пагинацией — полный контроль
// callListMethod (всё в память)
const list = await $b24.callListMethod('crm.deal.list',
{ select: ['ID', 'TITLE'] },
(progress) => console.log(`Прогресс: ${progress}%`)
)
// fetchListMethod (потоковая загрузка)
for await (const chunk of $b24.fetchListMethod('crm.item.list', {
entityTypeId: 4, // company
select: ['id', 'title']
}, 'id')) {
console.log(`Получено ${chunk.length} записей`)
}📚 Ссылки:
import { AjaxError, AjaxResult, Result } from '@bitrix24/b24jssdk'
try {
const response: AjaxResult = await $b24.callMethod('crm.deal.get', { id: 999 })
if (response.isSuccess) {
const data = response.getData()
}
} catch (error) {
if (error instanceof AjaxError) {
console.error(`Ошибка API: ${error.code}`, error.message, error.status)
console.error('Request:', error.requestInfo)
}
}📚 Ссылки:
// Открыть слайдер с порталом
const url = $b24.slider.getUrl('/crm/deal/details/123')
const result = await $b24.slider.openPath(url, 1640) // ширина
// Открыть страницу приложения в слайдере
await $b24.slider.openSliderAppPage({ customParam: 'value' })
await $b24.slider.closeSliderAppPage()📚 Ссылки:
// Выбор пользователя
const user = await $b24.dialog.selectUser()
const users = await $b24.dialog.selectUsers()📚 Ссылки:
await $b24.parent.fitWindow() // Подогнать размер под контент
await $b24.parent.resizeWindow(800, 600)
await $b24.parent.setTitle('Мое приложение')
await $b24.parent.closeApplication()
await $b24.parent.scrollParentWindow(0)📚 Ссылки:
// App-level
await $b24.options.appSet('myKey', 'value')
const value = $b24.options.appGet('myKey')
// User-level
await $b24.options.userSet('theme', 'dark')
const theme = $b24.options.userGet('theme')📚 Ссылки:
import { useB24Helper, LoadDataType } from '@bitrix24/b24jssdk'
const {
initB24Helper,
getB24Helper,
usePullClient,
useSubscribePullClient,
startPullClient,
destroyB24Helper
} = useB24Helper()
// Инициализация после B24Frame
const $b24 = await initializeB24Frame()
await initB24Helper($b24, [
LoadDataType.Profile,
LoadDataType.App,
LoadDataType.Currency
])
// Доступ к данным
const helper = getB24Helper()
const userId = helper.profileInfo.data.id
const currencyName = helper.currency.getCurrencyFullName('USD', 'en')
// Pull Client
usePullClient()
useSubscribePullClient((message) => {
console.log('Pull message:', message)
}, 'application')
startPullClient()📚 Ссылки:
import { Type, Text, LoggerBrowser, EnumCrmEntityTypeId } from '@bitrix24/b24jssdk'
// Type helpers
Type.isStringFilled('test') // true
Type.isNumber(123) // true
// Text utilities
const dt = Text.toDateTime('2024-01-01T10:00:00Z') // Luxon DateTime
const uuid = Text.getUuidRfc4122()
const num = Text.numberFormat(12345.67, 2, '.', ' ') // "12 345.67"
// Logger
const logger = LoggerBrowser.build('MyApp', true) // isDev = true
logger.info('message', data)
logger.error('error', error)📚 Ссылки:
SDK предоставляет типы TypeScript для всех компонентов:
import {
EnumCrmEntityTypeId,
EnumCrmEntityType,
type TypeB24,
type AuthData,
type AjaxResultParams
} from '@bitrix24/b24jssdk'
// Использование enum для CRM сущностей
const dealId = EnumCrmEntityTypeId.deal // 2
const companyId = EnumCrmEntityTypeId.company // 4
// TypeB24 интерфейс для типизации B24Frame/B24Hook
function processB24(b24: TypeB24) {
// ...
}📚 Ссылки на типы:
- TypeB24 интерфейс
- TypeHttp интерфейс
- AuthData типы
- CRM Entity Types
- Common типы
- Payloads типы
- User типы
- Placement типы
- Все типы в папке types/
SDK автоматически управляет лимитами запросов через RestrictionManager:
import { RestrictionManagerParamsForEnterprise } from '@bitrix24/b24jssdk'
// Получить HTTP клиент
const http = $b24.getHttpClient()
// Для Enterprise тарифа можно увеличить лимиты
// (автоматически делается через LicenseManager в useB24Helper)
http.setRestrictionManagerParams(RestrictionManagerParamsForEnterprise)
// Проверить текущие параметры
const params = http.getRestrictionManagerParams()Лимиты по умолчанию:
- Batch размер: 50 команд
- Throttling: автоматическая задержка при превышении
📚 Ссылки:
- RestrictionManager
- RestrictionManager параметры
- Документация RestrictionManager
- Лимиты Bitrix24 REST API
Все основные классы доступны на GitHub:
| Компонент | Ссылка на исходный код |
|---|---|
| B24Frame | frame/frame.ts |
| B24Hook | hook/controller.ts |
| AbstractB24 | core/abstract-b24.ts |
| Http | core/http/controller.ts |
| AjaxError | core/http/ajax-error.ts |
| AjaxResult | core/http/ajax-result.ts |
| Result | core/result.ts |
| RestrictionManager | core/http/restriction-manager.ts |
| Auth (Frame) | frame/auth.ts |
| Auth (Hook) | hook/auth.ts |
| Slider | frame/slider.ts |
| Dialog | frame/dialog.ts |
| Parent | frame/parent.ts |
| Placement | frame/placement.ts |
| Options | frame/options.ts |
| useB24Helper | helper/use-b24-helper.ts |
| B24HelperManager | helper/helper-manager.ts |
| CurrencyManager | helper/currency-manager.ts |
| ProfileManager | helper/profile-manager.ts |
| Pull Client | pullClient/client.ts |
| Types | types/ |
Если проблема связана с вызовом конкретного REST метода:
- 🔗 Официальная документация REST API Bitrix24
- 🔗 Онлайн версия документации
- 🔗 CRM методы
- 🔗 Методы работы со списками
- 📋 CHANGELOG.md — история изменений и breaking changes
Если проблема не решена:
| Ошибка | Причина | Решение |
|---|---|---|
B24Frame is not initialized |
Не вызван await initializeB24Frame() |
Всегда вызывать await initializeB24Frame() перед использованием |
invalid_token / expired_token |
Токен истек | SDK автоматически обновляет токены. Проверить $b24.auth.refreshAuth() |
B24Hook warning on client |
Используется B24Hook на фронтенде | Переместить на сервер или использовать B24Frame |
Batch limit exceeded |
Слишком большой batch | Использовать callBatchByChunk() или уменьшить размер |
isMore() returns false |
Нет следующей страницы | Проверить условие while (result.isMore()) |
📚 Ссылки:
import { initializeB24Frame, B24Frame } from '@bitrix24/b24jssdk'
let $b24: B24Frame
async function init() {
try {
$b24 = await initializeB24Frame()
// Инициализация helpers (опционально)
const { initB24Helper } = useB24Helper()
await initB24Helper($b24, [LoadDataType.Profile, LoadDataType.App])
// Ваша логика
} catch (error) {
console.error('Init error:', error)
}
}
function cleanup() {
const { destroyB24Helper } = useB24Helper()
destroyB24Helper()
$b24?.destroy()
}import { B24Hook, LoggerBrowser } from '@bitrix24/b24jssdk'
const logger = LoggerBrowser.build('App', true)
const $b24 = B24Hook.fromWebhookUrl(process.env.B24_WEBHOOK_URL!)
$b24.setLogger(logger)
$b24.offClientSideWarning()
// Использование
async function getData() {
try {
const result = await $b24.callMethod('crm.deal.list', { select: ['ID'] })
return result.getData()
} catch (error) {
logger.error('API error:', error)
throw error
}
}✅ Всегда:
- Использовать
await initializeB24Frame()перед работой с B24Frame - Вызывать
$b24.destroy()при размонтировании компонента - Использовать
try-catchдля обработкиAjaxError - Для больших списков (>1000) использовать
fetchListMethod()вместоcallListMethod() - Проверять
response.isSuccessперед обработкой данных - Использовать TypeScript типы для безопасности
- Логировать ошибки через
LoggerBrowser
❌ Никогда:
- Не использовать B24Hook на клиенте (только сервер!)
- Не забывать
awaitперед асинхронными вызовами - Не игнорировать ошибки (всегда обрабатывать через
catch) - Не использовать CommonJS (с версии 0.4.0 только ESM/UMD)
- Не забывать вызывать
destroy()при очистке - Не превышать лимиты batch (по умолчанию 50 команд)
🔍 При ошибках:
- Проверить исходный код класса в GitHub
- Изучить документацию метода
- Проверить примеры использования
- Обратиться к REST API документации Bitrix24
- Проверить CHANGELOG на breaking changes
- Batch запросы — группировать связанные запросы
- fetchListMethod — для больших данных использовать потоковую загрузку
- RestrictionManager — автоматически управляет throttling
- Кэширование — сохранять результаты через
options.appSet/userSet
Версия документа: 1.0
Дата: 2025-10-23
SDK версия: 0.4.10