01 01234567890 01234567890

Настройка и обработка входящих webhook в Bitrix24: полный разбор

26 June 2026

Заявка с сайта падает в Bitrix24, но менеджер должен сначала узнать об этом — а потом ещё свериться с CRM, чтобы понять, что делать дальше.

Заявка с сайта падает в Bitrix24, но менеджер должен сначала узнать об этом — а потом ещё свериться с CRM, чтобы понять, что делать дальше. Пока он это делает, конкурент уже позвонил клиенту. Входящий webhook (webhook — это URL-адрес, на который Bitrix24 сам отправляет данные при определённом событии, без необходимости постоянно опрашивать систему) решает именно эту задачу: он толкает данные туда, где их ждут, в момент события, а не через час при следующей проверке почты.

В этой статье разберём, как настроить и правильно обработать входящий webhook в Bitrix24: от создания обработчика до частых ошибок, которые встречаются почти в каждом первом проекте интеграции. Подходит для разработчиков, которые уже работают с REST API Bitrix24 или начинают это делать.

Ключевая фраза, с которой сюда обычно приходят — «bitrix24 webhook настройка и обработка входящих событий» — и именно это мы разберём по шагам.

Что понадобится перед началом

  • Доступ к порталу Bitrix24 с правами администратора (без этого нельзя создавать обработчики событий)
  • Публично доступный URL, на который Bitrix24 будет отправлять данные (HTTPS обязателен — на HTTP-адрес события не доставляются)
  • Базовое понимание REST API Bitrix24: что такое метод, что такое access_token
  • PHP 7.4+ или Node.js 16+ — в зависимости от того, на чём пишете обработчик
  • Тестовый портал Bitrix24 (бесплатный, регистрируется за 5 минут) — крайне желательно не тестировать на продакшене

Основная часть: создаём и настраиваем webhook

Шаг 1. Создаём входящий вебхук в портале

Входящий вебхук — это URL с токеном, который Bitrix24 генерирует сам, и через который внешние системы могут вызывать методы REST API. Это не то же самое, что событие — это просто способ подключения к API без OAuth.

Идём в раздел «Разработчикам» → «Другое» → «Входящий вебхук». Выбираем нужные права доступа (например, crm — для работы с лидами и сделками) и нажимаем «Сохранить». Bitrix24 выдаёт URL вида https://yourportal.bitrix24.ru/rest/1/xxxxxxxxxxxxxxxx/.

Частая ошибка: выдают вебхуку права на всё подряд «на всякий случай». Это создаёт риск безопасности — если токен утечёт, у атакующего будет доступ ко всему порталу. Выдавайте только то, что реально нужно для задачи.

Шаг 2. Различаем входящий и исходящий webhook

Это путают чаще всего. Входящий webhook — вы вызываете методы Bitrix24 (например, добавляете лид). Исходящий webhook — Bitrix24 вызывает ваш URL при определённом событии (например, при создании сделки). Для обработки «входящих событий», о которых речь в этой статье, нужен именно исходящий webhook со стороны Bitrix24 — несмотря на путающее название, для вашей системы он именно «входящий» поток данных.

Настраивается в том же разделе «Разработчикам» → «Другое» → «Исходящий вебхук». Указываете событие (например, ONCRMLEADADD) и URL вашего обработчика.

Шаг 3. Пишем обработчик на стороне сервера

Bitrix24 отправляет данные POST-запросом в формате application/x-www-form-urlencoded, а не JSON — это вторая частая засада для тех, кто привык работать с REST API в JSON.

<?php
// Получаем данные из POST-запроса Bitrix24
$data = $_POST;

// Проверяем, что событие действительно от лида
if (isset($data['event']) && $data['event'] === 'ONCRMLEADADD') {
    $leadId = $data['data']['FIELDS']['ID'];
    // Дальше можно дёргать REST API, чтобы получить полные данные по лиду
    // т.к. вебхук присылает только ID, а не весь набор полей
}

http_response_code(200); // обязательно отвечаем 200, иначе Bitrix24 будет ретраить запрос

Частая ошибка: забывают вернуть HTTP 200. Если сервер не ответит кодом 200, Bitrix24 решит, что доставка не удалась, и будет повторять запрос — в итоге один лид может прийти 5-10 раз.

Шаг 4. Проверяем подпись запроса (опционально, но важно)

Bitrix24 не подписывает исходящие webhook криптографически по умолчанию, в отличие от некоторых других систем (например, Stripe). Это значит, что теоретически кто угодно может отправить POST-запрос на ваш URL, имитируя событие Bitrix24.

Минимальная защита — проверять, что в запросе передаётся application_token, который выдаётся при настройке вебхука, и сверять его на своей стороне перед обработкой.

// Сверяем токен приложения, чтобы отсечь поддельные запросы
if ($data['auth']['application_token'] !== getenv('BITRIX_APP_TOKEN')) {
    http_response_code(403);
    exit;
}

Шаг 5. Обрабатываем дозагрузку данных через REST API

Как уже сказали в шаге 3, webhook присылает не все поля, а только ID изменённой сущности. Чтобы получить полные данные, нужно сделать дополнительный запрос к REST API методом crm.lead.get.

$leadId = $data['data']['FIELDS']['ID'];
$webhookUrl = 'https://yourportal.bitrix24.ru/rest/1/xxxxxxxxxxxxxxxx/';

$response = file_get_contents($webhookUrl . 'crm.lead.get.json?id=' . $leadId);
$leadData = json_decode($response, true);

Частая ошибка: пытаются вытащить нужные поля прямо из тела webhook-запроса и удивляются, что там пусто. В событии всегда минимум данных — за остальным нужно идти в API отдельно.

Шаг 6. Настраиваем идемпотентность обработчика

Поскольку Bitrix24 может присылать повторные запросы (ретраи при сетевых сбоях, задержках ответа и так далее), обработчик должен быть готов получить одно и то же событие дважды и не создать дубликат записи.

Самый простой способ — сохранять ID обработанных событий (или ID сущности + timestamp) в отдельную таблицу и проверять перед обработкой.

Частые ошибки и как их избежать

Ошибка: обработчик отвечает дольше 5-10 секунд. Возникает, когда в обработчике сразу делают тяжёлую логику — например, синхронные запросы к нескольким внешним системам. Bitrix24 ждёт ответ ограниченное время, и при таймауте считает доставку неуспешной и повторяет запрос. Решение: в обработчике быстро сохраняем данные в очередь (например, в таблицу или Redis) и отвечаем 200, а тяжёлую обработку делаем асинхронно.

Ошибка: тестируют webhook на продакшн-портале с реальными клиентами. Возникает из экономии времени на настройку тестового портала. Решение: регистрируем бесплатный тестовый Bitrix24-портал — это 5 минут, а отлавливать баги на реальных лидах потом стоит куда дороже.

Ошибка: не учитывают, что событие приходит до того, как транзакция в Bitrix24 полностью завершена. В редких случаях запрос на получение полных данных по только что созданной сущности (шаг 5) может вернуть неполные данные, если делать его мгновенно. Решение: при странном поведении добавить небольшую задержку (1-2 секунды) перед запросом полных данных.

Ошибка: вебхук настроен, но события не приходят. Чаще всего причина — обработчик висит на HTTP, а не HTTPS, или сертификат самоподписанный. Bitrix24 не отправляет данные на недоверенные сертификаты. Решение: проверить сертификат через любой online SSL-чекер.

Из нашей практики

Перед тем как вешать автоматизацию на событие, всегда проверяем на тестовом портале, какие поля у сделки или лида помечены как обязательные — и что происходит, если webhook присылает данные без одного из них. На практике процессы у клиентов почти всегда завязаны на роботов и бизнес-процессы, и если обязательное поле приходит пустым, автоматизация не падает с понятной ошибкой, а просто тихо не срабатывает или зависает на середине цепочки — потом два дня разбираешься, почему письмо клиенту не ушло.

Отдельная история — когда источник данных (сайт, форма, сторонний сервис) ещё не приводит данные в нужном формате, а под них в Bitrix24 не созданы свои поля. Заводить поле в CRM под каждый чих — не вариант, это долго и часто незачем, если данные приходят раз в неделю на этапе обсуждения интеграции. В таких случаях временно пишем всё, что прилетело, в комментарий к сделке или лиду, но не как сплошной текст, а строкой с разделителем — например, источник: сайт | utm_campaign: spring_sale | страница: /promo | устройство: mobile. Когда становится понятно, какие поля реально нужны постоянно, под них создают normal-поля в CRM, и эту же строку из комментария парсят скриптом и дозаполняют исторические записи — переделывать интеграцию с нуля не приходится.

Из этого же вытекает правило, которое спасло не один проект: на этапе обработки webhook лучше сохранять данных с избытком, а не ровно столько, сколько нужно сегодня. Поля, которые сейчас кажутся бесполезными (timestamp события, raw-данные запроса, ID связанных сущностей), через месяц-два почти всегда становятся нужны — либо для отладки, когда что-то пошло не так, либо потому что бизнес захотел новый отчёт. Дешевле хранить лишнее в JSON-поле или комментарии, чем потом восстанавливать утраченные данные задним числом, а это в большинстве случаев невозможно.

Итог

После этой настройки заявки, сделки и изменения в Bitrix24 будут долетать до вашей системы автоматически и почти мгновенно — без опроса API по таймеру и без задержек в час-два. Если на каком-то шаге застряли — опишите ситуацию в комментарии или напишите нам напрямую.

CTA

Нужна помощь с интеграцией Bitrix24 под вашу задачу — запишитесь на консультацию

Лендинг vs многостраничный сайт: что выбрать для вашего бизнеса
Следующая статья 12.04.2026