<!-- source: https://nodbot.ru/integrations/trello/; markdown: /llms/pages/generated/integrations-trello.md; type: IntegrationGuide -->
---
title: "Trello и n8n: карточки без дублей | Nodbot"
source_url: "https://nodbot.ru/integrations/trello/"
canonical_url: "https://nodbot.ru/integrations/trello/"
language: "ru"
content_type: "IntegrationGuide"
section: "integrations"
generated_at: "2026-05-30"
word_count_source: 978
---

## AI summary

Problem/Solution-гайд по Trello и n8n: как превращать заявки, письма и события в карточки Trello без дублей, потери labels, checklist и ответственного.

## Best used for

Страница нужна интеграторам, product/engineering-командам и владельцам n8n, которые хотят внедрить связку без дублей, ручного хаоса и потери контекста.

## Key topics

- Trello
- n8n
- card automation
- webhook
- external_id
- dedupe
- labels
- checklist
- kanban
- workflow JSON

# Интеграция Trello и n8n: карточки, webhooks и защита от дублей

Обновлено: 2026-05-30

Импортируйте JSON в n8n, замените credentials, URL API, project/list IDs, поля и лимиты под вашу инфраструктуру.

- Проблема и решение

- Архитектура workflow

- Контракт данных

- Code Node и проверки

- Готовый workflow JSON

- Пошаговая настройка

- Тесты перед production

- Production-риски

- Полезные ссылки

- Критерии готовности

Проблема: Trello легко использовать как простую kanban-доску, но автоматизация “создать карточку на каждый webhook” быстро даёт дубли, неправильные lists и описания без контекста.

Решение: Настройте n8n как слой синхронизации: нормализуйте входное событие, соберите external_id, найдите существующую карточку, обновите labels/checklist и только потом создавайте новую карточку в нужном list.


## Проблема: почему простая интеграция создаёт дубли и ручной хаос

Trello часто подключают к формам, CRM, почте и Telegram как лёгкий операционный слой. Боль появляется после первых повторных событий: клиент дважды отправил форму, письмо пришло в треде, статус в CRM изменился повторно, а на доске появились две одинаковые карточки.

Для команды важны не только title и description. Нужны board, list, labels, due date, checklist, assignee, ссылка на исходную сущность и машинный ключ дедупликации. Если эти поля лежат только в тексте карточки, автоматизация продаж, поддержки или контента быстро превращается в ручную сортировку.


## Архитектура workflow для n8n

| Блок | Задача | Production-проверка |

| --- | --- | --- |

| Webhook event | принимает заявку, письмо или событие из внешней системы | source, entity_id, event_type |

| Normalize Trello fields | готовит name, desc, due, labels и checklist | валидный due date и обязательный external_id |

| Find existing card | ищет карточку по external_id в desc или custom field | поиск выполняется до create |

| Create or update card | создаёт карточку или обновляет найденную | idList, labels, members, checklist |

| Add checklist/comment | фиксирует историю и следующие шаги | без секретов и PII в комментариях |

| Respond / alert | возвращает статус или отправляет ошибку | понятный 200, alert и DLQ |

Если Trello используется как production-доска, external_id лучше хранить в Custom Fields или в первой строке description в формате, который можно найти API-запросом. Так карточка переживает ручные изменения названия.


## Контракт входных данных

```json
{
  "source": "support_form",
  "event_type": "new_request",
  "entity_id": "ticket-4821",
  "title": "Проверить заявку клиента по интеграции",
  "description": "Клиент просит настроить передачу заявок в CRM без дублей",
  "board_id": "64f000000000000000000001",
  "list_id": "64f000000000000000000010",
  "labels": [
    "support",
    "crm",
    "high-priority"
  ],
  "due_date": "2026-06-04T12:00:00.000Z",
  "checklist": [
    "Проверить payload",
    "Назначить ответственного",
    "Ответить клиенту"
  ],
  "source_url": "https://crm.example.ru/tickets/4821"
}
```

Минимальный контракт: source, entity_id, title и list_id. Labels, due date и checklist повышают пользу карточки, но не должны заменять ключ дедупликации.


## Code Node: нормализация, mapping и guard-условия

```javascript
const src = $json.body ?? $json;
const source = String(src.source ?? 'external').trim().toLowerCase();
const entityId = String(src.entity_id ?? src.id ?? '').trim();
if (!entityId) throw new Error('No entity_id for Trello card sync');
const title = String(src.title ?? '').trim();
if (title.length < 5) throw new Error('Trello card title is too short');
const due = String(src.due_date ?? '').trim();
if (due && Number.isNaN(Date.parse(due))) throw new Error(`Invalid Trello due date: ${due}`);
const labels = Array.isArray(src.labels) ? src.labels.slice(0, 8).map(String) : [];
const checklist = Array.isArray(src.checklist) ? src.checklist.map(String).filter(Boolean) : [];
const externalId = `trello-sync:${source}:${entityId}`;
return [{ json: {
  external_id: externalId,
  trello: {
    idList: src.list_id,
    name: title.slice(0, 160),
    desc: `[external_id:${externalId}]
${String(src.description ?? '').trim()}

Source: ${src.source_url ?? ''}`,
    due: due || null,
    labels,
    checklist
  },
  search_query: externalId,
  source_url: src.source_url ?? '',
  received_at: new Date().toISOString()
}}];
```

Название карточки люди меняют вручную. External ID стабилен и позволяет безопасно обновлять одну карточку при повторных webhook-событиях, даже если заголовок уже отредактирован менеджером.


## Готовый workflow JSON: скачать и импортировать

Скачать готовый workflow JSON Скачать тестовый payload

```json
{
  "name": "Nodbot - Trello card sync with dedupe",
  "nodes": [
    {
      "name": "Webhook Trello event",
      "type": "n8n-nodes-base.webhook",
      "purpose": "Принять событие"
    },
    {
      "name": "Normalize Trello fields",
      "type": "n8n-nodes-base.code",
      "purpose": "Подготовить card payload"
    },
    {
      "name": "Find existing card",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Найти карточку по external_id"
    },
    {
      "name": "Create or update card",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Создать или обновить карточку"
    },
    {
      "name": "Add checklist/comment",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Добавить checklist и историю"
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "purpose": "Вернуть статус"
    }
  ],
  "connections": "Webhook Trello event → Normalize Trello fields → Find existing card → Create or update card → Add checklist/comment → Respond"
}
```


## Пошаговая настройка связки

- Создайте отдельный board/list для production-сценария и выпишите idList.

- Импортируйте workflow JSON и замените Trello API key/token или credential.

- Настройте поиск карточки по external_id до создания новой карточки.

- Сопоставьте labels и members с реальными правилами команды.

- Отправьте тестовый payload дважды и проверьте, что карточка не дублируется.


## Тесты перед production

```bash
curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-trello-n8n-card-sync" \
  -H "Content-Type: application/json" \
  --data @integration-trello-n8n-card-sync-payload.json
```

- Повторный payload не создаёт дубль и возвращает тот же output key.

- Некорректный mapping останавливается до запроса к внешнему API.

- Пустые необязательные поля не ломают workflow.

- Ошибка API уходит в alert или DLQ с безопасным payload.

- Execution data не содержит секретов, токенов и лишних персональных данных.


## Production-риски

- Поиск по названию. Ручное переименование карточки ломает дедупликацию.

- list_id приходит из формы. Пользователь может отправить карточку в неправильный список.

- Checklist создаётся каждый раз заново. Повтор webhook плодит одинаковые пункты.

- Секреты в description. Не кладите токены, полный webhook и приватные payload в карточку.

- Нет DLQ. Ошибка Trello API потеряет заявку, если workflow просто завершится с failed execution.


## Полезные ссылки и смежные материалы

- Trello REST API Webhooks

- Trello Cards API

- n8n Trello node

- Slack alerts

- Retry и DLQ для HTTP API


## Критерии готовности

- Повторный entity_id обновляет existing card, а не создаёт дубль.

- list_id и labels берутся из allowlist.

- Due date валидируется до запроса к Trello API.

- Checklist не дублирует уже созданные пункты.

- Ошибки Trello API уходят в alert или DLQ.

Nodbot настроит Trello + n8n: карточки без дублей, labels, checklist, due date, алерты и понятные правила обновления.
