Інтеграція 1С-Бітрікс з Callibri

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Інтеграція 1С-Бітрікс з Callibri
Середній
~1-2 тижні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1288
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    880
  • 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
    631
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    781
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    681
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1010

Інтеграція 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 тижні.