Интеграция 1С-Битрикс с Callibri

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с Callibri
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 1С-Битрикс с Callibri

Callibri — платформа коллтрекинга и мультиканальной аналитики. В отличие от базового Google Analytics, она умеет сшивать звонок с конкретным источником трафика и передавать UTM-метки в CRM. Проблема стандартных установок: скрипт Callibri собирает данные в своей системе, а заявки из Битрикс-форм живут в b_form_result, и никакой связи между ними нет. Менеджер видит звонок, но не знает, с какого объявления пришёл клиент. Задача интеграции — замкнуть цепочку: источник → действие → заявка/звонок → сделка в CRM.

Архитектура интеграции

Callibri предоставляет два механизма: JavaScript API для клиентской стороны и REST API для серверного взаимодействия. Для полноценной интеграции с Битрикс нужны оба.

Схема потока данных:

Посетитель → Callibri JS подменяет номер
  → Звонок фиксируется в Callibri
    → Webhook от Callibri (POST на ваш endpoint)
      → Битрикс-обработчик
        → Создание лида/сделки в CRM Битрикс
          → Привязка UTM-меток к сделке

Параллельно для онлайн-форм:

Отправка формы Битрикс
  → JS-обработчик: считывает callibri_visitor_uid из cookie
    → Передача uid вместе с данными формы
      → Серверный обработчик сохраняет uid в свойствах лида
        → Callibri REST API: запрос деталей визита по uid

Настройка Webhook от Callibri

В личном кабинете Callibri: Настройки → Интеграции → Webhook. Указываем URL вашего обработчика. Callibri отправляет POST с JSON-пейлоадом при каждом звонке, чате или заявке.

Структура пейлоада (основные поля):

{
  "call_id": "98765432",
  "call_type": "call",
  "caller_number": "+79161234567",
  "call_date": "2024-03-15 14:23:11",
  "utm_source": "yandex",
  "utm_medium": "cpc",
  "utm_campaign": "brand_kw",
  "duration": 145,
  "is_target": true,
  "visitor_id": "callibri_abc123"
}

Обработчик в Битрикс — отдельный компонент или /local/api/callibri-webhook.php:

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

$rawInput = file_get_contents('php://input');
$data = json_decode($rawInput, true);

if (empty($data) || empty($data['caller_number'])) {
    http_response_code(400);
    exit;
}

// Верификация через секретный токен в заголовке
$token = $_SERVER['HTTP_X_CALLIBRI_TOKEN'] ?? '';
if ($token !== \Bitrix\Main\Config\Option::get('local.callibri', 'webhook_secret')) {
    http_response_code(403);
    exit;
}

(new \Local\Callibri\LeadCreator())->createFromWebhook($data);

http_response_code(200);
echo json_encode(['status' => 'ok']);

Создание лида в CRM по звонку

namespace Local\Callibri;

use Bitrix\Crm\LeadTable;
use Bitrix\Main\Type\DateTime;

class LeadCreator
{
    public function createFromWebhook(array $data): int
    {
        $fields = [
            'TITLE'          => 'Звонок Callibri: ' . $data['caller_number'],
            'PHONE'          => [['VALUE' => $data['caller_number'], 'VALUE_TYPE' => 'WORK']],
            'SOURCE_ID'      => 'CALL',
            'STATUS_ID'      => 'NEW',
            'ASSIGNED_BY_ID' => $this->resolveAssignee($data),
            'UF_CALLIBRI_ID' => $data['call_id'],
            'UF_UTM_SOURCE'  => $data['utm_source'] ?? '',
            'UF_UTM_MEDIUM'  => $data['utm_medium'] ?? '',
            'UF_UTM_CAMPAIGN'=> $data['utm_campaign'] ?? '',
            'UF_CALL_DURATION' => (int)($data['duration'] ?? 0),
            'COMMENTS'       => $this->buildComment($data),
        ];

        $lead = new \CCrmLead(false);
        $leadId = $lead->Add($fields, true, ['DISABLE_USER_FIELD_CHECK' => false]);

        if (!$leadId) {
            \CEventLog::Add([
                'SEVERITY'  => 'ERROR',
                'AUDIT_TYPE_ID' => 'CALLIBRI_LEAD_FAIL',
                'MODULE_ID' => 'local.callibri',
                'DESCRIPTION' => $lead->LAST_ERROR,
            ]);
        }

        return (int)$leadId;
    }

    private function buildComment(array $data): string
    {
        $isTarget = $data['is_target'] ? 'Целевой' : 'Нецелевой';
        return sprintf(
            "Callibri ID: %s\nТип: %s\nДлительность: %d сек.\nИсточник: %s / %s / %s",
            $data['call_id'],
            $isTarget,
            $data['duration'] ?? 0,
            $data['utm_source'] ?? '—',
            $data['utm_medium'] ?? '—',
            $data['utm_campaign'] ?? '—'
        );
    }
}

Привязка визита к форме Битрикс

Callibri устанавливает cookie callibri_visitor_uid на стороне клиента. Нужно перехватить отправку формы и добавить uid как скрытое поле.

JavaScript на странице с формой:

document.addEventListener('DOMContentLoaded', function () {
    const forms = document.querySelectorAll('form.bx-form, form[data-bitrix-form]');
    forms.forEach(function (form) {
        const uid = getCookie('callibri_visitor_uid');
        if (uid) {
            const input = document.createElement('input');
            input.type = 'hidden';
            input.name = 'callibri_uid';
            input.value = uid;
            form.appendChild(input);
        }
    });
});

function getCookie(name) {
    const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
    return match ? match[2] : null;
}

На сервере в обработчике формы (OnBeforeIBlockElementAdd или кастомный обработчик):

$callibriUid = htmlspecialchars($_POST['callibri_uid'] ?? '');
if ($callibriUid) {
    // Сохраняем в пользовательское поле лида
    $leadFields['UF_CALLIBRI_UID'] = $callibriUid;

    // Запрашиваем детали визита из Callibri API
    $visitData = (new \Local\Callibri\ApiClient())->getVisitByUid($callibriUid);
    if ($visitData) {
        $leadFields['UF_UTM_SOURCE']   = $visitData['utm_source'] ?? '';
        $leadFields['UF_UTM_CAMPAIGN'] = $visitData['utm_campaign'] ?? '';
    }
}

Дедупликация лидов

Типичная проблема: клиент позвонил и потом заполнил форму. Два отдельных лида для одного контакта.

public function findExistingLead(string $phone): ?int
{
    $phone = preg_replace('/\D/', '', $phone);

    $result = \CCrmLead::GetList(
        ['DATE_CREATE' => 'DESC'],
        [
            'PHONE'      => $phone,
            'STATUS_ID'  => 'NEW',
            '>DATE_CREATE' => (new DateTime())->add('-1D')->format('d.m.Y H:i:s'),
        ],
        false, ['nTopCount' => 1],
        ['ID', 'UF_CALLIBRI_ID']
    );

    if ($row = $result->Fetch()) {
        return (int)$row['ID'];
    }

    return null;
}

Если свежий лид найден — обновляем его данными, не создаём новый.

Пользовательские поля для UTM в CRM

Поля создаются через CUserTypeEntity или через административный интерфейс CRM. Рекомендуемый набор:

Код поля Тип Назначение
UF_CALLIBRI_ID string ID звонка/чата в Callibri
UF_CALLIBRI_UID string Visitor UID для сшивки с формой
UF_UTM_SOURCE string utm_source
UF_UTM_MEDIUM string utm_medium
UF_UTM_CAMPAIGN string utm_campaign
UF_UTM_TERM string utm_term
UF_CALL_DURATION integer Длительность звонка, сек
UF_IS_TARGET_CALL boolean Целевой звонок

Состав работ

  • Регистрация компонента local.callibri, установка опций модуля
  • Разработка webhook-обработчика с верификацией
  • Создание пользовательских полей в CRM (лид, сделка)
  • Клиент Callibri REST API (получение деталей визита)
  • JS-скрипт перехвата форм для передачи visitor_uid
  • Логика дедупликации лидов по номеру телефона
  • Тестирование сквозного сценария: звонок → лид с UTM

Сроки: базовая интеграция (webhook → лид) — 1–2 недели. Полная сшивка с формами, дедупликация, витрина UTM в карточке сделки — 3–4 недели.