AIRTABLE GET - Buscar Registro por ID no Airtable
O que é este Node?
O AIRTABLE GET é o node responsável por buscar um registro específico do Airtable usando seu ID único.
Por que este Node existe?
Buscar registros específicos por ID é essencial quando você já conhece o identificador do registro e precisa obter seus dados atualizados. O AIRTABLE GET existe para:
- Consulta Rápida: Buscar dados de um registro específico conhecendo apenas seu ID
- Verificação de Status: Checar estado atual de um registro (ex: status de pedido)
- Enriquecimento de Dados: Obter informações completas de um registro para usar no fluxo
- Validação de Existência: Confirmar que um registro ainda existe antes de operações posteriores
Como funciona internamente?
Quando o AIRTABLE GET é 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 buscado
- Monta URL da API: Constrói
https://api.airtable.com/v0/{baseId}/{tableName}/{recordId} - Faz Requisição GET: Busca o registro na API do Airtable
- Se não encontrado: Lança erro 404 (registro não existe)
- Se encontrado: Armazena todos os dados do registro na variável de resposta
- Continua Execução: Passa para o próximo node com os dados disponíveis
Código interno (airtable.executor.ts:33-38):
case 'get': {
const recordId = this.replaceVariables(node.data.recordId, context.variables);
const response = await axios.get(`${baseUrl}/${recordId}`, { headers });
result = response.data;
break;
}
Quando você DEVE usar este Node?
Use AIRTABLE GET sempre que precisar de buscar registro específico por ID:
Casos de uso
- Consultar Pedido: "Buscar detalhes do pedido usando ID armazenado anteriormente"
- Verificar Status: "Checar se ticket de suporte foi resolvido pelo ID"
- Atualização Condicional: "Buscar registro, verificar valores e atualizar se necessário"
- Exibir Histórico: "Mostrar ao cliente os dados de sua última compra pelo ID"
- Validar Existência: "Verificar se registro ainda existe antes de processar"
Quando NÃO usar AIRTABLE GET
- Buscar por outros campos: Use
AIRTABLE SEARCHcom filtros ao invés - Listar vários registros: Use
AIRTABLE LISTao invés - Não sabe o ID: Use
AIRTABLE SEARCHpara encontrar primeiro
Parâmetros Detalhados
config.apiKey (string, obrigatório)
O que é: Token de autenticação da API do Airtable. Obtido em https://airtable.com/account
Padrão: Não há padrão (obrigatório)
Flow completo para testar:
{
"name": "Teste Airtable Get - 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": "Buscar Lead",
"operation": "get",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Leads"
},
"recordId": "recABC123XYZ456",
"responseVariable": "leadEncontrado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Dados",
"parameters": {
"message": "Lead: {{leadEncontrado.fields.Nome}}"
}
}
},
{
"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 buscará o registro e mostrará o nome do lead.
config.baseId (string, obrigatório)
O que é: Identificador da base do Airtable. Encontrado na URL da base (app......)
Padrão: Não há padrão (obrigatório)
Flow completo para testar:
{
"name": "Teste Airtable Get - Base ID",
"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": "Buscar em Base Específica",
"operation": "get",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Clientes"
},
"recordId": "recDEF789GHI012",
"responseVariable": "clienteEncontrado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Cliente encontrado na base!"
}
}
},
{
"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 buscará registro na base especificada.
config.tableName (string, obrigatório)
O que é: Nome exato da tabela no Airtable onde o registro está.
Padrão: Não há padrão (obrigatório)
Flow completo para testar:
{
"name": "Teste Airtable Get - Table Name",
"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": "Buscar na Tabela Vendas",
"operation": "get",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Vendas"
},
"recordId": "recVENDA123",
"responseVariable": "vendaEncontrada"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Venda encontrada na tabela!"
}
}
},
{
"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 buscará registro na tabela especificada.
recordId (string, obrigatório)
O que é: ID único do registro no Airtable (começa com "rec"). Pode usar variável dinâmica.
Padrão: Não há padrão (obrigatório)
Flow completo para testar:
{
"name": "Teste Airtable Get - 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 pedido para consultar:",
"variable": "idPedido"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Buscar Pedido",
"operation": "get",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Pedidos"
},
"recordId": "{{idPedido}}",
"responseVariable": "pedido"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Exibir Pedido",
"parameters": {
"message": "Pedido #{{idPedido}}\n\nProduto: {{pedido.fields.Produto}}\nStatus: {{pedido.fields.Status}}\nValor: R$ {{pedido.fields.Valor}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "airtable_1" },
{ "source": "airtable_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite um ID de pedido. O sistema buscará e exibirá os detalhes.
responseVariable (string, opcional)
O que é: Nome da variável onde os dados do registro serão armazenados.
Padrão: "airtableResult"
Flow completo para testar:
{
"name": "Teste Airtable Get - Response Variable",
"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": "Buscar Contato",
"operation": "get",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Contatos"
},
"recordId": "recCONTATO123",
"responseVariable": "dadosContato"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Todos os Campos",
"parameters": {
"message": "Contato carregado!\n\nID: {{dadosContato.id}}\nNome: {{dadosContato.fields.Nome}}\nEmail: {{dadosContato.fields.Email}}\nTelefone: {{dadosContato.fields.Telefone}}"
}
}
},
{
"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 buscará e mostrará todos os campos na variável customizada.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "get" |
| 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 buscar (aceita variáveis) |
| responseVariable | string | Não | Nome da variável de resposta (padrão: "airtableResult") |
Exemplo 1: Consultar Status de Pedido
Objetivo: Permitir que cliente consulte status do seu pedido pelo ID
JSON para Importar
{
"name": "Consultar Status 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": "Boas-vindas",
"parameters": {
"message": "Olá! Vou consultar seu pedido."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Solicitar ID",
"parameters": {
"message": "Digite o ID do seu pedido:",
"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": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Exibir Status",
"parameters": {
"message": "📦 Detalhes do Pedido #{{idPedido}}\n\n🛍️ Produto: {{pedido.fields.Produto}}\n📊 Status: {{pedido.fields.Status}}\n💰 Valor: R$ {{pedido.fields.Valor}}\n📅 Data: {{pedido.fields.Data}}\n\n{{pedido.fields.Status}} == 'Enviado' ? '🚚 Seu pedido está a caminho!' : '⏳ Estamos preparando seu pedido.'}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 850, "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": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Olá! Vou consultar seu pedido.
Sistema: Digite o ID do seu pedido:
Usuário: recABC123XYZ
Sistema: 📦 Detalhes do Pedido #recABC123XYZ
🛍️ Produto: Curso de React
📊 Status: Enviado
💰 Valor: R$ 997
📅 Data: 2025-01-15
🚚 Seu pedido está a caminho!
Exemplo 2: Verificar Ticket de Suporte
Objetivo: Cliente consulta status do ticket de suporte aberto
JSON para Importar
{
"name": "Verificar Ticket de Suporte",
"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 Suporte\n\nDigite o número do seu protocolo:"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Protocolo",
"parameters": {
"message": "",
"variable": "protocolo"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Buscar Ticket",
"operation": "get",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Tickets"
},
"recordId": "{{protocolo}}",
"responseVariable": "ticket"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Verificar Status",
"parameters": {
"condition": "{{ticket.fields.Status}} == 'Resolvido'"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 850, "y": 50 },
"data": {
"label": "Resolvido",
"parameters": {
"message": "✅ Ticket #{{protocolo}} - RESOLVIDO\n\nCategoria: {{ticket.fields.Categoria}}\nData Abertura: {{ticket.fields.DataAbertura}}\nData Resolução: {{ticket.fields.DataResolucao}}\n\nSua solicitação foi concluída!"
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 850, "y": 150 },
"data": {
"label": "Em Andamento",
"parameters": {
"message": "⏳ Ticket #{{protocolo}} - EM ANDAMENTO\n\nCategoria: {{ticket.fields.Categoria}}\nStatus: {{ticket.fields.Status}}\nPrioridade: {{ticket.fields.Prioridade}}\n\nNossa equipe está trabalhando nisso!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1000, "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_3", "label": "false" },
{ "source": "message_2", "target": "end_1" },
{ "source": "message_3", "target": "end_1" }
]
}
Saída esperada:
Sistema: Central de Suporte
Digite o número do seu protocolo:
Usuário: recTICKET789
Sistema: ⏳ Ticket #recTICKET789 - EM ANDAMENTO
Categoria: Técnico
Status: Análise
Prioridade: Alta
Nossa equipe está trabalhando nisso!
Exemplo 3: Atualizar Registro Condicionalmente
Objetivo: Buscar registro, verificar valor e atualizar se necessário
JSON para Importar
{
"name": "Atualizar Registro Condicionalmente",
"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 ID Lead",
"parameters": {
"name": "idLead",
"value": "recLEAD12345"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Buscar Lead",
"operation": "get",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Leads"
},
"recordId": "{{idLead}}",
"responseVariable": "lead"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Verificar Contato",
"parameters": {
"condition": "{{lead.fields.UltimoContato}} == null"
}
}
},
{
"id": "airtable_2",
"type": "airtable",
"position": { "x": 700, "y": 50 },
"data": {
"label": "Atualizar Contato",
"operation": "update",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Leads"
},
"recordId": "{{idLead}}",
"fields": {
"UltimoContato": "{{hoje}}",
"Status": "Contatado"
},
"responseVariable": "leadAtualizado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 850, "y": 50 },
"data": {
"label": "Atualizado",
"parameters": {
"message": "Lead atualizado! Primeiro contato registrado."
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 150 },
"data": {
"label": "Já Contatado",
"parameters": {
"message": "Lead já foi contatado em {{lead.fields.UltimoContato}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1000, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "airtable_1" },
{ "source": "airtable_1", "target": "condition_1" },
{ "source": "condition_1", "target": "airtable_2", "label": "true" },
{ "source": "condition_1", "target": "message_2", "label": "false" },
{ "source": "airtable_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Lead atualizado! Primeiro contato registrado.
Resposta do Node
{
"id": "recABC123XYZ456",
"createdTime": "2025-01-15T10:30:00.000Z",
"fields": {
"Nome": "José Roberto",
"Email": "jose@exemplo.com",
"Telefone": "+5511999999999",
"Status": "Ativo",
"UltimoContato": "2025-01-15"
}
}
Boas Práticas
✅ SIM:
- Sempre trate erro 404 (registro não encontrado)
- Use variáveis dinâmicas para recordId quando apropriado
- Armazene resultado em variável com nome descritivo
- Combine com CONDITION para verificar valores antes de ações
- Use campos retornados com notação
{{variavel.fields.NomeCampo}}
❌ NÃO:
- Não assuma que registro sempre existe - trate erros
- Não use IDs hardcoded quando possível usar variáveis
- Não busque múltiplas vezes o mesmo registro desnecessariamente
- Não exponha IDs sensíveis em mensagens de erro
Dicas
💡 Dica 1: O ID do registro está em {{variavel.id}} e os campos em {{variavel.fields.NomeDoCampo}}
💡 Dica 2: Combine GET + CONDITION + UPDATE para atualização condicional eficiente
💡 Dica 3: Use GET para validar que registro existe antes de operações críticas (pagamento, envio, etc)
💡 Dica 4: Para buscar por email/telefone ao invés de ID, use AIRTABLE SEARCH primeiro
💡 Dica 5: Cache o resultado em variável se precisar usar múltiplas vezes no fluxo
Próximo Node
→ AIRTABLE UPDATE - Atualizar registro existente → AIRTABLE DELETE - Deletar registro → AIRTABLE SEARCH - Buscar registros com filtros → AIRTABLE CREATE - Criar novo registro