אינטגרציית Bitrix24-יאנדקס.טרקר: מדריך מלא

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

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

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1460
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1019
  • פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    764
  • פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    809
  • פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1166

אינטגרציית Bitrix24-יאנדקס.טרקר: אנחנו מגשרים על הפער בין מפתחים למנהלים

מצב טיפוסי: מפתחים חיים ביאנדקס טרקר, בעוד מנהלים מטפלים בעסקאות מול לקוחות ב-Bitrix24. משימה נוצרת בטרקר — המנהל לא רואה את הסטטוס העדכני שלה. סטטוס משתנה ב-Bitrix24 — המפתח לומד על כך דרך גורמים שלישיים. העברה ידנית גוזלת שעות מדי יום ומובילה לשגיאות. קחו לדוגמה חברת IT טיפוסית: צוות הפיתוח משתמש ביאנדקס טרקר לניהול משימות, בעוד מחלקת המכירות עובדת ב-Bitrix24. בעת יישור משימות, נוצר נתק — סטטוסים לא מסונכרנים, והמידע מתיישן תוך שעה. האינטגרציה שלנו מבטלת את הפער הזה אוטומטית, מפחיתה את הסיכוי לשגיאות ומאיצה את השלמת המשימות. כבר יישמנו פתרונות כאלה עבור לקוחות במגוון תעשיות, כולל חברות עם מאות עובדים. אנו מציעים אינטגרציה במפתח מלא — מתכנון ועד תמיכה לאחר ההשקה. צרו קשר כדי לזהות את המקרה שלכם.

אילו בעיות האינטגרציה פותרת?

העברת משימות ידנית. עובדים מבזבזים 30–60 דקות ביום בהעתקת כותרות וסטטוסים בין מערכות. הסקריפט שלנו הופך זאת לאוטומטי לחלוטין.

אובדן עדכניות. המידע מתיישן תוך שעה — המנהל רואה "בביצוע" בעוד המשימה כבר סגורה. סנכרון בזמן אמת מבטל את העיכוב.

קונפליקט סטטוסים. ל-Bitrix24 יש מודל סטטוסים אחד, ולטרקר יש מודל אחר. נדרש מיפוי ברור, אחרת הסנכרון יגרום לבלבול.

איך אנחנו עושים את זה: טכנולוגיה וארכיטקטורה

יאנדקס טרקר API: שיטות מפתח

טרקר מספק REST API עם אימות OAuth 2.0. הטוקן של הארגון מועבר בכותרת של כל בקשה. כתובת בסיס: https://api.tracker.yandex.net/v3/. נקודות קצה עיקריות:

שיטה נקודת קצה מטרה
POST /issues/ יצירת משימה
PATCH /issues/{issueKey} עדכון משימה
GET /issues/{issueKey} קבלת משימה
POST /issues/{issueKey}/transitions/{id}/_execute שינוי סטטוס
GET /issues/{issueKey}/comments תגובות למשימה
POST /issues/{issueKey}/comments הוספת תגובה

עבור webhooks, משתמשים בטריגרים — המוגדרים בממשק טרקר ברמת התור.

ארכיטקטורת אינטגרציה

האינטגרציה היא דו-כיוונית, ולכן יש להימנע מלולאות. הפתרון: דגל "עדכון מאינטגרציה" (מנגנון נעילה).

טבלת מיפוי משימות:

class TrackerBitrix24TaskTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_local_tracker_task_map'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('BITRIX_TASK_ID'), // ID задачи в Битрикс24 new StringField('TRACKER_ISSUE_KEY'), // Например, "DEV-123" new StringField('SYNC_DIRECTION'), // B24_TO_TRACKER | TRACKER_TO_B24 | BIDIRECTIONAL new DatetimeField('LAST_SYNC_AT'), new StringField('SYNC_LOCK'), // NULL или UUID текущей операции ]; } } 

סנכרון Bitrix24 → יאנדקס טרקר

אנו משתמשים באירוע class TrackerBitrix24TaskTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_local_tracker_task_map'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('BITRIX_TASK_ID'), // ID задачи в Битрикс24 new StringField('TRACKER_ISSUE_KEY'), // Например, "DEV-123" new StringField('SYNC_DIRECTION'), // B24_TO_TRACKER | TRACKER_TO_B24 | BIDIRECTIONAL new DatetimeField('LAST_SYNC_AT'), new StringField('SYNC_LOCK'), // NULL или UUID текущей операции ]; } } מהמודול OnTaskUpdate:

// /local/modules/local.trackerintegration/lib/handlers/taskhandler.php namespace Local\TrackerIntegration\Handlers; class TaskHandler { public static function onTaskUpdate(int $taskId, array $arFields): void { $map = TrackerBitrix24TaskTable::getByBitrixId($taskId); if (!$map || $map['SYNC_LOCK'] !== null) { return; // Нет маппинга или уже синхронизируем } // Ставим лок TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => uniqid()]); try { $client = new TrackerApiClient(); $payload = []; if (isset($arFields['TITLE'])) { $payload['summary'] = $arFields['TITLE']; } if (isset($arFields['DESCRIPTION'])) { $payload['description'] = $arFields['DESCRIPTION']; } if (isset($arFields['STATUS'])) { // Маппинг статусов Битрикс24 → Трекер $trackerStatus = StatusMapper::b24ToTracker($arFields['STATUS']); $client->executeTransition($map['TRACKER_ISSUE_KEY'], $trackerStatus); } if (!empty($payload)) { $client->updateIssue($map['TRACKER_ISSUE_KEY'], $payload); } TrackerBitrix24TaskTable::update($map['ID'], [ 'SYNC_LOCK' => null, 'LAST_SYNC_AT' => new \Bitrix\Main\Type\DateTime(), ]); } catch (\Exception $e) { TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => null]); \Bitrix\Main\Diag\Debug::addToLog('TrackerSync error: ' . $e->getMessage()); } } } 

רישום ה-handler:

\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'tasks', 'OnTaskUpdate', [\Local\TrackerIntegration\Handlers\TaskHandler::class, 'onTaskUpdate'] ); 

Webhook מיאנדקס טרקר → Bitrix24

ה-handler של ה-webhook הוא בקר הנגיש דרך כתובת URL ציבורית. בטרקר מוגדר טריגר: "כשהסטטוס משתנה → POST לכתובת https://company.bitrix24.ru/local/tracker/webhook/".

// /local/tracker/webhook/index.php $rawBody = file_get_contents('php://input'); $event = json_decode($rawBody, true); // Проверяем secret-заголовок (задаётся в настройках триггера Трекера) $secret = $_SERVER['HTTP_X_TRACKER_SECRET'] ?? ''; if ($secret !== TRACKER_WEBHOOK_SECRET) { http_response_code(403); exit; } $issueKey = $event['issue']['key'] ?? null; $newStatus = $event['updatedAttributes']['status']['to']['key'] ?? null; if (!$issueKey || !$newStatus) { http_response_code(200); exit; } $map = TrackerBitrix24TaskTable::getByTrackerKey($issueKey); if (!$map || $map['SYNC_LOCK'] !== null) { http_response_code(200); exit; } TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => uniqid()]); $b24Status = StatusMapper::trackerToB24($newStatus); $task = new \CTasks(); $task->Update($map['BITRIX_TASK_ID'], ['STATUS' => $b24Status], false); TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => null, 'LAST_SYNC_AT' => new \Bitrix\Main\Type\DateTime()]); http_response_code(200); echo json_encode(['ok' => true]); 

מיפוי סטטוסים

הסטטוסים בשתי המערכות אינם תואמים — יש צורך בטבלת התאמה:

Bitrix24 (STATUS) יאנדקס טרקר (מפתח)
1 (חדש) open
2 (התקבל) inProgress
3 (בביצוע) inProgress
4 (ממתין לבקרה) needInfo
5 (הושלם) closed
7 (נדחה) onHold

המיפוי נשמר בקובץ תצורה או ב-tasks.

איך להימנע מלולאות בסנכרון דו-כיווני?

בסנכרון דו-כיווני, מנגנון נעילה הוא קריטי למניעת לולאות אינסופיות. כאשר ה-handler // /local/modules/local.trackerintegration/lib/handlers/taskhandler.php namespace Local\TrackerIntegration\Handlers; class TaskHandler { public static function onTaskUpdate(int $taskId, array $arFields): void { $map = TrackerBitrix24TaskTable::getByBitrixId($taskId); if (!$map || $map['SYNC_LOCK'] !== null) { return; // Нет маппинга или уже синхронизируем } // Ставим лок TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => uniqid()]); try { $client = new TrackerApiClient(); $payload = []; if (isset($arFields['TITLE'])) { $payload['summary'] = $arFields['TITLE']; } if (isset($arFields['DESCRIPTION'])) { $payload['description'] = $arFields['DESCRIPTION']; } if (isset($arFields['STATUS'])) { // Маппинг статусов Битрикс24 → Трекер $trackerStatus = StatusMapper::b24ToTracker($arFields['STATUS']); $client->executeTransition($map['TRACKER_ISSUE_KEY'], $trackerStatus); } if (!empty($payload)) { $client->updateIssue($map['TRACKER_ISSUE_KEY'], $payload); } TrackerBitrix24TaskTable::update($map['ID'], [ 'SYNC_LOCK' => null, 'LAST_SYNC_AT' => new \Bitrix\Main\Type\DateTime(), ]); } catch (\Exception $e) { TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => null]); \Bitrix\Main\Diag\Debug::addToLog('TrackerSync error: ' . $e->getMessage()); } } } מקבל אירוע, הוא בודק את השדה \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'tasks', 'OnTaskUpdate', [\Local\TrackerIntegration\Handlers\TaskHandler::class, 'onTaskUpdate'] ); בטבלת המיפוי. אם // /local/tracker/webhook/index.php $rawBody = file_get_contents('php://input'); $event = json_decode($rawBody, true); // Проверяем secret-заголовок (задаётся в настройках триггера Трекера) $secret = $_SERVER['HTTP_X_TRACKER_SECRET'] ?? ''; if ($secret !== TRACKER_WEBHOOK_SECRET) { http_response_code(403); exit; } $issueKey = $event['issue']['key'] ?? null; $newStatus = $event['updatedAttributes']['status']['to']['key'] ?? null; if (!$issueKey || !$newStatus) { http_response_code(200); exit; } $map = TrackerBitrix24TaskTable::getByTrackerKey($issueKey); if (!$map || $map['SYNC_LOCK'] !== null) { http_response_code(200); exit; } TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => uniqid()]); $b24Status = StatusMapper::trackerToB24($newStatus); $task = new \CTasks(); $task->Update($map['BITRIX_TASK_ID'], ['STATUS' => $b24Status], false); TrackerBitrix24TaskTable::update($map['ID'], ['SYNC_LOCK' => null, 'LAST_SYNC_AT' => new \Bitrix\Main\Type\DateTime()]); http_response_code(200); echo json_encode(['ok' => true]); אינו null, זה אומר שהשינוי כבר מעובד על ידי הצד השני — ה-handler יוצא ללא ביצוע. גישה זו עובדת מהר יותר ואמינה יותר מאשר בדיקות חותמות זמן, מכיוון שהיא מבטלת מצבי מרוץ בבקשות מקבילות. לפי התיעוד הרשמי של Bitrix24, האירוע b_option מופעל על כל שינוי במשימה, כך שללא מנגנון נעילה, הסנכרון היה נכנס ללולאה במהירות. היישום שלנו מבטיח שכל עדכון מעובד בדיוק פעם אחת.

יצירת משימה בטרקר מתוך עסקה ב-Bitrix24

תרחיש נוסף: כאשר נוצרת עסקה מסוג מסוים, נוצרת אוטומטית משימה בטרקר. מיושם דרך תהליך עסקי או דרך ה-handler של האירוע OnTaskUpdate:

public static function onCrmDealAdd(int $dealId, array $arFields): void { if ($arFields['TYPE_ID'] !== 'DEVELOPMENT') { return; } $client = new TrackerApiClient(); $issue = $client->createIssue([ 'queue' => 'DEV', 'summary' => 'CRM Deal #' . $dealId . ': ' . $arFields['TITLE'], 'type' => 'task', 'assignee' => UserMapper::b24ToTracker($arFields['ASSIGNED_BY_ID']), 'tags' => ['crm', 'auto-created'], ]); // Сохранить маппинг TrackerBitrix24TaskTable::add([ 'BITRIX_TASK_ID' => 0, // Нет задачи, только сделка 'TRACKER_ISSUE_KEY' => $issue['key'], 'SYNC_DIRECTION' => 'BIDIRECTIONAL', ]); // Записать ключ задачи в поле сделки \CCrmDeal::Update($dealId, ['UF_TRACKER_ISSUE_KEY' => $issue['key']], false); } 

תהליך העבודה

  1. ניתוח — אנו לומדים את התהליכים העסקיים הקיימים, מזהים ישויות לסנכרון.
  2. תכנון — אנו מתכננים ארכיטקטורה, טבלת מיפוי, מנגנון נעילה.
  3. יישום — אנו כותבים קוד ב-PHP 8.1+, תוך שימוש ב-Bitrix24 ORM וב-Tracker REST API.
  4. בדיקות — אנו בודקים סנכרון על משימות בדיקה, מדמים קונפליקטים.
  5. פריסה — אנו פורסים לסביבת הייצור, מגדירים ניטור.
  6. תמיכה — לאחר ההשקה, אנו מספקים תמיכת אחריות ותיעוד.

לוחות זמנים משוערים

אפשרות היקף לוח זמנים
סנכרון חד-כיווני Bitrix24 → טרקר או להיפך מ-4 עד 6 ימים
סנכרון דו-כיווני משימות, סטטוסים, תגובות מ-8 עד 12 ימים
אינטגרציה מלאה + יצירה אוטומטית מעסקאות, מיפוי משתמשים מ-12 עד 16 ימים

העלות מחושבת באופן אישי — תלויה במורכבות ובהיקף העבודה. לקבלת הערכה מדויקת, צרו קשר.

למה לבחור באינטגרציה שלנו?

אינטגרציה דרך REST API ו-webhooks עובדת ביציבות ללא עומס על השרת. אנו משתמשים ב-cache מתויג וב-agents למשימות רקע. למהנדסים שלנו יש ניסיון של למעלה מ-8 שנים בפיתוח Bitrix24. סנכרון אוטומטי מסתיים תוך שניות, בעוד העברה ידנית אורכת עד 30–60 דקות ביום — האינטגרציה שלנו מאיצה את העבודה פי 50. אנו מבטיחים פעולה תקינה לאחר ההשקה ומספקים פתרונות מתועדים.

מה כלול בעבודה

  • תיעוד להתקנה ותפעול.
  • גישה למאגר הקוד.
  • הדרכת עובדים (שעה אונליין).
  • תמיכה ל-30 יום לאחר ההשקה.
  • אפשרות לשינויים בתרחישים חדשים.

הזמינו אינטגרציה — המהנדסים שלנו ינתחו את התהליכים שלכם ויציעו את הפתרון האופטימלי. קבלו ייעוץ עכשיו על ידי תיאור המשימה שלכם.