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:
- Limpeza de Dados: Remover registros duplicados ou incorretos
- Cancelamento: Deletar pedidos/agendamentos cancelados
- GDPR/LGPD: Remover dados de usuários que solicitaram exclusão
- Gestão de Ciclo de Vida: Eliminar registros temporários ou expirados
Como funciona internamente?
Quando o AIRTABLE DELETE é executado, o sistema:
- Coleta Credenciais: Obtém o API Key, Base ID e nome da tabela
- Obtém Record ID: Pega o ID do registro a ser deletado
- Monta URL da API: Constrói
https://api.airtable.com/v0/{baseId}/{tableName}/{recordId} - Faz Requisição DELETE: Remove o registro permanentemente
- Se falha: Lança erro 404 (registro não existe)
- Se sucesso: Armazena confirmação com o recordId deletado
- 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
- Cancelamento de Pedido: "Quando usuário cancelar dentro do prazo, deletar pedido"
- Limpeza de Testes: "Remover registros de teste criados durante validação"
- Solicitação de Exclusão: "Cliente pediu para remover seus dados (LGPD)"
- Remoção de Duplicatas: "Após identificar duplicata, deletar registro repetido"
- 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