AIRTABLE BATCH UPDATE - Atualizar Múltiplos Registros no Airtable
O que é este Node?
O AIRTABLE BATCH UPDATE é o node responsável por atualizar múltiplos registros de uma só vez no Airtable de forma eficiente.
Por que este Node existe?
Atualizar múltiplos registros individualmente é lento e ineficiente. O AIRTABLE BATCH UPDATE existe para:
- Performance: Atualizar vários registros em uma única requisição API
- Atualização em Massa: Modificar status de múltiplos registros simultaneamente
- Eficiência: Reduzir número de chamadas à API do Airtable
- Sincronização em Lote: Atualizar múltiplos registros após processamento
Como funciona internamente?
Quando o AIRTABLE BATCH UPDATE é executado, o sistema:
- Coleta Credenciais: Obtém API Key, Base ID e nome da tabela
- Prepara Array: Processa array de registros com IDs e campos
- Valida IDs: Cada registro deve ter
idefields - Faz Requisição PATCH: Envia todos os registros em batch
- Se falha: Lança erro (ID inválido ou dados incorretos)
- Se sucesso: Armazena array com todos os registros atualizados
- Continua Execução: Passa para próximo node com resultados
Código interno (airtable.executor.ts:79-84):
case 'batchUpdate': {
const records = JSON.parse(this.replaceVariables(JSON.stringify(node.data.records), context.variables));
const response = await axios.patch(baseUrl, { records }, { headers });
result = response.data;
break;
}
Quando você DEVE usar este Node?
Use AIRTABLE BATCH UPDATE sempre que precisar de atualizar múltiplos registros:
Casos de uso
- Atualização em Massa: "Marcar múltiplos tickets como resolvidos"
- Sincronização: "Atualizar status de vários pedidos após processamento"
- Processamento em Lote: "Atualizar múltiplos leads após campanha"
- Mudança de Estado: "Alterar categoria de vários produtos simultaneamente"
Quando NÃO usar AIRTABLE BATCH UPDATE
- Um único registro: Use
AIRTABLE UPDATEao invés - Mais de 10 registros: API do Airtable limita a 10 por requisição
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "batchUpdate" |
| 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 |
| records | array | Sim | Array de objetos com id e fields (máx 10) |
| responseVariable | string | Não | Nome da variável de resposta (padrão: "airtableResult") |
Exemplo 1: Marcar Tickets como Resolvidos
Objetivo: Atualizar status de múltiplos tickets de uma vez
JSON para Importar
{
"name": "Resolver Tickets em Lote",
"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 Tickets Pendentes",
"operation": "search",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Tickets"
},
"filterFormula": "{Status} = 'Pendente'",
"maxRecords": 10,
"responseVariable": "ticketsPendentes"
}
},
{
"id": "formatter_1",
"type": "formatter",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Preparar Updates",
"parameters": {
"template": "{{#each ticketsPendentes.records}}{\"id\": \"{{this.id}}\", \"fields\": {\"Status\": \"Resolvido\", \"DataResolucao\": \"{{hoje}}\"}}{{#unless @last}},{{/unless}}{{/each}}",
"resultVariable": "recordsParaAtualizar"
}
}
},
{
"id": "airtable_2",
"type": "airtable",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Atualizar em Lote",
"operation": "batchUpdate",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Tickets"
},
"records": "{{recordsParaAtualizar}}",
"responseVariable": "ticketsAtualizados"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ {{ticketsAtualizados.records.length}} tickets marcados como resolvidos!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 850, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "airtable_1" },
{ "source": "airtable_1", "target": "formatter_1" },
{ "source": "formatter_1", "target": "airtable_2" },
{ "source": "airtable_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: ✅ 5 tickets marcados como resolvidos!
Exemplo 2: Atualizar Múltiplos Leads
Objetivo: Atualizar categoria de vários leads após campanha
JSON para Importar
{
"name": "Atualizar Leads Campanha",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 250, "y": 100 },
"data": {
"label": "Definir IDs",
"parameters": {
"name": "idsLeads",
"value": "[\"recLEAD001\", \"recLEAD002\", \"recLEAD003\"]"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Atualizar Leads",
"operation": "batchUpdate",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Leads"
},
"records": [
{
"id": "recLEAD001",
"fields": {
"Campanha": "Black Friday 2025",
"Status": "Contatado",
"UltimaInteracao": "{{hoje}}"
}
},
{
"id": "recLEAD002",
"fields": {
"Campanha": "Black Friday 2025",
"Status": "Contatado",
"UltimaInteracao": "{{hoje}}"
}
},
{
"id": "recLEAD003",
"fields": {
"Campanha": "Black Friday 2025",
"Status": "Contatado",
"UltimaInteracao": "{{hoje}}"
}
}
],
"responseVariable": "leadsAtualizados"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Leads atualizados para campanha Black Friday!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "airtable_1" },
{ "source": "airtable_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Leads atualizados para campanha Black Friday!
Resposta do Node
{
"records": [
{
"id": "recABC123",
"createdTime": "2025-01-14T10:00:00.000Z",
"fields": {
"Nome": "João Silva",
"Status": "Resolvido",
"DataResolucao": "2025-01-15"
}
},
{
"id": "recDEF456",
"createdTime": "2025-01-14T11:00:00.000Z",
"fields": {
"Nome": "Maria Santos",
"Status": "Resolvido",
"DataResolucao": "2025-01-15"
}
}
]
}
Boas Práticas
✅ SIM:
- Limite a 10 registros por batch (limite da API Airtable)
- Cada registro deve ter
id(obrigatório) efields(campos a atualizar) - Use SEARCH antes para obter IDs dos registros a atualizar
- Combine com LOOP para processar resultados de busca
❌ NÃO:
- Não tente atualizar mais de 10 registros por vez
- Não use BATCH UPDATE para 1 registro (use UPDATE normal)
- Não esqueça o campo
idem cada registro - Não envie campos que não precisa atualizar
Dicas
💡 Dica 1: Formato do array: [{id: "recXXX", fields: {campo: valor}}]
💡 Dica 2: API do Airtable limita a 10 registros - para mais, use LOOP
💡 Dica 3: Apenas campos em fields são atualizados - outros permanecem inalterados
💡 Dica 4: Combine SEARCH + FORMATTER + BATCH UPDATE para atualização em massa eficiente
💡 Dica 5: Operação é atômica - todos são atualizados ou nenhum
Próximo Node
→ AIRTABLE UPDATE - Atualizar registro único → AIRTABLE BATCH CREATE - Criar múltiplos registros → AIRTABLE SEARCH - Buscar registros para atualizar → LOOP - Processar array antes de atualizar