# Plane → Singularity: назначение задачи **Workflow ID:** `zyO77cIUNdbc4xPH` **n8n URL:** https://n8n.striker.su **Создан:** 2026-03-23 ## Назначение Автоматически синхронизирует задачи из Plane в Singularity: - **Назначена на меня** → создаёт задачу в Singularity - **Задача завершена** → находит задачу в Singularity и закрывает её ## Схема ``` Webhook (POST /webhook/plane-assignment) | Switch "Тип события" |-- [assignee_ids содержит gen.director@hhivp.com] | | | Code "Подготовить данные" (маппинг проекта, приоритета, дедлайна) | | | HTTP POST /v2/task (создать задачу в Singularity) | +-- [state_id -> state.group == completed] | HTTP GET /v2/task?search=PROJ-42 (найти задачу) | HTTP PATCH /v2/task/{id} (закрыть {"complete": 1}) ``` ## Plane Webhook Зарегистрирован через PostgreSQL (API endpoint /api/v1/workspaces/.../webhooks/ недоступен): ```sql -- На сервере Plane (rd.hhivp.com), БД: plane INSERT INTO webhooks (id, url, is_active, workspace, issue, created_at, updated_at) VALUES ( '1d053279-658a-4987-8ee0-303f2c7b952e', 'https://n8n.striker.su/webhook/plane-assignment', true, 'c9e0fe9f-02dd-4bd4-9026-d8783e10c4b2', true, NOW(), NOW() ); ``` ## Реальная структура payload от Plane ```json { "event": "issue", "action": "updated", "data": { "project": "", "project_identifier": "TCKT", "sequence_id": 42, "name": "Название задачи", "priority": "high", "target_date": "2026-04-01", "description_stripped": "...", "state": { "group": "completed" } }, "activity": { "field": "assignee_ids", "new_value": ["f7a5e9db-eaf0-4314-9440-4b28094f5db1"], "old_value": null } } ``` > ВАЖНО: Plane шлёт field="assignee_ids" (не "assignees") и field="state_id" (не "state"). > new_value для assignee -- массив строк UUID, не строка. ## Пользователь | Параметр | Значение | |----------|----------| | Email | gen.director@hhivp.com | | UUID | f7a5e9db-eaf0-4314-9440-4b28094f5db1 | ## Маппинг проектов Plane -> Singularity | Plane UUID (сокращ.) | Идентификатор | Singularity Project | |----------------------|---------------|---------------------| | 0a821ae1 | DRC | P-b40d30ed (ДРЦ Нагорное) | | 87598e10 | NAVISCOPE | P-00ddf477 | | 1099af67 | NAB | P-30340426 (Прочее) | | 2d35134d | MANYH | P-5a0bd9ad (ИП Маняхин) | | 1f4bcaee | TCKT | P-638ec16a (HHIVP Инфра) | | 74d5b2f9 | CIFRA | P-63c01156 (ЦифраЦифра) | | 26cd4aab | VEHA | P-39d04293 (Веха) | | 66748cf3 | SINVS | P-b1a9d408 (Олимпийский 42а) | | 309e735f | SHAUS | P-8624fef6 (СтифтерХаус) | | 404b4c7a | YAR | P-ea61bc07 (Ярослав В.) | | 89133e7f | SBOR | P-e4c50922 (Старый Большевик) | | dd3495bf | SMED | P-cec926a1 (Северное Медведково) | | 94e0ddd0 | SAMOI | P-e73fe9a8 (А. Самойлов) | | a3906157 | HG | P-32c6abd8 (Сад Здоровья) | | ec70a115 | ROMA | P-281f799e (Ромашка) | | 04427cbb | NIIH | P-30340426 (Прочее) | | 191c0a5b | LIANZ | P-7377d35f (Лианозово) | | 5db759d0 | MOIS | P-db73597a (ИП Моисеев) | | 60c0bd07 | VONDI | P-04b65df5 (Вондига) | | c4cdd5fb | 4101 | P-30340426 (Прочее) | | c6b2531b | BCOM | P-30340426 (Прочее) | | 91a97d40 | DELTA | P-62de7005 (Дельта) | | eaef875f | WEB | P-638ec16a (HHIVP Инфра) | | 51846118 | REGRU | P-a3f177b1 (Домены) | | 910aa865 | HARZL | P-05ca29bb (ХарцЛабс) | | dfd2a49f | 3DRU | P-181d5832 (3Д.РУ) | | 46f45846 | IVA | P-d7a92af2 (Ива) | | 4df07960 | HHVIP | P-638ec16a (HHIVP Инфра) | Неизвестный проект -> P-91f69023 (fallback) ## Singularity API - Base URL: https://api.singularity-app.com/v2 - Auth: Bearer 11a4eac1-3dd9-4448-99f6-0b3c58315a5d - Create task: POST /task - Search task: GET /task?search=PROJ-42 - Close task: PATCH /task/{id} body: {"complete": 1} ## Обновление workflow Скрипт для обновления через n8n API: `update_workflow.py` ```bash python update_workflow.py ``` n8n API: PUT https://n8n.striker.su/api/v1/workflows/zyO77cIUNdbc4xPH