Налаштування інтеграції Bitrix24 з Redmine
Частина команди працює в Redmine — привикла, налаштувала workflow, не хоче переїжджати. Інша частина — в Bitrix24, бо там CRM, телефонія та чати. Результат: задачі дублюються вручну, статуси розходяться, а при спробі зібрати звіт по проекту потрібно відкрити обидві системи та звести дані в таблиці. Redmine та Б24 можна зв'язати через API та перестати тратити час на ручний перенос.
Архітектура інтеграції
Зв'язка працює через Redmine REST API та Б24 REST API. Redmine надає JSON/XML API для роботи з issues, проектами, користувачами та записами часу. Redmine не має вбудованих webhooks — middleware використовує polling для відстеження змін.
Б24 (подія задачі) → Webhook → Middleware → Redmine REST API → Issue
Redmine (polling) → Middleware → Б24 REST API → Задача
Polling працює так: middleware кожні 30–60 секунд запитує GET /issues.json?updated_on=>=<last_check_time>&status_id=* — отримує всі issues, оновлені після останньої перевірки. Для Б24 використовуються стандартні вебхуки через event.bind.
Маппінг полів
| Поле Б24 (tasks.task) | Поле Redmine (issue) | Примітка |
|---|---|---|
| TITLE | subject | Пряме відповідання |
| DESCRIPTION | description | Б24 HTML → Redmine Textile/Markdown |
| RESPONSIBLE_ID | assigned_to_id | Через таблицю маппінга |
| CREATED_BY | author_id | Аналогічно |
| DEADLINE | due_date | YYYY-MM-DD |
| PRIORITY | priority_id | Маппінг значень |
| STATUS | status_id | Окрема конфігурація |
| GROUP_ID (проект) | project_id | Таблиця відповідностей |
Redmine використовує Textile (за умовчанням) або Markdown для описів. Middleware конвертує HTML з Б24 у потрібний формат: заголовки, списки, посилання, виділення.
Маппінг статусів
Redmine дозволяє створювати довільні статуси та переходи (workflow). Middleware підтримує гнучкий маппінг:
| Статус Б24 | Статус Redmine | ID Redmine (типовий) |
|---|---|---|
| Нова | New | 1 |
| Виконується | In Progress | 2 |
| Чекає контролю | Resolved | 3 |
| Завершена | Closed | 5 |
| На паузі | Feedback | 4 |
Важливий нюанс: Redmine перевіряє допустимі переходи статусів через workflow. Middleware перед оновленням запитує доступні переходи та виконує проміжні кроки, якщо прямий перехід неможливий.
Кастомні поля
Redmine активно використовує кастомні поля (Custom Fields). Middleware підтримує маппінг довільних полів:
-
Текстові (string/text) ↔ рядкові поля Б24
UF_CRM_*. - Списки (list) ↔ select-поля Б24. Middleware маппит значення за ID або назвою.
- Числові (int/float) ↔ числові поля Б24.
- Дата ↔ поля дати Б24.
- Логічні (bool) ↔ чекбокси Б24.
Конфігурація маппінга зберігається в middleware та редагується через панель адміністрування.
Синхронізація проектів
Redmine-проекти маппяться на проекти (групи) Б24:
| Проект Redmine | Проект Б24 | Трекер |
|---|---|---|
| web-frontend | Розробка фронтенду | Bug, Feature |
| mobile-app | Мобільний додаток | Bug, Feature, Support |
| internal-tools | Внутрішні інструменти | Feature |
Трекер Redmine (Bug, Feature, Support) визначає тип задачі. Middleware може маппити трекер на тег або кастомне поле в Б24.
Прив'язка тикетів до задач
Middleware зберігає таблицю маппінга b24_task_id ↔ redmine_issue_id. При створенні задачі в одній системі автоматично створюється парна в іншій. Критерій синхронізації — приналежність до маппованого проекту.
Коментарі (journals у Redmine) синхронізуються в обидві сторони:
- З Redmine: middleware парсить
journalsзnotesпри polling та створює коментарі в задачі Б24. - З Б24: за подією
ONTASKCOMMENTADDmiddleware викликаєPUT /issues/{id}.jsonз полемnotes.
Першочергова міграція
Перед включенням синхронізації middleware переносить існуючі дані:
- Виконання issues з Redmine через
GET /issues.json?project_id={id}&limit=100&offset={n}. - Створення задач в Б24 через
tasks.task.addз маппингом усіх полів. - Зворотне виконання задач Б24, яких немає в Redmine.
- Заповнення таблиці маппінга ID.
Аутентифікація
-
Redmine: API Key (My Account → API access key). Передається в заголовку
X-Redmine-API-Key. API необхідно увімкнути в Administration → Settings → API. -
Б24: OAuth 2.0 з scope
task,user. - Middleware зберігає ключі зашифрованими. Для Redmine на self-hosted — middleware повинен мати мережевий доступ до сервера.
Що впроваджуємо
- Middleware для двунаправленої синхронізації задач Б24 та тикетів Redmine
- Polling-механізм для відстеження змін у Redmine
- Маппінг полів, статусів, пріоритетів та кастомних полів
- Синхронізацію коментарів між системами
- Маппінг проектів та трекерів
- Першочергову міграцію існуючих даних







