Начало работы
Обзор
SDK для работы с REST API Bitrix24 предоставляет единый интерфейс для взаимодействия с API Bitrix24 из JavaScript/TypeScript-приложений. Эта страница поможет вам быстро начать работу с библиотекой.
Выбор подходящего класса
Выберите класс в зависимости от сценария использования:
Для клиентских приложений (B24Frame)
Если вы разрабатываете приложение, которое будет работать внутри интерфейса Bitrix24:
// @check-ignore: declares own $b24 with B24Frame type without import
// В приложении, встроенном в Bitrix24
let $b24: undefined | B24Frame
async function getCurrentUser() {
if (!$b24) {
return
}
try {
const response = await $b24.actions.v2.call.make({
method: 'user.current',
requestId: 'get-current-user'
})
if (response.isSuccess) {
const user = response.getData()
console.log('Current user:', user)
return user
} else {
console.error('Error:', response.getErrorMessages())
}
} catch (error) {
console.error('Unexpected error:', error)
}
}
// Пример получения списка контактов
async function getContacts() {
if (!$b24) {
return
}
const response = await $b24.actions.v2.callList.make({
method: 'crm.contact.list',
params: {
filter: { '>ID': 0 },
select: ['ID', 'NAME', 'LAST_NAME', 'EMAIL']
},
idKey: 'ID',
requestId: 'get-all-contacts'
})
if (response.isSuccess) {
return response.getData()
}
return []
}
async function init() {
$b24 = await initializeB24Frame()
}
await init()
Для серверных приложений с вебхуком (B24Hook)
Для серверных приложений с постоянным доступом через вебхук:
import { B24Hook } from '@bitrix24/b24jssdk'
// 1. Получите URL вебхука в Bitrix24:
// - Перейдите в Bitrix24
// - Настройки → Разработчикам → Вебхуки
// - Создайте новый вебхук с необходимыми правами
// - Скопируйте URL в формате: https://your-domain.bitrix24.com/rest/1/your-token/
// 2. Инициализируйте B24Hook
const $b24 = B24Hook.fromWebhookUrl('https://your-domain.bitrix24.com/rest/1/your-token/')
// 3. Используйте методы API
async function getCompany(companyId: number) {
const response = await $b24.actions.v2.call.make({
method: 'crm.company.get',
params: { id: companyId },
requestId: `get-company-${companyId}`
})
if (response.isSuccess) {
return response.getData()
} else {
throw new Error(`Error getting company: ${response.getErrorMessages().join(', ')}`)
}
}
// Пример массового создания сделок
async function createMultipleDeals(dealsData: Array<{title: string, opportunity: number}>) {
const calls = dealsData.map((deal, index): [string, Record<string, unknown>] => [
'crm.deal.add',
{
fields: {
TITLE: deal.title,
OPPORTUNITY: deal.opportunity,
CATEGORY_ID: 0
}
}
])
const response = await $b24.actions.v2.batchByChunk.make({
calls,
options: {
requestId: 'bulk-create-deals'
}
})
return response
}
Для серверных приложений с OAuth (B24OAuth)
Для серверных приложений с аутентификацией через OAuth 2.0:
import { B24OAuth } from '@bitrix24/b24jssdk'
// 1. Зарегистрируйте приложение в Bitrix24:
// - Перейдите в Bitrix24
// - Настройки → Разработчикам → Приложения
// - Создайте новое приложение
// - Получите Client ID и Client Secret
// 2. Инициализируйте B24OAuth — передайте данные токена и OAuth-учётные данные отдельно.
// Полную форму B24OAuthParams см. на странице справочника OAuth.
import { EnumAppStatus } from '@bitrix24/b24jssdk'
const $b24 = new B24OAuth(
{
applicationToken: 'current_application_token',
userId: 1,
memberId: 'portal_member_id',
accessToken: 'current_access_token',
refreshToken: 'refresh_token',
expires: 1745997853, // unix timestamp, секунды
expiresIn: 3600,
scope: 'crm,user_brief',
domain: 'your-domain.bitrix24.com',
clientEndpoint: 'https://your-domain.bitrix24.com/rest/',
serverEndpoint: 'https://oauth.bitrix.info/rest/',
status: EnumAppStatus.Free
},
{
clientId: 'your_client_id',
clientSecret: 'your_client_secret'
}
)
// 3. Используйте методы API
async function getTasks() {
const response = await $b24.actions.v2.call.make({
method: 'tasks.task.list',
params: {
filter: { '>ID': 0 },
select: ['ID', 'TITLE', 'STATUS']
},
requestId: 'get-all-tasks'
})
return response
}
// B24OAuth автоматически обновляет токены при их истечении
Первые шаги с API
Простой тест подключения
// @check-ignore: partial snippet — B24Hook used without import
// Проверка доступности API
async function testConnection() {
// Для B24Hook или B24OAuth
const $b24 = B24Hook.fromWebhookUrl('https://your-domain.bitrix24.com/rest/1/your-token/')
// 1. Проверьте доступность
const isHealthy = await $b24.tools.healthCheck.make({
requestId: 'health-check'
})
if (!isHealthy) {
console.error('API unavailable. Check the webhook and connection.')
return
}
// 2. Измерьте скорость
const pingTime = await $b24.tools.ping.make({
requestId: 'ping-test'
})
console.log(`API available, response time: ${pingTime}ms`)
// 3. Получите данные текущего пользователя
const userResponse = await $b24.actions.v2.call.make({
method: 'user.current',
requestId: 'get-current-user'
})
if (userResponse.isSuccess) {
console.log('Current user:', userResponse.getData())
}
return true
}
Базовые операции с CRM
// Создание контакта
async function createContact(name: string, lastName: string, email: string) {
const response = await $b24.actions.v2.call.make({
method: 'crm.contact.add',
params: {
fields: {
NAME: name,
LAST_NAME: lastName,
EMAIL: [{ VALUE: email, VALUE_TYPE: 'WORK' }]
}
},
requestId: 'create-contact'
})
return response
}
// Получение списка контактов
async function getAllContacts() {
const generator = $b24.actions.v2.fetchList.make({
method: 'crm.contact.list',
params: {
select: ['ID', 'NAME', 'LAST_NAME', 'EMAIL'],
order: { ID: 'ASC' }
},
idKey: 'ID',
requestId: 'fetch-all-contacts'
})
const allContacts = []
for await (const chunk of generator) {
allContacts.push(...chunk)
console.log(`Loaded ${chunk.length} contacts, total: ${allContacts.length}`)
}
return allContacts
}
Примеры использования основных методов
// @check-ignore: partial snippet — processChunk not declared and top-level return
// 1. Одиночный вызов (Call)
const singleItem = await $b24.actions.v2.call.make({
method: 'crm.company.get',
params: { id: 123 },
requestId: 'single-call'
})
// 2. Получение всего списка (CallList)
const allItems = await $b24.actions.v2.callList.make({
method: 'crm.company.list',
params: {
filter: { '>ID': 0 },
select: ['ID', 'TITLE']
},
idKey: 'ID',
requestId: 'get-all-companies'
})
// 3. Потоковая обработка (FetchList)
const generator = $b24.actions.v2.fetchList.make({
method: 'crm.deal.list',
params: { select: ['ID', 'TITLE', 'OPPORTUNITY'] },
idKey: 'ID',
requestId: 'stream-deals'
})
for await (const chunk of generator) {
// Обрабатываем пачками по 50 элементов
processChunk(chunk)
}
// 4. Пакетная обработка (Batch)
const batchResult = await $b24.actions.v2.batch.make({
calls: [
['crm.company.get', { id: 1 }],
['crm.company.get', { id: 2 }],
['crm.company.get', { id: 3 }]
],
options: {
requestId: 'batch-get-companies'
}
})
// 5. Массовая пакетная обработка (BatchByChunk)
const commands = Array.from({ length: 150 }, (_, i): [string, Record<string, unknown>] => [
'crm.contact.add',
{ fields: { NAME: `Contact ${i + 1}` } }
])
const bulkResult = await $b24.actions.v2.batchByChunk.make({
calls: commands,
options: {
requestId: 'bulk-create-contacts'
}
})
Советы для начинающих
1. Всегда используйте requestId
// Хорошо
await $b24.actions.v2.call.make({
method: 'crm.contact.get',
params: { id: 123 },
requestId: `contact-${123}-${Date.now()}`
})
// Плохо (без requestId будет сложно отладить)
await $b24.actions.v2.call.make({
method: 'crm.contact.get',
params: { id: 123 }
})
2. Проверяйте результаты операций
// @check-ignore: top-level return in error-handling illustration
const response = await $b24.actions.v2.call.make({
method: 'some.method',
params: { /* ... */ },
requestId: 'my-request'
})
// Всегда проверяйте isSuccess
if (!response.isSuccess) {
console.error('Error:', response.getErrorMessages())
// Обработка ошибки
return
}
// Только после успешной проверки работаем с данными
const data = response.getData()!
3. Выбирайте правильный метод для работы со списками
Нужна помощь?
Совет: Начните с простых запросов (например, user.current), чтобы убедиться, что соединение работает корректно, прежде чем переходить к сложным операциям с CRM или задачами.