Розробка інтеграції Бітрікс24 з Яндекс.Трекер: повний гайд

Розробка інтеграції Бітрікс24 з Яндекс.Трекер Типова ситуація: розробники живуть у Яндекс.Трекері, менеджери ведуть клієнтські угоди в Бітрікс24. Задачу створено в Трекері — менеджер не бачить її актуальний статус. Статус змінився в Бітрікс24 — розробник дізнається про це через третіх осіб. Ручне
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка інтеграції Бітрікс24 з Яндекс.Трекер: повний гайд
Середній
~1-2 тижні

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

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1460
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1166

Розробка інтеграції Бітрікс24 з Яндекс.Трекер

Типова ситуація: розробники живуть у Яндекс.Трекері, менеджери ведуть клієнтські угоди в Бітрікс24. Задачу створено в Трекері — менеджер не бачить її актуальний статус. Статус змінився в Бітрікс24 — розробник дізнається про це через третіх осіб. Ручне перенесення забирає години на день і загрожує помилками. Розглянемо типову IT-компанію: команда розробки використовує Яндекс.Трекер для керування задачами, а відділ продажів працює в Бітрікс24. При узгодженні задач виникає розрив — статуси не синхронізовані, інформація застаріває за годину. Наша інтеграція усуває цей розрив автоматично, знижуючи ймовірність помилок і прискорюючи виконання задач. Ми вже реалізували такі рішення для клієнтів з різних галузей, включаючи компанії з сотнями співробітників. Пропонуємо інтеграцію під ключ — від проектування до підтримки після запуску.

Які проблеми вирішує інтеграція?

Ручне перенесення задач. Співробітники витрачають 30–60 хвилин щодня на копіювання заголовків і статусів між системами. Наш скрипт автоматизує це повністю.

Втрата актуальності. Інформація застаріває за годину — менеджер бачить «У роботі», а задачу вже закрито. Синхронізація в реальному часі усуває затримку.

Конфлікт статусів. У Бітрікс24 статусна модель одна, у Трекері — інша. Потрібен чіткий мапінг, інакше при синхронізації виникає плутанина.

Як ми це робимо: стек та архітектура

Яндекс.Трекер API: ключові методи

Трекер надає REST API з аутентифікацією OAuth 2.0. Токен організації передається в заголовку кожного запиту. Базовий URL: 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 Додати коментар

Для webhook'ів використовуються тригери — налаштовуються в інтерфейсі Трекера на рівні черги.

Архітектура інтеграції

Інтеграція двостороння, тому потрібно уникати петель. Рішення — прапорець «оновлення з інтеграції» (lock-механізм).

Таблиця мапінгу задач:

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 поточної операції ]; } } 

Синхронізація Бітрікс24 → Яндекс.Трекер

Використовуємо подію OnTaskUpdate модуля tasks:

// /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'] ); 

Webhook з Яндекс.Трекера → Бітрікс24

Обробник 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]); 

Мапінг статусів

Статуси в двох системах не збігаються — потрібна таблиця відповідностей:

Бітрікс24 (STATUS) Яндекс.Трекер (key)
1 (Нова) open
2 (Прийнята) inProgress
3 (У роботі) inProgress
4 (Чекає контролю) needInfo
5 (Завершена) closed
7 (Відкладена) onHold

Мапінг зберігається в конфігураційному файлі або в b_option.

Як уникнути зациклювання при двосторонній синхронізації?

При двосторонній синхронізації критичний lock-механізм, що запобігає нескінченним петлям. Коли обробник OnTaskUpdate отримує подію, він перевіряє поле SYNC_LOCK у таблиці мапінгу. Якщо SYNC_LOCK не дорівнює null, значить, зміна вже обробляється іншою стороною — обробник завершується без виконання. Такий підхід працює швидше та надійніше, ніж перевірка за часовими мітками, оскільки виключає стани гонки при паралельних запитах. Згідно з офіційною документацією Бітрікс24, подія OnTaskUpdate запускається при будь-якій зміні задачі, тому без lock-механізму синхронізація швидко зациклиться. Наша реалізація гарантує, що кожне оновлення обробляється рівно один раз.

Створення задачі в Трекері з угоди Бітрікс24

Додатковий сценарій — при створенні угоди певного типу автоматично створювати задачу в Трекері. Реалізується через бізнес-процес або через обробник події onCrmDealAdd:

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. Проектування — розробляємо архітектуру, таблицю мапінгу, lock-механізм.
  3. Реалізація — пишемо код на PHP 8.1+, використовуємо ORM Бітрікс24 та REST API Трекера.
  4. Тестування — перевіряємо синхронізацію на тестових задачах, симулюємо конфлікти.
  5. Деплой — розгортаємо на бойовому середовищі, налаштовуємо моніторинг.
  6. Підтримка — після запуску надаємо гарантійну підтримку та документацію.

Терміни орієнтовно

Варіант Склад Термін
Одностороння синхронізація Бітрікс24 → Трекер або навпаки від 4 до 6 днів
Двостороння синхронізація Задачі, статуси, коментарі від 8 до 12 днів
Повна інтеграція + Автостворення з угод, мапінг користувачів від 12 до 16 днів

Вартість розраховується індивідуально — залежить від складності та обсягу робіт. Щоб отримати точну оцінку, зв'яжіться з нами.

Чому обирають нашу інтеграцію?

Інтеграція через REST API та webhook працює стабільно, не навантажує сервер. Ми використовуємо кешування теговане та агенти для фонових задач. Досвід наших інженерів — понад 8 років у розробці на Бітрікс24. Автоматична синхронізація виконується за секунди, тоді як ручне перенесення займає до 30–60 хвилин на день — наша інтеграція прискорює роботу у 50 разів. Ми гарантуємо коректну роботу після запуску та надаємо документовані рішення.

Що входить в роботу

  • Документація з налаштування та експлуатації.
  • Доступи до репозиторію з кодом.
  • Навчання співробітників (1 година онлайн).
  • Підтримка протягом 30 днів після запуску.
  • Можливість доопрацювань під нові сценарії.

Замовте інтеграцію — наші інженери проаналізують ваші процеси та запропонують оптимальне рішення. Отримайте консультацію прямо зараз, описавши свою задачу.