Pular para conteúdo

TRELLO_UPDATE_CARD - Atualizar Card no Trello

O que é este Node?

O TRELLO_UPDATE_CARD é o node responsável por atualizar informações de cards existentes no Trello, permitindo modificar nome, descrição, data de vencimento, membros e etiquetas sem precisar criar um novo card.

Por que este Node existe?

Cards no Trello passam por mudanças constantes: prioridades mudam, informações são atualizadas, membros são reatribuídos. Fazer essas alterações manualmente é improdutivo. O TRELLO_UPDATE_CARD existe para:

  1. Atualizar Status: Modificar descrição com novos updates do cliente ou progresso
  2. Reatribuir Tarefas: Trocar membros responsáveis baseado em disponibilidade ou especialidade
  3. Ajustar Prioridades: Adicionar/remover labels conforme urgência muda
  4. Estender Prazos: Modificar datas de vencimento quando necessário

Como funciona internamente?

Quando o TRELLO_UPDATE_CARD é executado, o sistema:

  1. Valida Credenciais: Verifica API Key e Token do Trello
  2. Valida Card ID: Confirma que o card existe
  3. Prepara Alterações: Organiza apenas os campos que serão modificados
  4. Faz Requisição: PUT para https://api.trello.com/1/cards/{cardId} com novos dados
  5. Se erro: Retorna mensagem (card não existe, sem permissão, etc.)
  6. Se sucesso: Retorna confirmação da atualização

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

// NOTA: Esta operação ainda não está implementada no código atual
// Implementação sugerida baseada no padrão Trello API:
case 'updateCard':
  const updateCardResponse = await firstValueFrom(
    this.httpService.put(`${trelloApiUrl}/cards/${data.cardId}${auth}`,
      {
        name: data.cardName,
        desc: data.description,
        due: data.dueDate,
        idMembers: data.memberIds,
        idLabels: data.labelIds,
      }
    )
  );
  return {
    success: true,
    cardId: updateCardResponse.data.id,
    updated: true,
  };

Quando você DEVE usar este Node?

Use TRELLO_UPDATE_CARD sempre que precisar de modificação de cards existentes:

Casos de uso

  1. Atualização de Progresso: Cliente fornece nova informação → Atualiza descrição do card de suporte
  2. Mudança de Prioridade: Gestor define task como urgente → Adiciona label "Urgente" ao card
  3. Reatribuição: Desenvolvedor sai de férias → Reatribui cards para outro membro da equipe
  4. Extensão de Prazo: Cliente solicita mais tempo → Atualiza data de vencimento do card

Quando NÃO usar TRELLO_UPDATE_CARD

  • Criar Novo Card: Use TRELLO_CREATE_CARD ao invés
  • Mover Entre Listas: Use TRELLO_MOVE_CARD ao invés (é específico para mudança de lista)
  • Adicionar Comentário: Use TRELLO_ADD_COMMENT ao invés (comentários são separados)

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 Update - 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)

Flow completo para testar:

{
  "name": "Teste Trello Update - Token",
  "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 Token",
        "parameters": {
          "message": "Digite seu Token do Trello:",
          "variableName": "trello_token"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Token configurado!"
        }
      }
    },
    {
      "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 seu Token. O sistema confirmará.

cardId (string, obrigatório)

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

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 Update - 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 atualizar:",
          "variableName": "card_id"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Card {{card_id}} será atualizado"
        }
      }
    },
    {
      "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á.

cardName (string, opcional)

O que é: Novo nome/título do card.

Padrão: Mantém o nome atual se não fornecido

Flow completo para testar:

{
  "name": "Teste Trello Update - Nome",
  "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": "Novo Nome",
        "parameters": {
          "message": "Digite o novo nome do card:",
          "variableName": "novo_nome"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Card será renomeado para: {{novo_nome}}"
        }
      }
    },
    {
      "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 "Bug CRÍTICO - Login falha". O sistema confirmará o novo nome.

description (string, opcional)

O que é: Nova descrição do card (suporta Markdown).

Padrão: Mantém descrição atual se não fornecido

Flow completo para testar:

{
  "name": "Teste Trello Update - Descrição",
  "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": "Nova Descrição",
        "parameters": {
          "message": "Digite a nova descrição:",
          "variableName": "nova_descricao"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Descrição atualizada!"
        }
      }
    },
    {
      "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 nova descrição. O sistema confirmará a atualização.

dueDate (string, opcional)

O que é: Nova data de vencimento (ISO 8601).

Padrão: Mantém data atual ou null se não fornecido

Flow completo para testar:

{
  "name": "Teste Trello Update - Data",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "date_1",
      "type": "date",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Nova Data",
        "parameters": {
          "message": "Digite a nova data de vencimento:",
          "variableName": "nova_data",
          "format": "DD/MM/YYYY"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Novo prazo: {{nova_data}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "date_1" },
    { "source": "date_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite "28/02/2025". O sistema confirmará o novo prazo.

memberIds (array, opcional)

O que é: Novos IDs dos membros (substitui os atuais).

Padrão: Mantém membros atuais se não fornecido

labelIds (array, opcional)

O que é: Novos IDs das labels (substitui as atuais).

Padrão: Mantém labels atuais se não fornecido

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Sempre "updateCard"
apiKey string Sim API Key do Trello
apiToken string Sim Token de autenticação
cardId string Sim ID do card a atualizar
cardName string Não Novo nome do card
description string Não Nova descrição
dueDate string Não Nova data de vencimento
memberIds array Não Novos membros
labelIds array Não Novas labels

Exemplo 1: Atualizar Prioridade de Suporte

Objetivo: Quando cliente informa que problema é crítico, atualizar card com label urgente

JSON para Importar

{
  "name": "Atualizar Prioridade - 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": "Perguntar",
        "parameters": {
          "message": "Qual é o nível de urgência?\n\n1 - Baixa\n2 - Média\n3 - Alta\n4 - CRÍTICA"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Nível",
        "parameters": {
          "message": "Digite o número:",
          "variableName": "urgencia",
          "min": 1,
          "max": 4
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "É Crítico?",
        "parameters": {
          "condition": "{{urgencia}} >= 4"
        }
      }
    },
    {
      "id": "trello_1",
      "type": "trello_update_card",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Marcar Urgente",
        "parameters": {
          "operation": "updateCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{ticket_card_id}}",
          "cardName": "URGENTE - {{card_original_name}}",
          "labelIds": ["id_label_critico"]
        }
      }
    },
    {
      "id": "trello_2",
      "type": "trello_update_card",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Manter Normal",
        "parameters": {
          "operation": "updateCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{ticket_card_id}}",
          "labelIds": ["id_label_normal"]
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Ticket atualizado com prioridade!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "number_1" },
    { "source": "number_1", "target": "condition_1" },
    { "source": "condition_1", "target": "trello_1", "label": "true" },
    { "source": "condition_1", "target": "trello_2", "label": "false" },
    { "source": "trello_1", "target": "message_2" },
    { "source": "trello_2", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Qual é o nível de urgência?

1 - Baixa
2 - Média
3 - Alta
4 - CRÍTICA
Sistema: Digite o número:
Usuário: 4
Sistema: ✅ Ticket atualizado com prioridade!

Exemplo 2: Estender Prazo de Tarefa

Objetivo: Cliente solicita extensão de prazo - atualizar data de vencimento

JSON para Importar

{
  "name": "Estender Prazo - 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": "Solicitar",
        "parameters": {
          "message": "Solicitar extensão de prazo.\n\nQual a nova data desejada?"
        }
      }
    },
    {
      "id": "date_1",
      "type": "date",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Nova Data",
        "parameters": {
          "message": "Digite a nova data (DD/MM/YYYY):",
          "variableName": "novo_prazo",
          "format": "DD/MM/YYYY"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Justificativa",
        "parameters": {
          "message": "Motivo da extensão:",
          "variableName": "motivo"
        }
      }
    },
    {
      "id": "trello_1",
      "type": "trello_update_card",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Atualizar Prazo",
        "parameters": {
          "operation": "updateCard",
          "apiKey": "sua_api_key",
          "apiToken": "seu_token",
          "cardId": "{{task_card_id}}",
          "dueDate": "{{novo_prazo}}",
          "description": "{{descricao_original}}\n\n---\n**Prazo estendido**\n**Nova data:** {{novo_prazo}}\n**Motivo:** {{motivo}}\n**Solicitado por:** {{contact_name}}\n**Data solicitação:** {{timestamp}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Prazo estendido!\n\n📅 Nova data: {{novo_prazo}}\n\nEquipe foi notificada."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "date_1" },
    { "source": "date_1", "target": "input_1" },
    { "source": "input_1", "target": "trello_1" },
    { "source": "trello_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Solicitar extensão de prazo. Qual a nova data desejada?
Sistema: Digite a nova data (DD/MM/YYYY):
Usuário: 15/03/2025
Sistema: Motivo da extensão:
Usuário: Ajustes solicitados pelo cliente
Sistema: ✅ Prazo estendido!

📅 Nova data: 15/03/2025

Equipe foi notificada.

Resposta do Node

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

Boas Práticas

SIM:

  • Sempre inclua motivo da atualização na descrição
  • Use logs/histórico das mudanças na descrição
  • Valide se card existe antes de atualizar
  • Notifique membros sobre mudanças importantes
  • Mantenha registro de quem solicitou a atualização

NÃO:

  • Não sobrescreva informações importantes sem backup
  • Não remova membros sem notificar
  • Não altere prioridades sem justificativa
  • Não use updateCard para mover entre listas (use moveCard)

Dicas

💡 Histórico de Mudanças: Sempre adicione informações à descrição em vez de substituir - mantenha log completo das alterações

💡 Timestamps: Inclua data/hora e autor de cada atualização para rastreabilidade

💡 Notificações: Combine com envio de mensagem WhatsApp para notificar stakeholders sobre mudanças importantes

Próximo Node

TRELLO_CREATE_CARD - Criar novos cards → TRELLO_MOVE_CARD - Mover cards entre listas → TRELLO_ADD_COMMENT - Adicionar comentários