Зауважимо: коли сайт не пов'язаний із CRM, менеджери витрачають до 2 годин на день на ручне введення заявок — до 30% лідів втрачаються через затримки та помилки. Втрати виручки для інтернет-магазину із середнім чеком 4000 грн можуть сягати 120 000 грн на місяць тільки через неопрацьовані заявки. Виконуємо підключення Бітрікс24 до сайту будь-якої складності: налаштовуємо автоматичну передачу даних із форм зворотного зв'язку, кошика інтернет-магазину та лендингів безпосередньо в CRM. Інтеграція виконується під ключ за 1–4 дні з гарантією збереження даних та цілодобовою підтримкою. У нашій практиці середній проєкт займає 2.5 дні, а відмовостійкість досягається за рахунок черг і повторних спроб. Точність синхронізації — 99.9%, час відповіді webhook менше 1 секунди. Отримайте консультацію з інтеграції — ми проаналізуємо ваш сайт і запропонуємо оптимальне рішення.
Які завдання вирішує інтеграція з Бітрікс24?
- Автоматичне створення лідів і угод при надсиланні форм (заявки, зворотний дзвінок, реєстрація). Передаються ім'я, телефон, email, коментар, UTM-мітки.
- Двостороння синхронізація контактів, товарів і замовлень. Зміна статусу угоди в CRM миттєво відображається на сайті і навпаки.
- Збір аналітики через UTM-мітки та джерела в CRM — видно, звідки прийшов клієнт.
- Виключення дублів за рахунок перевірки контактів за телефоном або email перед створенням.
Чому варто інтегрувати Бітрікс24 з сайтом?
Ручне перенесення заявок призводить до втрат до 30% лідів і затримок в обробці. Інтеграція через вихідні webhook і REST API усуває ці проблеми: ліди створюються миттєво, статуси синхронізуються в реальному часі. Для інтернет-магазинів це ще й автоматичне оновлення залишків і статусів замовлень. У підсумку менеджери працюють тільки з теплими контактами, а воронка продажів стає прозорою. Економія на зарплаті оператора може сягати 30 000 грн/міс.
Як обробляються помилки та ліміти?
При перевищенні ліміту запитів (2 на секунду) API повертає помилку. Ми використовуємо batch-методи та чергу завдань (Redis + Supervisor), щоб відправляти до 50 заявок на секунду без втрат. Усі невдалі запити повторюються з експоненційною затримкою до 5 разів. Це гарантує, що жоден лід не загубиться.
Як ми реалізуємо синхронізацію?
Використовуємо вихідні webhook Бітрікс24 як найпростіший спосіб: не вимагає OAuth-авторизації, працює через один URL. Стек: PHP 8.3+, Laravel 11, Guzzle HTTP. Детальніше про методи REST API можна дізнатися в офіційній документації.
Приклад: створення ліда з форми зворотного зв'язку
class Bitrix24Client {
private string $webhookUrl;
public function __construct() {
$this->webhookUrl = config('bitrix24.webhook_url');
}
public function callMethod(string $method, array $params = []): array {
$response = Http::timeout(15)
->post($this->webhookUrl . $method, $params);
if ($response->failed()) {
throw new \RuntimeException('Bitrix24 API error: ' . $response->status());
}
$data = $response->json();
if (!empty($data['error'])) {
throw new \RuntimeException('Bitrix24: ' . $data['error_description']);
}
return $data['result'] ?? [];
}
public function createLead(array $fields): int {
return $this->callMethod('crm.lead.add', [
'fields' => $fields,
'params' => ['REGISTER_SONET_EVENT' => 'Y'],
]);
}
}
Контролер зберігає заявку в локальній базі та відправляє запит у CRM. Навіть при помилці API дані не втрачаються.
class ContactFormController extends Controller {
public function submit(ContactFormRequest $request): JsonResponse {
$contact = ContactRequest::create($request->validated());
try {
$bitrix = app(Bitrix24Client::class);
$leadId = $bitrix->createLead([
'TITLE' => 'Заявка з сайту: ' . $request->name,
'NAME' => $request->name,
'PHONE' => [['VALUE' => $request->phone, 'VALUE_TYPE' => 'WORK']],
'EMAIL' => [['VALUE' => $request->email, 'VALUE_TYPE' => 'WORK']],
'COMMENTS' => $request->message,
'SOURCE_ID' => 'WEB',
'SOURCE_DESCRIPTION' => 'Форма: ' . $request->form_id,
'ASSIGNED_BY_ID' => config('bitrix24.default_responsible_id'),
'UF_CRM_UTM_SOURCE' => session('utm_source'),
'UF_CRM_UTM_MEDIUM' => session('utm_medium'),
'UF_CRM_UTM_CAMPAIGN' => session('utm_campaign'),
]);
$contact->update(['bitrix_lead_id' => $leadId]);
} catch (\Exception $e) {
Log::error('Bitrix24 lead creation failed', ['error' => $e->getMessage()]);
}
return response()->json(['success' => true]);
}
}
Для інтернет-магазинів: угода з товарами
Замість ліда краще створити угоду з прив'язкою товарів. Це дає повну карту замовлення в CRM.
public function createDealFromOrder(Order $order): void {
$bitrix = app(Bitrix24Client::class);
$contacts = $bitrix->callMethod('crm.contact.list', [
'filter' => ['PHONE' => $order->customer_phone],
'select' => ['ID', 'NAME'],
]);
$contactId = $contacts[0]['ID'] ?? $bitrix->callMethod('crm.contact.add', [
'fields' => [
'NAME' => $order->customer_name,
'PHONE' => [['VALUE' => $order->customer_phone, 'VALUE_TYPE' => 'WORK']],
'EMAIL' => [['VALUE' => $order->customer_email, 'VALUE_TYPE' => 'WORK']],
],
]);
$dealId = $bitrix->callMethod('crm.deal.add', [
'fields' => [
'TITLE' => 'Замовлення #' . $order->number,
'CONTACT_ID' => $contactId,
'OPPORTUNITY' => $order->total,
'CURRENCY_ID' => 'UAH',
'STAGE_ID' => 'NEW',
'COMMENTS' => $this->buildOrderComment($order),
],
]);
$productRows = $order->items->map(fn($item) => [
'PRODUCT_NAME' => $item->product->name,
'PRICE' => $item->price,
'QUANTITY' => $item->quantity,
'MEASURE_NAME' => 'шт.',
])->toArray();
$bitrix->callMethod('crm.deal.productrows.set', [
'id' => $dealId,
'rows' => $productRows,
]);
$order->update(['bitrix_deal_id' => $dealId]);
}
Обробка подій із CRM на сайті
Зауважимо: коли менеджер змінює статус угоди в Бітрікс24, сайт повинен оновити статус замовлення. Налаштовуємо вхідний webhook з перевіркою підпису.
// routes/api.php
Route::post('/webhooks/bitrix24', [Bitrix24WebhookController::class, 'handle'])
->middleware('bitrix24.signature');
class Bitrix24WebhookController extends Controller {
public function handle(Request $request): Response {
$event = $request->input('event');
$data = $request->input('data');
match ($event) {
'ONCRMDEALSTAGEUPDATED' => $this->onDealStageUpdated($data),
'ONCRMLEADADD' => $this->onLeadAdded($data),
default => null,
};
return response('OK');
}
private function onDealStageUpdated(array $data): void {
$dealId = $data['FIELDS']['ID'];
$stageId = $data['FIELDS']['STAGE_ID'];
$order = Order::where('bitrix_deal_id', $dealId)->first();
if (!$order) return;
$statusMap = [
'WON' => 'completed',
'LOSE' => 'cancelled',
'IN_PROCESS' => 'processing',
];
if ($status = $statusMap[$stageId] ?? null) {
$order->update(['status' => $status]);
}
}
}
Підпис webhook перевіряється middleware:
class Bitrix24SignatureMiddleware {
public function handle(Request $request, Closure $next): Response {
$memberId = $request->input('auth.member_id');
if ($memberId !== config('bitrix24.member_id')) {
abort(403);
}
return $next($request);
}
}
Для впровадження під ваш проєкт зв'яжіться з нашими інженерами.
Як налаштувати вихідний вебхук за 15 хвилин?
- У Бітрікс24 перейдіть у «Застосунки» → «Вебхук» → «Вихідний вебхук».
- Вкажіть URL-адресу обробника на вашому сайті.
- Виберіть події: створення ліда, зміна угоди тощо.
- Збережіть. Тепер усі вибрані події будуть надсилатися на ваш сервер.
Порівняння методів інтеграції: REST API та webhook
| Параметр | REST API | Webhook (вихідний) |
|---|---|---|
| Авторизація | OAuth-токен | Секретний ключ |
| Ініціація | Сайт → CRM | CRM → Сайт |
| Підходить для | Масова синхронізація | Сповіщення про події |
| Помилки | Відповідь сервера | Втрата події при недоступності |
Що входить в роботу?
- Налаштування вихідного вебхука та пункту прийому на сайті.
- Реалізація створення лідів і угод з передачею всіх необхідних полів.
- Двостороння синхронізація статусів через вхідний webhook.
- Інтеграція UTM-міток та джерел трафіку.
- Обробка помилок і повторна відправка при збоях.
- Документування API-ендпоінтів та інструкція для менеджерів.
- Тестування в пісочниці та бойовому контурі.
| Тип даних | Лід (Lead) | Угода (Deal) |
|---|---|---|
| Для кого | Проста заявка | Інтернет-магазин, складна воронка |
| Товари | Не прив'язані | Прив'язка товарних позицій |
| Статуси | Немає стадій | Воронка зі стадіями |
| Рахунок | Без суми | Сума та валюта |
| Воронка | Єдиний лід | Різні етапи продажів |
Терміни орієнтовно
Базова інтеграція (ліди з форм) — 1–2 дні. Двостороння синхронізація угод і товарів — 3–4 дні. Додавання телефонії та кастомних воронок — плюс 1–2 дні. Точну оцінку дамо після аналізу вашого стеку. Замовте інтеграцію — ми підготуємо комерційну пропозицію протягом дня.







