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:
- Automatizar tarefas: Criar cards automaticamente a partir de conversas
- Sincronizar status: Mover cards conforme andamento de processos
- Centralizar informações: Registrar interações em cards do Trello
- Notificações automáticas: Adicionar comentários em cards via automação
- Gestão de equipe: Atribuir membros e labels automaticamente
Como funciona internamente?
Quando o TRELLO é executado, o sistema:
- Autentica usando API Key e Token do Trello
- Identifica operação (createCard, moveCard, getBoard, createList, addComment)
- Conecta à API do Trello v1
- Executa operação com os parâmetros fornecidos
- Retorna resultado com ID e URL do card/board
- 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:
- Criar card de suporte: Cada atendimento vira card automaticamente
- Mover cards por status: Atualizar kanban conforme progresso
- Adicionar comentários: Registrar interações em cards existentes
- Criar listas dinamicamente: Organizar boards por períodos/categorias
- Consultar boards: Verificar status de projetos em andamento
- Atribuir tarefas: Adicionar membros a cards automaticamente
Quando NÃO usar TRELLO:
- Armazenamento de dados: Use GOOGLE SHEETS para tabelas
- Documentação: Use NOTION para documentos estruturados
- Arquivos: Use GOOGLE DRIVE para storage
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