Bitrix24 REST API позволяет интегрировать внешние сервисы с корпоральным порталом: управлять задачами, сделками CRM, пользователями и отправлять уведомления. Разберём как создать приложение с нуля.
Способы подключения к API
- Входящий вебхук — простой URL с токеном, без OAuth
- Локальное приложение — OAuth 2.0 для конкретного портала
- Тиражное приложение — OAuth 2.0 для публикации в маркетплейс
Входящий вебхук — быстрый старт
В Bitrix24: Приложения → Вебхуки → Добавить входящий вебхук.
// Базовый запрос через file_get_contents
$webhookUrl = 'https://your-portal.bitrix24.ru/rest/1/your_token/';
function b24Call(string $method, array $params = [], string $webhookUrl = ''): array
{
$url = $webhookUrl . $method . '.json';
$opts = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query($params),
'timeout'=> 30,
],
];
$response = file_get_contents($url, false, stream_context_create($opts));
return json_decode($response, true) ?? [];
}
// Получить список пользователей
$result = b24Call('user.get', ['ACTIVE' => true], $webhookUrl);
print_r($result['result']);
Работа с CRM (сделки, контакты, лиды)
// Получить список сделок
$deals = b24Call('crm.deal.list', [
'order' => ['DATE_CREATE' => 'DESC'],
'filter' => ['STAGE_ID' => 'WON'],
'select' => ['ID', 'TITLE', 'OPPORTUNITY', 'CONTACT_ID'],
'start' => 0,
], $webhookUrl);
// Создать сделку
$newDeal = b24Call('crm.deal.add', [
'fields' => [
'TITLE' => 'Новая сделка',
'STAGE_ID' => 'NEW',
'OPPORTUNITY' => 150000,
'CURRENCY_ID' => 'RUB',
'ASSIGNED_BY_ID' => 1,
],
], $webhookUrl);
echo 'Создана сделка ID: ' . $newDeal['result'];
Работа с задачами
// Список задач пользователя
$tasks = b24Call('tasks.task.list', [
'filter' => ['RESPONSIBLE_ID' => 1, 'STATUS' => 2], // в работе
'select' => ['ID', 'TITLE', 'DEADLINE', 'STATUS'],
'order' => ['DEADLINE' => 'ASC'],
], $webhookUrl);
// Создать задачу
$task = b24Call('tasks.task.add', [
'fields' => [
'TITLE' => 'Проверить интеграцию',
'RESPONSIBLE_ID' => 5,
'DEADLINE' => date('c', strtotime('+3 days')),
'DESCRIPTION' => 'Описание задачи',
],
], $webhookUrl);
// Завершить задачу
b24Call('tasks.task.complete', ['taskId' => $task['result']['task']['id']], $webhookUrl);
Отправка уведомлений
// Уведомление пользователю
b24Call('im.notify.personal.add', [
'USER_ID' => 5,
'MESSAGE' => 'Заказ #123 оплачен. Проверьте CRM.',
], $webhookUrl);
// Сообщение в чат
b24Call('im.message.add', [
'DIALOG_ID' => 'chat123',
'MESSAGE' => 'Автоматическое уведомление: новый лид',
], $webhookUrl);
Пагинация (обход всех записей)
function b24GetAll(string $method, array $params, string $webhookUrl): array
{
$all = [];
$start = 0;
do {
$params['start'] = $start;
$response = b24Call($method, $params, $webhookUrl);
$items = $response['result'] ?? [];
$all = array_merge($all, $items);
$total = $response['total'] ?? 0;
$start += 50;
} while ($start < $total);
return $all;
}
// Получить всех контактов
$contacts = b24GetAll('crm.contact.list', [
'select' => ['ID', 'NAME', 'PHONE', 'EMAIL'],
], $webhookUrl);
Обработка ошибок
$response = b24Call('crm.deal.get', ['id' => 99999], $webhookUrl);
if (isset($response['error'])) {
$errorCode = $response['error']; // 'NOT_FOUND'
$errorDesc = $response['error_description']; // 'Item not found'
throw new \RuntimeException("Bitrix24 API error: {$errorCode} — {$errorDesc}");
}
Итог
Входящий вебхук — самый быстрый способ начать работать с Bitrix24 API. Для продакшн-интеграций с несколькими порталами используйте OAuth-приложения. Всегда реализуйте пагинацию при получении списков — по умолчанию API возвращает не более 50 записей.
