Pular para conteúdo

TRELLO - Gerenciamento de Projetos

O que é este Node?

O TRELLO é o node responsável por integrar com o Trello permitindo criar cards, mover entre listas, adicionar comentários e gerenciar boards diretamente dos seus flows.

Por que este Node existe?

Automatizar gestão de projetos economiza tempo. O TRELLO existe para:

  1. Automatizar tarefas: Criar cards automaticamente a partir de conversas
  2. Sincronizar status: Mover cards conforme andamento de processos
  3. Centralizar informações: Registrar interações em cards do Trello
  4. Notificações automáticas: Adicionar comentários em cards via automação
  5. Gestão de equipe: Atribuir membros e labels automaticamente

Como funciona internamente?

Quando o TRELLO é executado, o sistema:

  1. Autentica usando API Key e Token do Trello
  2. Identifica operação (createCard, moveCard, getBoard, createList, addComment)
  3. Conecta à API do Trello v1
  4. Executa operação com os parâmetros fornecidos
  5. Retorna resultado com ID e URL do card/board
  6. Se erro: Loga e lança exceção

Código interno (productivity-executors.service.ts:546-629):

async executeTrello(data: any, variables: Record<string, any>): Promise<any> {
  try {
    this.logger.log('📋 [TRELLO] Executing operation');

    const trelloApiUrl = 'https://api.trello.com/1';
    const auth = `?key=${data.apiKey}&token=${data.apiToken}`;

    switch (data.operation) {
      case 'createCard':
        const createCardResponse = await firstValueFrom(
          this.httpService.post(`${trelloApiUrl}/cards${auth}`,
            {
              idList: data.listId,
              name: data.cardName,
              desc: data.description,
              due: data.dueDate,
              idMembers: data.memberIds || [],
              idLabels: data.labelIds || [],
            }
          )
        );
        return {
          success: true,
          cardId: createCardResponse.data.id,
          url: createCardResponse.data.url,
        };

      case 'moveCard':
        const moveCardResponse = await firstValueFrom(
          this.httpService.put(`${trelloApiUrl}/cards/${data.cardId}${auth}`,
            {
              idList: data.newListId,
            }
          )
        );
        return {
          success: true,
          cardId: moveCardResponse.data.id,
        };

      case 'getBoard':
        const getBoardResponse = await firstValueFrom(
          this.httpService.get(`${trelloApiUrl}/boards/${data.boardId}${auth}&lists=all&cards=visible`)
        );
        return {
          success: true,
          board: getBoardResponse.data,
        };

      case 'createList':
        const createListResponse = await firstValueFrom(
          this.httpService.post(`${trelloApiUrl}/lists${auth}`,
            {
              name: data.listName,
              idBoard: data.boardId,
            }
          )
        );
        return {
          success: true,
          listId: createListResponse.data.id,
        };

      case 'addComment':
        const addCommentResponse = await firstValueFrom(
          this.httpService.post(`${trelloApiUrl}/cards/${data.cardId}/actions/comments${auth}`,
            {
              text: data.comment,
            }
          )
        );
        return {
          success: true,
          commentId: addCommentResponse.data.id,
        };

      default:
        throw new Error(`Unknown Trello operation: ${data.operation}`);
    }
  } catch (error) {
    this.logger.error('Trello execution error:', error);
    throw error;
  }
}

Quando você DEVE usar este Node?

Use TRELLO quando precisar automatizar gestão de projetos:

Casos de uso:

  1. Criar card de suporte: Cada atendimento vira card automaticamente
  2. Mover cards por status: Atualizar kanban conforme progresso
  3. Adicionar comentários: Registrar interações em cards existentes
  4. Criar listas dinamicamente: Organizar boards por períodos/categorias
  5. Consultar boards: Verificar status de projetos em andamento
  6. Atribuir tarefas: Adicionar membros a cards automaticamente

Quando NÃO usar TRELLO:

Parâmetros Detalhados

operation (string, obrigatório)

O que é: Define qual operação será executada no Trello.

Valores possíveis: - createCard: Criar novo card - moveCard: Mover card para outra lista - getBoard: Buscar informações de um board - createList: Criar nova lista em um board - addComment: Adicionar comentário em card

apiKey (string, obrigatório)

O que é: Chave de API do Trello.

Como obter: Acesse https://trello.com/app-key

apiToken (string, obrigatório)

O que é: Token de autenticação do Trello.

Como obter: Gere em https://trello.com/app-key (após obter API Key)

listId (string, obrigatório para createCard)

O que é: ID da lista onde o card será criado.

Como obter: No Trello, abra a lista e copie o ID da URL ou use getBoard para listar.

Flow completo para testar:

{
  "name": "Teste TRELLO - Criar Card",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Título do Card",
        "parameters": {
          "message": "Qual o título do card?",
          "variable": "card_titulo"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Descrição",
        "parameters": {
          "message": "Descreva o card:",
          "variable": "card_descricao"
        }
      }
    },
    {
      "id": "trello_1",
      "type": "trello",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Criar Card",
        "parameters": {
          "operation": "createCard",
          "listId": "5f9a8b7c6d5e4f3g2h1j",
          "cardName": "{{card_titulo}}",
          "description": "{{card_descricao}}",
          "apiKey": "{{trello_api_key}}",
          "apiToken": "{{trello_api_token}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Card criado!\n\n🔗 {{trello_1.url}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "input_2" },
    { "source": "input_2", "target": "trello_1" },
    { "source": "trello_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

cardName (string, obrigatório para createCard)

O que é: Título do card a ser criado.

description (string, opcional)

O que é: Descrição detalhada do card.

dueDate (string, opcional)

O que é: Data de vencimento do card no formato ISO 8601.

Exemplo: "2025-01-20T18:00:00.000Z"

memberIds (array, opcional)

O que é: Array com IDs de membros a serem atribuídos ao card.

Exemplo: ["5f9a8b7c6d5e4f3g", "6a1b2c3d4e5f6g7h"]

labelIds (array, opcional)

O que é: Array com IDs de labels a serem aplicados ao card.

Exemplo: ["5f9a8b7c6d5e4f3g", "6a1b2c3d4e5f6g7h"]

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim createCard, moveCard, getBoard, createList, addComment
apiKey string Sim API Key do Trello
apiToken string Sim Token de autenticação
listId string Sim* ID da lista (para createCard)
cardName string Sim* Título do card (para createCard)
description string Não Descrição do card
dueDate string Não Data de vencimento (ISO 8601)
memberIds array Não IDs dos membros a atribuir
labelIds array Não IDs das labels a aplicar
cardId string Sim* ID do card (para moveCard, addComment)
newListId string Sim* ID da nova lista (para moveCard)
boardId string Sim* ID do board (para getBoard, createList)
listName string Sim* Nome da lista (para createList)
comment string Sim* Texto do comentário (para addComment)

*Obrigatório dependendo da operação

Exemplo 1: Sistema de Tickets de Suporte

Objetivo: Criar card no Trello para cada ticket de suporte aberto via WhatsApp.

JSON para Importar

{
  "name": "Sistema de Tickets - Trello",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Boas-vindas",
        "parameters": {
          "message": "🎫 Abertura de Ticket de Suporte\n\nDescreva seu problema:"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Problema",
        "parameters": {
          "message": "Descreva o problema:",
          "variable": "problema"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Email",
        "parameters": {
          "message": "Qual seu email para contato?",
          "variable": "email"
        }
      }
    },
    {
      "id": "trello_1",
      "type": "trello",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Criar Ticket",
        "parameters": {
          "operation": "createCard",
          "listId": "5f9a8b7c6d5e4f3g2h1j",
          "cardName": "Ticket: {{problema}}",
          "description": "**Cliente:** {{contact_name}}\n**Email:** {{email}}\n**WhatsApp:** {{contact_phone}}\n**Data:** {{timestamp}}\n\n**Problema:**\n{{problema}}",
          "labelIds": ["urgente_label_id"],
          "apiKey": "{{trello_api_key}}",
          "apiToken": "{{trello_api_token}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "✅ Ticket criado com sucesso!\n\n🎫 Número: {{trello_1.cardId}}\n\nNossa equipe entrará em contato em breve.\n\n📎 Acompanhe: {{trello_1.url}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "input_2" },
    { "source": "input_2", "target": "trello_1" },
    { "source": "trello_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 🎫 Abertura de Ticket de Suporte

Descreva seu problema:
Sistema: Descreva o problema:
Usuário: Não consigo acessar minha conta
Sistema: Qual seu email para contato?
Usuário: cliente@email.com
Sistema: ✅ Ticket criado com sucesso!

🎫 Número: 5f9a8b7c6d5e4f3g2h1j

Nossa equipe entrará em contato em breve.

📎 Acompanhe: https://trello.com/c/abc123

Exemplo 2: Mover Card Entre Listas

Objetivo: Atualizar status de pedido movendo card no Trello.

JSON para Importar

{
  "name": "Atualizar Status Pedido - Trello",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "ID do Card",
        "parameters": {
          "message": "Digite o ID do pedido:",
          "variable": "card_id"
        }
      }
    },
    {
      "id": "trello_1",
      "type": "trello",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mover para Em Produção",
        "parameters": {
          "operation": "moveCard",
          "cardId": "{{card_id}}",
          "newListId": "lista_em_producao_id",
          "apiKey": "{{trello_api_key}}",
          "apiToken": "{{trello_api_token}}"
        }
      }
    },
    {
      "id": "trello_2",
      "type": "trello",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Adicionar Comentário",
        "parameters": {
          "operation": "addComment",
          "cardId": "{{card_id}}",
          "comment": "Status atualizado para: EM PRODUÇÃO\nData: {{timestamp}}\nOperador: Sistema automático",
          "apiKey": "{{trello_api_key}}",
          "apiToken": "{{trello_api_token}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Status do pedido {{card_id}} atualizado!\n\n📊 Novo status: EM PRODUÇÃO"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "trello_1" },
    { "source": "trello_1", "target": "trello_2" },
    { "source": "trello_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite o ID do pedido:
Usuário: 5f9a8b7c6d5e4f3g
Sistema: ✅ Status do pedido 5f9a8b7c6d5e4f3g atualizado!

📊 Novo status: EM PRODUÇÃO

Exemplo 3: Criar Lista Dinâmica

Objetivo: Criar nova lista no board para organizar por período.

JSON para Importar

{
  "name": "Criar Lista Mensal - Trello",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Definir Mês",
        "parameters": {
          "variable": "mes_atual",
          "value": "Janeiro 2025"
        }
      }
    },
    {
      "id": "trello_1",
      "type": "trello",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Criar Lista",
        "parameters": {
          "operation": "createList",
          "boardId": "board_principal_id",
          "listName": "📅 {{mes_atual}}",
          "apiKey": "{{trello_api_key}}",
          "apiToken": "{{trello_api_token}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Lista criada: {{mes_atual}}\n\nID: {{trello_1.listId}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "trello_1" },
    { "source": "trello_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ✅ Lista criada: Janeiro 2025

ID: 6a1b2c3d4e5f6g7h

Resposta do Node

Operação CREATE_CARD:

{
  "success": true,
  "cardId": "5f9a8b7c6d5e4f3g2h1j",
  "url": "https://trello.com/c/abc123"
}

Operação MOVE_CARD:

{
  "success": true,
  "cardId": "5f9a8b7c6d5e4f3g2h1j"
}

Operação CREATE_LIST:

{
  "success": true,
  "listId": "6a1b2c3d4e5f6g7h"
}

Operação ADD_COMMENT:

{
  "success": true,
  "commentId": "7b2c3d4e5f6g7h8i"
}

Boas Práticas

SIM: - Use descrições detalhadas nos cards - Adicione labels para categorização - Atribua membros responsáveis - Use datas de vencimento para controle - Adicione comentários para rastreabilidade

NÃO: - Não crie cards duplicados (valide antes) - Não exponha API Key e Token em logs - Não abuse da API (respeite rate limits) - Não esqueça de tratar erros

Dicas

💡 Automação completa: Combine com GOOGLE SHEETS para registrar + criar card

💡 Webhooks: Configure webhooks no Trello para receber atualizações em tempo real

💡 Templates: Crie card template e clone para manter padrão

💡 Power-Ups: Use Power-Ups do Trello para funcionalidades extras (tempo, campos customizados)

💡 Checklists: Adicione checklists via API para tarefas complexas

Próximo Node

NOTION - Gerenciamento de conhecimento → GOOGLE SHEETS - Planilhas integradas → ASANA - Outra ferramenta de gestão de projetos