Начало работы

Краткое руководство по работе с SDK для REST API Bitrix24
Эта страница ещё обновляется. Некоторые данные могут отсутствовать — мы их вскоре дополним.

Обзор

SDK для работы с REST API Bitrix24 предоставляет единый интерфейс для взаимодействия с API Bitrix24 из JavaScript/TypeScript-приложений. Эта страница поможет вам быстро начать работу с библиотекой.

Выбор подходящего класса

Выберите класс в зависимости от сценария использования:

СценарийКлассОписание
Приложение, встроенное в интерфейс Bitrix24B24FrameАвтоматически доступен в iframe, использует токен текущего пользователя
Автономное серверное приложение с вебхукомB24HookИспользует постоянный токен вебхука для серверных приложений
Автономное серверное приложение с OAuthB24OAuthИспользует OAuth 2.0 с возможностью обновления токена

Для клиентских приложений (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. Выбирайте правильный метод для работы со списками

Объём данныхМетодПочему
< 1000 записейCallListУдобно использовать, все данные сразу
> 1000 записейFetchListЭффективен по памяти, потоковая обработка
Выборочные данныеCall + BatchТолько нужные записи, контроль над запросами

Нужна помощь?


Совет: Начните с простых запросов (например, user.current), чтобы убедиться, что соединение работает корректно, прежде чем переходить к сложным операциям с CRM или задачами.