Настройка интеграции Битрикс24 с Redmine
Часть команды работает в Redmine — привыкли, настроили workflow, не хотят переезжать. Другая часть — в Битрикс24, потому что там 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) ↔
UF_CRM_*строковые поля Б24. - Списки (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
- Маппинг полей, статусов, приоритетов и кастомных полей
- Синхронизацию комментариев между системами
- Маппинг проектов и трекеров
- Первоначальную миграцию существующих данных







