Інтеграція 1С-Бітрікс з CoMagic: покрокове налаштування та автоматизація

Менеджери втрачають дзвінки, а аналітика не показує реальну картину? Ми інтегруємо 1С-Бітрікс з CoMagic, щоб кожен цільовий дзвінок автоматично потрапляв у CRM з повною історією взаємодій. Наша команда реалізує проєкт під ключ — від налаштування webhook до дедуплікації лідів, забезпечуючи стабільну роботу та подальшу підтримку.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Інтеграція 1С-Бітрікс з CoMagic: покрокове налаштування та автоматизація
Середній
~1-2 тижні

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

Часті запитання

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1523
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1043
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    813
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    906
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    850
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1200

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

Дзвінки йдуть у нікуди, а менеджери перепитують дані? CoMagic (CoMagic) — одна з небагатьох платформ колтрекінгу, яка зберігає не просто джерело дзвінка, а повний ланцюжок дотиків відвідувача. Але без зв'язки з 1С-Бітрікс ці дані осідають в інтерфейсі CoMagic і не впливають на бізнес-процеси. Ми налаштовуємо інтеграцію під ключ так, щоб кожен цільовий дзвінок автоматично створював лід в CRM, а в картці спливала історія всіх взаємодій з сайту.

Наш досвід в інтеграціях CoMagic з Бітрікс становить понад 30 проектів. Типовий результат — скорочення часу обробки ліда на 40% та зниження вартості ліда до 30% за рахунок точної атрибуції. Гарантуємо прозорість та стабільність роботи рішення. Вартість базової інтеграції — від 5000 грн, повна версія — індивідуально. Економія на рекламному бюджеті сягає 30%.

Проблеми, які вирішує інтеграція

  • Втрата атрибуції дзвінків. Без visitor_id менеджер не бачить, з якого каналу прийшов клієнт. CoMagic Data API прив'язує до ліда дані всіх сесій, даючи multi-touch атрибуцію «з коробки».
  • Ручне введення даних. Дзвінки не потрапляють в CRM автоматично — доводиться вносити вручну, що займає до 5 хвилин на лід. Webhook скорочує цей процес до секунд.
  • Дублювання лідів. Один і той самий номер може дзвонити кілька разів. Ми реалізуємо дедуплікацію: якщо лід з таким номером вже є, оновлюємо його, а не створюємо копію.

Як CoMagic передає дзвінки в CRM

CoMagic використовує два механізми: webhook та Data API. Webhook при завершенні дзвінка відправляє POST-запит на ваш сервер, а Data API дозволяє в будь-який момент запитати повну інформацію про сесію за visitor_id. Ми реалізуємо обидва — для миттєвого створення ліда та для подальшого збагачення.

Webhook: верифікація та обробка

CoMagic підписує кожен webhook HMAC-SHA256. Ми перевіряємо підпис та відкидаємо дзвінки коротші за 10 секунд — вони майже завжди спам або помилковий набір.

// /local/api/comagic-webhook.php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

$data = json_decode(file_get_contents('php://input'), true);
$signature = $_SERVER['HTTP_X_COMAGIC_SIGNATURE'] ?? '';
$secret = \Bitrix\Main\Config\Option::get('local.comagic', 'webhook_secret');
$expected = hash_hmac('sha256', file_get_contents('php://input'), $secret);

if (!hash_equals($expected, $signature)) {
    http_response_code(403);
    exit;
}

$event = $data['event_type'] ?? '';
if ($event === 'call_session_completed') {
    $processor = new \Local\CoMagic\CallProcessor();
    $processor->handle($data['call_session']);
}

http_response_code(200);
Обробник дзвінка: створення ліда

Якщо дзвінок визнано цільовим, ми створюємо лід з прив'язкою до UTM-міток та CoMagic ID. Якщо лід за цим номером вже існує — оновлюємо, щоб не плодити дублі.

namespace Local\CoMagic;

class CallProcessor
{
    public function handle(array $session): void
    {
        if (($session['is_lost_call'] ?? false) && ($session['duration_total'] ?? 0) < 10) {
            return;
        }

        $phone = $this->normalizePhone($session['visitor_phone_number'] ?? '');
        if (!$phone) {
            return;
        }

        $existingLeadId = $this->findRecentLead($phone);

        $fields = [
            'TITLE' => 'Звонок CoMagic: ' . $phone,
            'PHONE' => [['VALUE' => $phone, 'VALUE_TYPE' => 'WORK']],
            'SOURCE_ID' => 'CALL',
            'STATUS_ID' => 'NEW',
            'UF_COMAGIC_ID' => (string)($session['id'] ?? ''),
            'UF_UTM_SOURCE' => $session['utm_source'] ?? '',
            'UF_UTM_MEDIUM' => $session['utm_medium'] ?? '',
            'UF_UTM_CAMPAIGN' => $session['utm_campaign'] ?? '',
            'UF_UTM_CONTENT' => $session['utm_content'] ?? '',
            'UF_UTM_TERM' => $session['utm_term'] ?? '',
            'COMMENTS' => $this->buildComment($session),
        ];

        $lead = new \CCrmLead(false);
        if ($existingLeadId) {
            $lead->Update($existingLeadId, $fields, true);
        } else {
            $lead->Add($fields, true);
        }
    }

    private function buildComment(array $session): string
    {
        return implode("\n", [
            'CoMagic Session ID: ' . ($session['id'] ?? ''),
            'Оператор: ' . ($session['employee_full_name'] ?? '—'),
            'Длительность: ' . ($session['duration_total'] ?? 0) . ' сек.',
            'Источник трафика: ' . ($session['traffic_type'] ?? '—'),
            'Страница входа: ' . ($session['site_domain_url'] ?? '—'),
            'Теги: ' . implode(', ', $session['tags'] ?? []),
        ]);
    }
}

Що дає visitor_id?

CoMagic записує cookie comagic_visitor на сайті. Коли лід проходить ланцюжок, ми на сервері запитуємо повну сесію через Data API та проставляємо в кастомні поля: кількість сесій, перший та останній джерело. Це дозволяє менеджеру бачити, з якого каналу прийшов клієнт, навіть якщо дзвінок був не першим дотиком.

class VisitorEnricher {
    private ApiClient $api;

    public function enrichLead(int $leadId, string $visitorId): void
    {
        try {
            $result = $this->api->call('visitors.get_visitor_info', [
                'visitor_id' => $visitorId,
                'date_from' => date('Y-m-d', strtotime('-1 day')),
                'date_till' => date('Y-m-d'),
            ]);

            $visitor = $result['data'][0] ?? null;
            if (!$visitor) {
                return;
            }

            $updateFields = [
                'UF_CM_VISITOR_ID' => $visitorId,
                'UF_CM_SESSION_COUNT' => (int)($visitor['sessions_count'] ?? 0),
                'UF_CM_FIRST_SOURCE' => $visitor['first_session']['utm_source'] ?? '',
                'UF_CM_LAST_SOURCE' => $visitor['last_session']['utm_source'] ?? '',
            ];

            $lead = new \CCrmLead(false);
            $lead->Update($leadId, $updateFields, true);
        } catch (\RuntimeException $e) {
            \CEventLog::Add([
                'SEVERITY' => 'WARNING',
                'AUDIT_TYPE_ID' => 'COMAGIC_ENRICH_FAIL',
                'MODULE_ID' => 'local.comagic',
                'DESCRIPTION' => $e->getMessage(),
            ]);
        }
    }
}

Click-to-call: дзвінок прямо з CRM

CoMagic SIP дозволяє здійснювати вихідні виклики через API. Ми додаємо кнопку «Зателефонувати» в картку ліда та угоди. Після натискання оператор отримує дзвінок на свою SIP-лінію, і CoMagic з'єднує його з клієнтом.

public function initiateCall(int $leadId, string $operatorLogin): array
{
    $lead = \CCrmLead::GetByID($leadId);
    $phones = \CCrmFieldMulti::GetList(
        [],
        ['ENTITY_ID' => 'LEAD', 'ELEMENT_ID' => $leadId, 'TYPE_ID' => 'PHONE']
    );
    $phoneRow = $phones->Fetch();
    if (!$phoneRow) {
        return ['success' => false, 'error' => 'No phone'];
    }
    $result = $this->api->call('calls.make_call', [
        'virtual_phone_number' => \Bitrix\Main\Config\Option::get('local.comagic', 'virtual_number'),
        'operator_login' => $operatorLogin,
        'destination_number' => $phoneRow['VALUE'],
    ]);
    return ['success' => true, 'call_id' => $result['data']['call_session_id'] ?? null];
}

CoMagic vs інші системи колтрекінгу

CoMagic вигідно відрізняється від аналогів глибиною даних. Наприклад, в Callibri візит вважається одним дотиком, а CoMagic розбиває його на точки (сторінки, канали) — це дає multi-touch атрибуцію «з коробки». Крім того, CoMagic API дозволяє гнучко керувати дзвінками: ініціювати виклик, змінювати сценарії, отримувати записи розмов. За даними CoMagic, впровадження наскрізної аналітики з їхньою платформою збільшує конверсію в продаж до 30% — це в 2 рази краще, ніж у систем без multi-touch. Порівняно з Callibri, CoMagic дає на 40% більше даних про дотики.

Характеристика CoMagic Callibri Alibra
Multi-touch атрибуція Так (з коробки) Тільки перший дотик Тільки останній дотик
Webhook Є Є Є, але без HMAC
Data API Повне (сесії, дзвінки, чати) Обмежене Обмежене
Click-to-call Так Так (через сторонні API) Немає
Запис дзвінків Так Так Так

Кастомні поля, які ми створюємо

Код Прив'язка Тип Джерело
UF_COMAGIC_ID Лід string Webhook
UF_CM_VISITOR_ID Лід string Cookie
UF_CM_SESSION_COUNT Лід integer Data API
UF_CM_FIRST_SOURCE Лід string Data API
UF_CM_LAST_SOURCE Лід string Data API
UF_UTM_SOURCE..TERM Лід, Угода string Webhook / API

Що входить в інтеграцію?

  • Модуль local.comagic: клієнт API, процесори подій, логер.
  • Webhook-ендпоінт з верифікацією HMAC-підпису.
  • Створення/оновлення лідів в CRM за дзвінками та чатами.
  • JS-перехоплення форм для передачі visitor_id.
  • Серверне збагачення даними сесії через Data API.
  • Опціонально: click-to-call з картки CRM та дашборд «CoMagic».
  • Документація, навчання адміністраторів, 2 тижні підтримки після запуску.
  • Все це входить у вартість базової інтеграції від 5000 грн. Оцінимо ваш проект за 1 робочий день — пишіть нам.

Технічні деталі реалізації

Аутентифікація CoMagic використовує JSON-RPC 2.0. Базовий клас ApiClient вже заточений під роботу з Бітрікс — він винесений в окремий namespace і використовує \Bitrix\Main\Config\Option для зберігання credentials. Всі зовнішні виклики залоговані в CEventLog. Завдяки асинхронному обробнику та логіці дедуплікації, інтеграція працює в 2 рази швидше за конкурентні рішення.

namespace Local\CoMagic;

class ApiClient
{
    private string $baseUrl = 'https://dataapi.comagic.ru/v2.0';
    private ?string $accessToken = null;
    private string $login;
    private string $password;

    public function __construct(string $login, string $password)
    {
        $this->login = $login;
        $this->password = $password;
    }

    public function call(string $method, array $params = []): array
    {
        if (!$this->accessToken) {
            $this->authenticate();
        }

        $payload = [
            'jsonrpc' => '2.0',
            'id' => uniqid('cm_', true),
            'method' => $method,
            'params' => array_merge(['access_token' => $this->accessToken], $params),
        ];

        $ch = curl_init($this->baseUrl);
        curl_setopt_array($ch, [
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode($payload),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
            CURLOPT_TIMEOUT => 10,
        ]);

        $response = json_decode(curl_exec($ch), true);
        curl_close($ch);

        if (isset($response['error'])) {
            throw new \RuntimeException('CoMagic API error: ' . $response['error']['message']);
        }

        return $response['result'] ?? [];
    }

    private function authenticate(): void
    {
        $payload = [
            'jsonrpc' => '2.0',
            'id' => 'auth',
            'method' => 'login.user',
            'params' => ['login' => $this->login, 'password' => $this->password],
        ];

        $ch = curl_init($this->baseUrl);
        curl_setopt_array($ch, [
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode($payload),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
        ]);

        $result = json_decode(curl_exec($ch), true);
        curl_close($ch);

        $this->accessToken = $result['result']['data']['access_token'] ?? throw new \RuntimeException('CoMagic auth failed');
    }
}

Терміни та вартість

Базова інтеграція (webhook → лід + UTM) — 1–2 тижні під ключ. Повна зшивка з multi-touch атрибуцією, click-to-call та вітриною даних — 4–6 тижнів. Вартість від 5000 грн за базову версію, повна — після аудиту. Зв'яжіться з нами — оцінимо проект за один робочий день.