Інтеграція Бітрікс24 з Kaiten: синхронізація завдань та карток

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

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

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

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

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

Розробка інтеграції Бітрікс24 з Kaiten

Ми часто зустрічаємо ситуацію: менеджери працюють у Бітрікс24, розробники — у Kaiten, а завдання живуть своїм життям. Статуси розходяться, коментарі дублюються, терміни горять. У результаті — втрачені заявки та зайві дзвінки. Одна компанія з фінтеху втрачала до 15% заявок через те, що менеджери забували оновлювати статус у Kaiten після закриття угоди. Після інтеграції час передачі завдання скоротився з 2 годин до 2 хвилин. Наш досвід показує: без синхронізації між CRM та системою управління проектами будь-який Kanban-інструмент втрачає сенс.

Чому синхронізація між Бітрікс24 та Kaiten — це проблема?

Kaiten — російський аналог Jira, популярний після відходу західних вендорів. Він надає REST API та webhooks, але налаштування двосторонньої синхронізації вимагає глибокого розуміння обох продуктів. Типові помилки:

  • Циклічне оновлення: завдання змінилося в Бітрікс24 → оновилося в Kaiten → webhook повернув зміну назад, викликаючи нескінченний цикл. Рішення — блокування через SYNC_LOCK у таблиці маппінгу.
  • Втрата даних при масштабуванні: при 1000+ завдань на день синхронізація без черг дає race conditions. Використовуємо блокування та агенти.
  • Різний понятійний апарат: у Kaiten статуси — це колонки дошки (column_id), а в Бітрікс24 — числові STATUS. Маппінг зберігається в b_option та налаштовується під конкретну дошку.

Як ми реалізуємо інтеграцію?

Ми розробляємо рішення на PHP 8.1+ з використанням Bitrix D7 ORM. Основою є клас KaitenApiClient, який інкапсулює HTTP-запити до Kaiten (ключові ендпоінти — таблиця нижче).

Метод URL Призначення
GET /api/latest/cards Список карток
POST /api/latest/cards Створити картку
PATCH /api/latest/cards/{id} Оновити картку
GET /api/latest/boards Список дощок
GET /api/latest/columns Колонки дошки
POST /api/latest/cards/{id}/comments Додати коментар

Для зберігання зв'язків використовуємо власну таблицю b_local_kaiten_task_map з полями BITRIX_TASK_ID, KAITEN_CARD_ID та SYNC_LOCK для блокування.

class KaitenApiClient { private string $baseUrl; private string $token; public function __construct(string $baseUrl, string $token) { $this->baseUrl = rtrim($baseUrl, '/'); $this->token = $token; } public function createCard(array $data): array { return $this->request('POST', '/api/latest/cards', $data); } public function updateCard(int $cardId, array $data): array { return $this->request('PATCH', "/api/latest/cards/{$cardId}", $data); } public function addComment(int $cardId, string $text): array { return $this->request('POST', "/api/latest/cards/{$cardId}/comments", ['text' => $text]); } private function request(string $method, string $path, array $data = []): array { $ch = curl_init($this->baseUrl . $path); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $this->token, 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => $method !== 'GET' ? json_encode($data) : null, ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode >= 400) { throw new \RuntimeException("Kaiten API error {$httpCode}: {$response}"); } return json_decode($response, true) ?? []; } } 

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

  • Аналітика та проектування: описуємо сценарії синхронізації (завдання, статуси, коментарі, файли), погоджуємо маппінг колонок.
  • Розробка компонентів: клієнт для Kaiten API, обробники подій Бітрікс24 (OnTaskUpdate, OnCrmDealUpdate), webhook-обробник.
  • Тестування: перевірка на тестовому контурі з емуляцією навантаження до 500 завдань на годину.
  • Деплой та навчання: налаштування на бойовому сервері, передача документації по API ендпоінтам та інструкція для адміністраторів.
  • Гарантійна підтримка: 1 місяць після здачі — виправляємо помилки безкоштовно. Сертифікат відповідності та ліцензія на рішення надаються.

Двостороння синхронізація: картки та webhook

При зміні завдання в Бітрікс24 (подія OnTaskUpdate) спрацьовує обробник, який оновлює картку Kaiten через PATCH /api/latest/cards/{id}. Щоб уникнути зациклювання, використовуємо SYNC_LOCK:

public static function onTaskUpdate(int $taskId, array $arFields): void { $map = KaitenTaskMapTable::getByBitrixId($taskId); if (!$map || $map['SYNC_LOCK'] !== null) { return; } KaitenTaskMapTable::update($map['ID'], ['SYNC_LOCK' => uniqid()]); try { $client = self::getClient(); $kaitenData = []; if (isset($arFields['TITLE'])) { $kaitenData['title'] = $arFields['TITLE']; } if (isset($arFields['DESCRIPTION'])) { $kaitenData['description'] = strip_tags($arFields['DESCRIPTION']); } if (isset($arFields['DEADLINE'])) { $kaitenData['due_date'] = date('Y-m-d', strtotime($arFields['DEADLINE'])); } if (isset($arFields['STATUS'])) { $columnId = StatusMapper::b24StatusToKaitenColumn($arFields['STATUS']); $kaitenData['column_id'] = $columnId; } if (!empty($kaitenData)) { $client->updateCard($map['KAITEN_CARD_ID'], $kaitenData); } KaitenTaskMapTable::update($map['ID'], [ 'SYNC_LOCK' => null, 'LAST_SYNC_AT' => new \Bitrix\Main\Type\DateTime(), ]); } catch (\Exception $e) { KaitenTaskMapTable::update($map['ID'], ['SYNC_LOCK' => null]); \Bitrix\Main\Diag\Debug::addToLog('KaitenSync: ' . $e->getMessage()); } } 

Webhook з Kaiten в Бітрікс24 приймає JSON з подією card.updated:

{ "event": "card.updated", "data": { "id": 12345, "title": "Нова назва завдання", "column_id": 678, "assignees": [{"id": 99, "username": "[email protected]"}] } } 

Обробник перевіряє HMAC-підпис і, якщо блокування не активне, оновлює статус завдання в Бітрікс24 через CTasks::Update.

Маппінг колонок та автостворення з CRM

Приклад маппінгу для дошки «Розробка»:

Kaiten column_id Назва колонки Бітрікс24 STATUS
101 Беклог 1 (Нова)
102 В роботі 3 (В роботі)
103 На рев'ю 4 (Чекає контролю)
104 Готово 5 (Завершена)

Корисний кейс — автоматичне створення картки Kaiten при переході угоди CRM на стадію «Розробка». Реалізуємо через OnCrmDealUpdate:

if ($arFields['STAGE_ID'] === 'DEVELOPMENT') { $client = KaitenApiClientFactory::create(); $card = $client->createCard([ 'title' => 'Deal #' . $dealId . ': ' . $arFields['TITLE'], 'board_id' => KAITEN_DEV_BOARD_ID, 'column_id' => KAITEN_BACKLOG_COLUMN_ID, 'description' => $arFields['COMMENTS'], ]); \CCrmDeal::Update($dealId, ['UF_KAITEN_CARD_ID' => $card['id']], false); } 

Наш підхід дає економію часу до 2 разів порівняно з ручною синхронізацією. Компанії з досвідом інтеграцій підтверджують: автоматизація виключає людські помилки та прискорює передачу завдань між відділами.

Терміни розробки

Варіант Склад Термін
Одностороння (Бітрікс24 → Kaiten) Створення та оновлення карток 3–5 днів
Двостороння синхронізація Статуси, коментарі, маппінг користувачів 7–10 днів
З автостворенням з CRM Воронка → створення картки, звіти 10–14 днів

Вартість розраховується індивідуально. Зв'яжіться з нами — оцінимо проект безкоштовно. Отримайте консультацію щодо архітектури інтеграції та термінів впровадження.

Понад 5 років досвіду розробки інтеграцій для Бітрікс24. Сертифіковані рішення, гарантія якості.

Як перевірити коректність синхронізації?

Рекомендуємо налаштувати моніторинг: записувати в лог кожен виклик API та перевіряти відсутність помилок. Використовуйте агент, який раз на годину звіряє кількість завдань в обох системах. При розбіжності надсилається сповіщення адміністратору. Це дозволяє швидко виявляти збої та підтримувати актуальність даних.

Що дає автоматизація замість ручного перенесення?

Ручне копіювання завдань займає в середньому 10–15 хвилин на одне завдання. При 20 завданнях на день це 3–4 години роботи. Автоматизація скорочує цей час до секунд та виключає помилки та пропуски. Крім того, статуси в Kaiten змінюються автоматично при зміні угоди — менеджеру не потрібно заходити в інший інтерфейс.