Pular para conteúdo

TRELLO_MOVE_CARD - Mover Card Entre Listas

O que é este Node?

O TRELLO_MOVE_CARD é o node responsável por mover cards entre listas diferentes no Trello, permitindo automatizar o fluxo de trabalho conforme tarefas progridem em diferentes estágios.

Por que este Node existe?

Em metodologias ágeis (Kanban, Scrum), cards se movem entre estágios constantemente: Todo → Doing → Done. Fazer isso manualmente desperdiça tempo e pode gerar esquecimentos. O TRELLO_MOVE_CARD existe para:

  1. Automatizar Fluxo Kanban: Mover automaticamente de "Em Progresso" para "Concluído" quando tarefa finaliza
  2. Gestão de Status: Atualizar estágio baseado em ações do usuário (aprovação, rejeição, etc.)
  3. Pipeline de Vendas: Mover lead entre estágios do funil (qualificado → negociação → fechado)
  4. Suporte Multi-nível: Mover ticket entre níveis (N1 → N2 → N3) conforme complexidade

Como funciona internamente?

Quando o TRELLO_MOVE_CARD é executado, o sistema:

  1. Valida Credenciais: Verifica API Key e Token do Trello
  2. Valida Card e Lista: Confirma que card existe e lista de destino é válida
  3. Prepara Movimentação: Organiza dados para mudança de lista
  4. Faz Requisição: PUT para https://api.trello.com/1/cards/{cardId} alterando idList
  5. Se erro: Retorna mensagem (card não existe, lista inválida, sem permissão)
  6. Se sucesso: Retorna confirmação da movimentação

Código interno (productivity-executors.service.ts:573-584):

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

Quando você DEVE usar este Node?

Use TRELLO_MOVE_CARD sempre que precisar de progressão automática de tarefas:

Casos de uso

  1. Kanban Automatizado: Tarefa concluída → Move de "Doing" para "Done"
  2. Aprovação de Processos: Cliente aprova orçamento → Move de "Aguardando Aprovação" para "Aprovado"
  3. Triagem de Suporte: Problema identificado → Move de "Novo" para "Em Análise" ou "Resolvido"
  4. Pipeline de Vendas: Lead qualificado → Move de "Prospecção" para "Negociação"

Quando NÃO usar TRELLO_MOVE_CARD

  • Atualizar Informações: Use TRELLO_UPDATE_CARD ao invés
  • Adicionar Comentário: Use TRELLO_ADD_COMMENT ao invés
  • Criar Novo Card: Use TRELLO_CREATE_CARD ao invés

Parâmetros Detalhados

apiKey (string, obrigatório)

O que é: Chave de API do Trello para autenticação.

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

Flow completo para testar:

{
  "name": "Teste Trello Move - API Key",
  "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": "Coletar API Key",
        "parameters": {
          "message": "Digite sua API Key do Trello:",
          "variableName": "trello_api_key"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "API Key configurada!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite sua API Key. O sistema confirmará.

apiToken (string, obrigatório)

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

Como obter: Gere em https://trello.com/app-key (seção Token)

cardId (string, obrigatório)

O que é: ID do card que será movido.

Como obter: 1. Abra o card no Trello 2. URL: https://trello.com/c/CARD_ID/nome 3. Ou pegue do retorno do TRELLO_CREATE_CARD 4. Ou use API: GET https://api.trello.com/1/lists/LIST_ID/cards

Flow completo para testar:

{
  "name": "Teste Trello Move - Card ID",
  "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": "Coletar Card ID",
        "parameters": {
          "message": "Digite o ID do card a mover:",
          "variableName": "card_id"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Card {{card_id}} será movido"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite um Card ID válido. O sistema confirmará.

newListId (string, obrigatório)

O que é: ID da lista de destino para onde o card será movido.

Como obter: 1. Abra o board no Trello 2. Use a API: GET https://api.trello.com/1/boards/BOARD_ID/lists?key=KEY&token=TOKEN 3. Encontre o ID da lista desejada

Padrão: Nenhum (obrigatório fornecer)

Flow completo para testar:

{
  "name": "Teste Trello Move - List ID",
  "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": "Coletar List ID",
        "parameters": {
          "message": "Digite o ID da lista de destino:",
          "variableName": "new_list_id"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Card será movido para lista: {{new_list_id}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite um List ID válido. O sistema confirmará o destino.

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Sempre "moveCard"
apiKey string Sim API Key do Trello
apiToken string Sim Token de autenticação
cardId string Sim ID do card a mover
newListId string Sim ID da lista de destino

Exemplo 1: Fluxo Kanban Automatizado

Objetivo: Mover card automaticamente entre estágios do Kanban conforme progresso

JSON para Importar

{
  "name": "Kanban Automatizado - 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": "Status",
        "parameters": {
          "message": "Atualizar status da tarefa:\n\n1 - Iniciar trabalho\n2 - Marcar em revisão\n3 - Concluir tarefa"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Ação",
        "parameters": {
          "message": "Digite a opção:",
          "variableName": "acao",
          "min": 1,
          "max": 3
        }
      }
    },
    {
      "id": "switch_1",
      "type": "switch",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Decidir Movimento",
        "parameters": {
          "variable": "{{acao}}",
          "cases": [
            { "value": "1", "output": "doing" },
            { "value": "2", "output": "review" },
            { "value": "3", "output": "done" }
          ]
        }
      }
    },
    {
      "id": "trello_doing",
      "type": "trello_move_card",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Mover para Doing",
        "parameters": {
          "operation": "moveCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{task_card_id}}",
          "newListId": "id_lista_doing"
        }
      }
    },
    {
      "id": "trello_review",
      "type": "trello_move_card",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Mover para Review",
        "parameters": {
          "operation": "moveCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{task_card_id}}",
          "newListId": "id_lista_review"
        }
      }
    },
    {
      "id": "trello_done",
      "type": "trello_move_card",
      "position": { "x": 900, "y": 250 },
      "data": {
        "label": "Mover para Done",
        "parameters": {
          "operation": "moveCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{task_card_id}}",
          "newListId": "id_lista_done"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 150 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Card movido com sucesso!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 150 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "number_1" },
    { "source": "number_1", "target": "switch_1" },
    { "source": "switch_1", "target": "trello_doing", "label": "doing" },
    { "source": "switch_1", "target": "trello_review", "label": "review" },
    { "source": "switch_1", "target": "trello_done", "label": "done" },
    { "source": "trello_doing", "target": "message_2" },
    { "source": "trello_review", "target": "message_2" },
    { "source": "trello_done", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Atualizar status da tarefa:

1 - Iniciar trabalho
2 - Marcar em revisão
3 - Concluir tarefa
Sistema: Digite a opção:
Usuário: 3
Sistema: ✅ Card movido com sucesso!

Exemplo 2: Pipeline de Vendas

Objetivo: Mover lead automaticamente entre estágios do funil de vendas

JSON para Importar

{
  "name": "Pipeline Vendas - 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": "Qualificar",
        "parameters": {
          "message": "Vamos qualificar este lead.\n\nTem interesse real no produto?"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Interesse",
        "parameters": {
          "message": "Digite SIM ou NÃO:",
          "variableName": "interesse"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Tem Interesse?",
        "parameters": {
          "condition": "{{interesse}}.toUpperCase() === 'SIM'"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Orçamento",
        "parameters": {
          "message": "Qual o orçamento disponível? (R$)",
          "variableName": "orcamento",
          "min": 0
        }
      }
    },
    {
      "id": "condition_2",
      "type": "condition",
      "position": { "x": 1100, "y": 50 },
      "data": {
        "label": "Orçamento OK?",
        "parameters": {
          "condition": "{{orcamento}} >= 5000"
        }
      }
    },
    {
      "id": "trello_qualificado",
      "type": "trello_move_card",
      "position": { "x": 1300, "y": 30 },
      "data": {
        "label": "Lead Qualificado",
        "parameters": {
          "operation": "moveCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{lead_card_id}}",
          "newListId": "id_lista_qualificados"
        }
      }
    },
    {
      "id": "trello_nutrir",
      "type": "trello_move_card",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Nutrir Lead",
        "parameters": {
          "operation": "moveCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{lead_card_id}}",
          "newListId": "id_lista_nutrir"
        }
      }
    },
    {
      "id": "trello_descartado",
      "type": "trello_move_card",
      "position": { "x": 900, "y": 180 },
      "data": {
        "label": "Lead Descartado",
        "parameters": {
          "operation": "moveCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{lead_card_id}}",
          "newListId": "id_lista_descartados"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Resultado",
        "parameters": {
          "message": "✅ Lead categorizado e movido!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "condition_1" },
    { "source": "condition_1", "target": "number_1", "label": "true" },
    { "source": "condition_1", "target": "trello_descartado", "label": "false" },
    { "source": "number_1", "target": "condition_2" },
    { "source": "condition_2", "target": "trello_qualificado", "label": "true" },
    { "source": "condition_2", "target": "trello_nutrir", "label": "false" },
    { "source": "trello_qualificado", "target": "message_2" },
    { "source": "trello_nutrir", "target": "message_2" },
    { "source": "trello_descartado", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Vamos qualificar este lead. Tem interesse real no produto?
Sistema: Digite SIM ou NÃO:
Usuário: SIM
Sistema: Qual o orçamento disponível? (R$)
Usuário: 10000
Sistema: ✅ Lead categorizado e movido!

Resposta do Node

{
  "success": true,
  "cardId": "507f1f77bcf86cd799439011"
}

Boas Práticas

SIM:

  • Use movimentação para refletir mudanças reais de status
  • Combine com TRELLO_ADD_COMMENT para registrar motivo da movimentação
  • Valide se card está na lista correta antes de mover
  • Notifique stakeholders sobre mudanças importantes de estágio
  • Use labels para indicar sub-status dentro da lista

NÃO:

  • Não mova cards aleatoriamente sem critério
  • Não esqueça de atualizar informações ao mover (use UPDATE_CARD junto)
  • Não mova para lista errada (valide newListId)
  • Não mova sem registrar motivo (adicione comentário)

Dicas

💡 Fluxo Bidirecional: Permita mover cards para frente E para trás (ex: Done → Review se encontrar problemas)

💡 Automação por Tempo: Use SCHEDULE para mover cards automaticamente após X dias sem atividade (ex: "Em Análise" → "Stalled")

💡 Notificações: Envie mensagem WhatsApp para responsável quando card é movido para sua lista

💡 Webhooks: Configure webhooks Trello para acionar flows quando cards são movidos manualmente no board

💡 Logs de Auditoria: Registre todas as movimentações com timestamp, autor e motivo na descrição do card

Próximo Node

TRELLO_CREATE_CARD - Criar novos cards → TRELLO_UPDATE_CARD - Atualizar cards → TRELLO_ADD_COMMENT - Adicionar comentários