Pular para conteúdo

AIRTABLE DELETE - Deletar Registro do Airtable

O que é este Node?

O AIRTABLE DELETE é o node responsável por remover permanentemente um registro do Airtable usando seu ID único.

Por que este Node existe?

Deletar registros é necessário para manter bases de dados limpas e remover informações obsoletas ou incorretas. O AIRTABLE DELETE existe para:

  1. Limpeza de Dados: Remover registros duplicados ou incorretos
  2. Cancelamento: Deletar pedidos/agendamentos cancelados
  3. GDPR/LGPD: Remover dados de usuários que solicitaram exclusão
  4. Gestão de Ciclo de Vida: Eliminar registros temporários ou expirados

Como funciona internamente?

Quando o AIRTABLE DELETE é executado, o sistema:

  1. Coleta Credenciais: Obtém o API Key, Base ID e nome da tabela
  2. Obtém Record ID: Pega o ID do registro a ser deletado
  3. Monta URL da API: Constrói https://api.airtable.com/v0/{baseId}/{tableName}/{recordId}
  4. Faz Requisição DELETE: Remove o registro permanentemente
  5. Se falha: Lança erro 404 (registro não existe)
  6. Se sucesso: Armazena confirmação com o recordId deletado
  7. Continua Execução: Passa para o próximo node

Código interno (airtable.executor.ts:48-53):

case 'delete': {
  const recordId = this.replaceVariables(node.data.recordId, context.variables);
  await axios.delete(`${baseUrl}/${recordId}`, { headers });
  result = { success: true, recordId };
  break;
}

Quando você DEVE usar este Node?

Use AIRTABLE DELETE sempre que precisar de remover registro permanentemente:

Casos de uso

  1. Cancelamento de Pedido: "Quando usuário cancelar dentro do prazo, deletar pedido"
  2. Limpeza de Testes: "Remover registros de teste criados durante validação"
  3. Solicitação de Exclusão: "Cliente pediu para remover seus dados (LGPD)"
  4. Remoção de Duplicatas: "Após identificar duplicata, deletar registro repetido"
  5. Expiração: "Deletar agendamentos passados automaticamente"

Quando NÃO usar AIRTABLE DELETE

  • Histórico Importante: Use UPDATE com campo "Status: Inativo" ao invés de deletar
  • Auditoria Necessária: Mantenha registro e marque como "Deletado" ao invés de remover
  • Dados Vinculados: Verifique se há dependências antes de deletar

Parâmetros Detalhados

config.apiKey (string, obrigatório)

O que é: Token de autenticação da API do Airtable.

Padrão: Não há padrão (obrigatório)

Flow completo para testar:

{
  "name": "Teste Airtable Delete - API Key",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "airtable_1",
      "type": "airtable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Deletar Registro",
        "operation": "delete",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Leads"
        },
        "recordId": "recTESTE123",
        "responseVariable": "resultadoDelete"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Registro deletado: {{resultadoDelete.recordId}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "airtable_1" },
    { "source": "airtable_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Inicie o fluxo. O sistema deletará o registro e confirmará.

config.baseId (string, obrigatório)

O que é: Identificador da base do Airtable.

Padrão: Não há padrão (obrigatório)

config.tableName (string, obrigatório)

O que é: Nome exato da tabela no Airtable.

Padrão: Não há padrão (obrigatório)

recordId (string, obrigatório)

O que é: ID único do registro a ser deletado. Aceita variáveis dinâmicas.

Padrão: Não há padrão (obrigatório)

Flow completo para testar:

{
  "name": "Teste Airtable Delete - Record ID Dinâmico",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Solicitar ID",
        "parameters": {
          "message": "Digite o ID do registro para deletar:",
          "variable": "idParaDeletar"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Confirmar Ação",
        "parameters": {
          "message": "⚠️ ATENÇÃO: Esta ação não pode ser desfeita!\n\nDeseja realmente deletar o registro {{idParaDeletar}}?\n\nDigite SIM para confirmar:"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "",
          "variable": "confirmacao"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Verificar Confirmação",
        "parameters": {
          "condition": "{{confirmacao}} == 'SIM'"
        }
      }
    },
    {
      "id": "airtable_1",
      "type": "airtable",
      "position": { "x": 850, "y": 50 },
      "data": {
        "label": "Executar Delete",
        "operation": "delete",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Pedidos"
        },
        "recordId": "{{idParaDeletar}}",
        "responseVariable": "deletado"
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1000, "y": 50 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "✅ Registro {{idParaDeletar}} deletado com sucesso!"
        }
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 850, "y": 150 },
      "data": {
        "label": "Cancelado",
        "parameters": {
          "message": "❌ Operação cancelada. Nenhum registro foi deletado."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1150, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "input_2" },
    { "source": "input_2", "target": "condition_1" },
    { "source": "condition_1", "target": "airtable_1", "label": "true" },
    { "source": "condition_1", "target": "message_3", "label": "false" },
    { "source": "airtable_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" },
    { "source": "message_3", "target": "end_1" }
  ]
}

Teste: Digite um ID e confirme com "SIM". O sistema deletará o registro.

responseVariable (string, opcional)

O que é: Nome da variável onde o resultado da deleção será armazenado.

Padrão: "airtableResult"

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "delete"
config.apiKey string Sim Token de autenticação do Airtable
config.baseId string Sim ID da base do Airtable
config.tableName string Sim Nome da tabela
recordId string Sim ID do registro a deletar (aceita variáveis)
responseVariable string Não Nome da variável de resposta (padrão: "airtableResult")

Exemplo 1: Cancelamento de Pedido com Confirmação

Objetivo: Permitir que cliente cancele pedido dentro do prazo

JSON para Importar

{
  "name": "Cancelamento de Pedido",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Menu",
        "parameters": {
          "message": "Central de Cancelamentos\n\nDigite o ID do seu pedido:"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "ID Pedido",
        "parameters": {
          "message": "",
          "variable": "idPedido"
        }
      }
    },
    {
      "id": "airtable_1",
      "type": "airtable",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Buscar Pedido",
        "operation": "get",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Pedidos"
        },
        "recordId": "{{idPedido}}",
        "responseVariable": "pedido"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Verificar Prazo",
        "parameters": {
          "condition": "{{pedido.fields.Status}} == 'Aguardando Pagamento'"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 850, "y": 50 },
      "data": {
        "label": "Confirmar Cancelamento",
        "parameters": {
          "message": "Pedido #{{idPedido}}\nProduto: {{pedido.fields.Produto}}\nValor: R$ {{pedido.fields.Valor}}\n\nDeseja cancelar? (SIM/NÃO)"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 1000, "y": 50 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "",
          "variable": "confirmar"
        }
      }
    },
    {
      "id": "condition_2",
      "type": "condition",
      "position": { "x": 1150, "y": 50 },
      "data": {
        "label": "Verificar Confirmação",
        "parameters": {
          "condition": "{{confirmar}} == 'SIM'"
        }
      }
    },
    {
      "id": "airtable_2",
      "type": "airtable",
      "position": { "x": 1300, "y": 20 },
      "data": {
        "label": "Deletar Pedido",
        "operation": "delete",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Pedidos"
        },
        "recordId": "{{idPedido}}",
        "responseVariable": "cancelado"
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 1450, "y": 20 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "✅ Pedido #{{idPedido}} cancelado com sucesso!\n\nReembolso será processado em até 5 dias úteis."
        }
      }
    },
    {
      "id": "message_4",
      "type": "message",
      "position": { "x": 1300, "y": 80 },
      "data": {
        "label": "Não Confirmado",
        "parameters": {
          "message": "Cancelamento não confirmado. Pedido mantido."
        }
      }
    },
    {
      "id": "message_5",
      "type": "message",
      "position": { "x": 850, "y": 150 },
      "data": {
        "label": "Fora do Prazo",
        "parameters": {
          "message": "❌ Pedido já foi processado (Status: {{pedido.fields.Status}}).\n\nNão é possível cancelar. Entre em contato com suporte."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1600, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "airtable_1" },
    { "source": "airtable_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_2", "label": "true" },
    { "source": "condition_1", "target": "message_5", "label": "false" },
    { "source": "message_2", "target": "input_2" },
    { "source": "input_2", "target": "condition_2" },
    { "source": "condition_2", "target": "airtable_2", "label": "true" },
    { "source": "condition_2", "target": "message_4", "label": "false" },
    { "source": "airtable_2", "target": "message_3" },
    { "source": "message_3", "target": "end_1" },
    { "source": "message_4", "target": "end_1" },
    { "source": "message_5", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Central de Cancelamentos

Digite o ID do seu pedido:
Usuário: recPEDIDO123
Sistema: Pedido #recPEDIDO123
Produto: Curso de React
Valor: R$ 997

Deseja cancelar? (SIM/NÃO)
Usuário: SIM
Sistema: ✅ Pedido #recPEDIDO123 cancelado com sucesso!

Reembolso será processado em até 5 dias úteis.

Exemplo 2: Limpeza de Registros de Teste

Objetivo: Deletar registros criados durante testes

JSON para Importar

{
  "name": "Limpeza de Registros de Teste",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "airtable_1",
      "type": "airtable",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Buscar Registros Teste",
        "operation": "search",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Leads"
        },
        "filterFormula": "{Origem} = 'Teste'",
        "maxRecords": 10,
        "responseVariable": "registrosTeste"
      }
    },
    {
      "id": "loop_1",
      "type": "loop",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Para Cada Registro",
        "parameters": {
          "items": "{{registrosTeste.records}}",
          "itemVariable": "registro"
        }
      }
    },
    {
      "id": "airtable_2",
      "type": "airtable",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Deletar Registro",
        "operation": "delete",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Leads"
        },
        "recordId": "{{registro.id}}",
        "responseVariable": "deletado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Relatório",
        "parameters": {
          "message": "✅ Limpeza concluída!\n\nRegistros deletados: {{registrosTeste.records.length}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 850, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "airtable_1" },
    { "source": "airtable_1", "target": "loop_1" },
    { "source": "loop_1", "target": "airtable_2" },
    { "source": "airtable_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ✅ Limpeza concluída!

Registros deletados: 5

Exemplo 3: Solicitação de Exclusão (LGPD)

Objetivo: Cliente solicita exclusão de seus dados conforme LGPD

JSON para Importar

{
  "name": "Solicitação de Exclusão LGPD",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 250, "y": 100 },
      "data": {
        "label": "Aviso LGPD",
        "parameters": {
          "message": "Solicitação de Exclusão de Dados (LGPD)\n\n⚠️ Esta ação é irreversível e deletará permanentemente:\n- Seus dados cadastrais\n- Histórico de compras\n- Todas as interações\n\nPara confirmar, digite seu EMAIL:"
        }
      }
    },
    {
      "id": "input_1",
      "type": "email",
      "position": { "x": 400, "y": 100 },
      "data": {
        "label": "Email",
        "parameters": {
          "message": "",
          "variable": "emailConfirmacao"
        }
      }
    },
    {
      "id": "airtable_1",
      "type": "airtable",
      "position": { "x": 550, "y": 100 },
      "data": {
        "label": "Buscar por Email",
        "operation": "search",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Clientes"
        },
        "filterFormula": "{Email} = '{{emailConfirmacao}}'",
        "maxRecords": 1,
        "responseVariable": "cliente"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Cliente Encontrado?",
        "parameters": {
          "condition": "{{cliente.records.length}} > 0"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 850, "y": 50 },
      "data": {
        "label": "Última Confirmação",
        "parameters": {
          "message": "Cliente encontrado: {{cliente.records[0].fields.Nome}}\n\nDigite CONFIRMAR para prosseguir com a exclusão:"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 1000, "y": 50 },
      "data": {
        "label": "Confirmação Final",
        "parameters": {
          "message": "",
          "variable": "confirmacaoFinal"
        }
      }
    },
    {
      "id": "condition_2",
      "type": "condition",
      "position": { "x": 1150, "y": 50 },
      "data": {
        "label": "Verificar",
        "parameters": {
          "condition": "{{confirmacaoFinal}} == 'CONFIRMAR'"
        }
      }
    },
    {
      "id": "airtable_2",
      "type": "airtable",
      "position": { "x": 1300, "y": 20 },
      "data": {
        "label": "Deletar Cliente",
        "operation": "delete",
        "config": {
          "apiKey": "patABC123456789xyz",
          "baseId": "appXYZ123456",
          "tableName": "Clientes"
        },
        "recordId": "{{cliente.records[0].id}}",
        "responseVariable": "clienteDeletado"
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 1450, "y": 20 },
      "data": {
        "label": "Confirmação Exclusão",
        "parameters": {
          "message": "✅ Seus dados foram excluídos com sucesso.\n\nConforme LGPG, todas as informações foram permanentemente removidas.\n\nSentiremos sua falta!"
        }
      }
    },
    {
      "id": "message_4",
      "type": "message",
      "position": { "x": 1300, "y": 80 },
      "data": {
        "label": "Não Confirmado",
        "parameters": {
          "message": "Exclusão cancelada. Seus dados foram mantidos."
        }
      }
    },
    {
      "id": "message_5",
      "type": "message",
      "position": { "x": 850, "y": 150 },
      "data": {
        "label": "Não Encontrado",
        "parameters": {
          "message": "❌ Email não encontrado em nossa base de dados."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1600, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "airtable_1" },
    { "source": "airtable_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_2", "label": "true" },
    { "source": "condition_1", "target": "message_5", "label": "false" },
    { "source": "message_2", "target": "input_2" },
    { "source": "input_2", "target": "condition_2" },
    { "source": "condition_2", "target": "airtable_2", "label": "true" },
    { "source": "condition_2", "target": "message_4", "label": "false" },
    { "source": "airtable_2", "target": "message_3" },
    { "source": "message_3", "target": "end_1" },
    { "source": "message_4", "target": "end_1" },
    { "source": "message_5", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Solicitação de Exclusão de Dados (LGPD)

⚠️ Esta ação é irreversível...
Para confirmar, digite seu EMAIL:
Usuário: jose@exemplo.com
Sistema: Cliente encontrado: José Roberto

Digite CONFIRMAR para prosseguir com a exclusão:
Usuário: CONFIRMAR
Sistema: ✅ Seus dados foram excluídos com sucesso.

Conforme LGPD, todas as informações foram permanentemente removidas.

Sentiremos sua falta!

Resposta do Node

{
  "success": true,
  "recordId": "recABC123XYZ456"
}

Boas Práticas

SIM:

  • SEMPRE peça confirmação antes de deletar
  • Use GET antes para verificar se registro existe
  • Implemente dupla confirmação para ações críticas
  • Considere soft delete (campo "Ativo: false") ao invés de delete permanente
  • Documente motivo da exclusão em logs

NÃO:

  • NUNCA delete sem confirmação do usuário
  • Não delete registros com dados vinculados sem verificar dependências
  • Não delete sem backup ou log de auditoria
  • Não exponha IDs sensíveis em mensagens de erro

Dicas

💡 Dica 1: Para manter histórico, use UPDATE com campo "Status: Deletado" ao invés de DELETE

💡 Dica 2: Implemente fluxo de confirmação dupla para operações irreversíveis

💡 Dica 3: Combine SEARCH + LOOP + DELETE para deletar múltiplos registros com filtro

💡 Dica 4: Para LGPD, considere criar tabela de auditoria antes de deletar

💡 Dica 5: DELETE é irreversível - não há "undo" na API do Airtable

Próximo Node

AIRTABLE GET - Buscar registro antes de deletar → AIRTABLE SEARCH - Buscar registros para deletar em lote → AIRTABLE UPDATE - Alternativa: marcar como inativo ao invés de deletar