שילוב 1C-Bitrix ו-CoMagic: סנכרון שיחות ואנליטיקה

האם מנהלים שלכם מאבדים שיחות והאנליטיקה לא מצליחה להציג את התמונה האמיתית? אנו משלבים את 1C-Bitrix עם CoMagic כך שכל שיחה ממוקדת נוחתת אוטומטית ב-CRM שלכם עם היסטוריית המגע המלאה. הצוות שלנו מספק את הפרויקט במפתח מלא—החל מהגדרת webhook ועד להסרת כפילויות לידים—תוך הבטחת פעילות יציבה ותמיכה מתמשכת.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
שילוב 1C-Bitrix ו-CoMagic: סנכרון שיחות ואנליטיקה
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

שילוב 1C-Bitrix עם CoMagic

שיחות נעלמות לשום מקום, ומנהלים שוב מבקשים נתונים? CoMagic היא אחת מפלטפורמות מעקב השיחות הבודדות ששומרות לא רק את מקור השיחה אלא את כל שרשרת המגעים של המבקר. אבל ללא קישור ל-1C-Bitrix, הנתונים נשארים בממשק CoMagic ולא משפיעים על תהליכים עסקיים. אנו מגדירים את השילוב כך שכל שיחה ממוקדת יוצרת אוטומטית ליד ב-CRM, והכרטיס מציג את כל היסטוריית האינטראקציות עם האתר.

הניסיון שלנו בשילובי CoMagic-Bitrix כולל למעלה מ-30 פרויקטים. תוצאה אופיינית היא הפחתת זמן טיפול בליד ב-40% והורדת עלות ליד בעד 30% בזכות ייחוס מדויק. אנו מבטיחים שקיפות ופעולה יציבה של הפתרון.

אילו בעיות השילוב פותר?

  • אובדן ייחוס שיחות. ללא visitor_id, המנהל לא רואה מאיזה ערוץ הלקוח הגיע. CoMagic Data API מצרף את כל נתוני הסשן לליד.
  • הזנת נתונים ידנית. שיחות לא נכנסות אוטומטית ל-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. אם ליד עם מספר זה כבר קיים, אנו מעדכנים אותו כדי למנוע כפילויות.

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 כותב קובץ // /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); באתר. כשהליד עובר את השרשרת, אנו מבקשים את הסשן המלא דרך 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(),
            ]);
        }
    }
}

לחיצה לחיוג: חיוג ישירות מה-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 מול מערכות מעקב שיחות אחרות

CoMagic בולט מול מתחרים בעומק הנתונים. לדוגמה, Callibri מחשיב ביקור כמגע אחד, בעוד CoMagic מפרק אותו לנקודות (דפים, ערוצים) — ומספק ייחוס רב-מגעי "מוכן לשימוש." בנוסף, ה-API של CoMagic מאפשר ניהול שיחות גמיש: ייזום שיחות, שינוי תסריטים, קבלת הקלטות שיחות. לפי CoMagic, יישום אנליטיקה מקצה לקצה עם הפלטפורמה שלהם מעלה את ההמרה למכירה בעד 30%.

תכונה CoMagic Callibri Alibra
ייחוס רב-מגעי כן (מובנה) רק מגע ראשון רק מגע אחרון
Webhook כן כן כן, אבל ללא HMAC
Data API מלא (סשנים, שיחות, צ'אטים) מוגבל מוגבל
לחיצה לחיוג כן כן (דרך API של צד שלישי) לא
הקלטת שיחות כן כן כן

שדות מותאמים אישית שאנו יוצרים

קוד ישות סוג מקור
UF_COMAGIC_ID ליד מחרוזת Webhook
UF_CM_VISITOR_ID ליד מחרוזת קובץ Cookie
UF_CM_SESSION_COUNT ליד מספר שלם Data API
UF_CM_FIRST_SOURCE ליד מחרוזת Data API
UF_CM_LAST_SOURCE ליד מחרוזת Data API
UF_UTM_SOURCE..TERM ליד, עסקה מחרוזת Webhook / API

מה כולל השילוב?

  • 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'] ?? []), ]); } } מודול: לקוח API, מעבדי אירועים, לוגר.
  • נקודת קצה webhook עם אימות חתימת HMAC.
  • יצירה/עדכון של לידים ב-CRM משיחות וצ'אטים.
  • יירוט טפסי JS להעברת visitor_id.
  • העשרה בצד השרת עם נתוני סשן דרך Data API.
  • אופציונלי: לחיצה לחיוג מכרטיס CRM ולוח מחוונים "CoMagic".
  • תיעוד, הדרכת מנהלים, שבועיים של תמיכה לאחר השקה.

פרטי יישום טכניים

אימות CoMagic משתמש ב-JSON-RPC 2.0. מחלקת הבסיס comagic_visitor כבר מותאמת ל-Bitrix — היא במרחב שמות נפרד ומשתמשת ב-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(), ]); } } } לאחסון אישורים. כל הקריאות החיצוניות מתועדות ב-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]; } .

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 שבועות. תפירה מלאה עם ייחוס רב-מגעי, לחיצה לחיוג ותצוגת נתונים — 4–6 שבועות. התמחור מחושב באופן אישי לאחר ביקורת על ה-CRM שלך ונפחי התנועה. צור קשר לביקורת והערכת פרויקט תוך יום עסקים אחד.