Pular para conteúdo

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:

  1. Consulta Rápida: Buscar dados de um registro específico conhecendo apenas seu ID
  2. Verificação de Status: Checar estado atual de um registro (ex: status de pedido)
  3. Enriquecimento de Dados: Obter informações completas de um registro para usar no fluxo
  4. 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:

  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 buscado
  3. Monta URL da API: Constrói https://api.airtable.com/v0/{baseId}/{tableName}/{recordId}
  4. Faz Requisição GET: Busca o registro na API do Airtable
  5. Se não encontrado: Lança erro 404 (registro não existe)
  6. Se encontrado: Armazena todos os dados do registro na variável de resposta
  7. 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

  1. Consultar Pedido: "Buscar detalhes do pedido usando ID armazenado anteriormente"
  2. Verificar Status: "Checar se ticket de suporte foi resolvido pelo ID"
  3. Atualização Condicional: "Buscar registro, verificar valores e atualizar se necessário"
  4. Exibir Histórico: "Mostrar ao cliente os dados de sua última compra pelo ID"
  5. Validar Existência: "Verificar se registro ainda existe antes de processar"

Quando NÃO usar AIRTABLE GET

  • Buscar por outros campos: Use AIRTABLE SEARCH com filtros ao invés
  • Listar vários registros: Use AIRTABLE LIST ao invés
  • Não sabe o ID: Use AIRTABLE SEARCH para 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