AIRTABLE CREATE - Criar Registro no Airtable
O que é este Node?
O AIRTABLE CREATE é o node responsável por criar novos registros em tabelas do Airtable com campos personalizados.
Por que este Node existe?
Automatizar a criação de registros no Airtable é fundamental para fluxos que integram dados de conversas do WhatsApp com bases de dados estruturadas. O AIRTABLE CREATE existe para:
- Armazenamento de Dados: Salvar informações coletadas em conversas diretamente no Airtable
- Integração com Bases Existentes: Conectar fluxos do WhatsApp com bases Airtable já em uso pela empresa
- Organização Estruturada: Manter dados organizados em campos específicos do Airtable
- Automação de Processos: Eliminar entrada manual de dados coletados via WhatsApp
Como funciona internamente?
Quando o AIRTABLE CREATE é executado, o sistema:
- Coleta Credenciais: Obtém o API Key, Base ID e nome da tabela
- Prepara Campos: Processa os campos que serão criados, substituindo variáveis do contexto
- Monta URL da API: Constrói a URL
https://api.airtable.com/v0/{baseId}/{tableName} - Faz Requisição POST: Envia os dados para a API do Airtable
- Se falha: Lança erro e interrompe o fluxo
- Se sucesso: Armazena o registro criado (com ID) na variável de resposta
- Continua Execução: Passa para o próximo node com o resultado disponível
Código interno (airtable.executor.ts:26-31):
case 'create': {
const fields = JSON.parse(this.replaceVariables(JSON.stringify(node.data.fields), context.variables));
const response = await axios.post(baseUrl, { fields }, { headers });
result = response.data;
break;
}
Quando você DEVE usar este Node?
Use AIRTABLE CREATE sempre que precisar de criar novos registros no Airtable:
Casos de uso
- Cadastro de Leads: "Quando usuário fornecer nome, email e telefone, criar registro na tabela 'Leads'"
- Registro de Pedidos: "Após confirmação do pedido, criar registro na tabela 'Vendas' com detalhes do produto"
- Sistema de Tickets: "Quando usuário relatar problema, criar ticket na tabela 'Suporte' do Airtable"
- Agendamentos: "Após coleta de data/hora, criar registro na tabela 'Agendamentos'"
- Formulários Dinâmicos: "Armazenar respostas de formulário WhatsApp no Airtable"
Quando NÃO usar AIRTABLE CREATE
- Atualizar registro existente: Use
AIRTABLE UPDATEao invés - Buscar dados: Use
AIRTABLE SEARCHouAIRTABLE LISTao invés - Criar múltiplos registros: Use
AIRTABLE BATCH CREATEao invés
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 Create - 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": "Criar Lead",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Leads"
},
"fields": {
"Nome": "José Roberto",
"Email": "jose@exemplo.com"
},
"responseVariable": "novoLead"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Lead criado com ID: {{novoLead.id}}"
}
}
},
{
"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 criará um registro no Airtable e retornará "Lead criado com ID: recXXXXXXXXXXXXXX"
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 Create - 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": "Criar em Base Específica",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Clientes"
},
"fields": {
"Nome": "Maria Silva",
"Status": "Ativo"
},
"responseVariable": "clienteCriado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Cliente criado na base com sucesso!"
}
}
},
{
"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 criará registro na base especificada.
config.tableName (string, obrigatório)
O que é: Nome exato da tabela no Airtable onde o registro será criado.
Padrão: Não há padrão (obrigatório)
Flow completo para testar:
{
"name": "Teste Airtable Create - 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": "Criar na Tabela Vendas",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Vendas"
},
"fields": {
"Produto": "Curso React",
"Valor": 997
},
"responseVariable": "vendaCriada"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Venda registrada na tabela Vendas!"
}
}
},
{
"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 criará registro na tabela especificada.
fields (object, obrigatório)
O que é: Objeto JSON com os campos e valores que serão criados. As chaves devem corresponder aos nomes das colunas no Airtable.
Padrão: Não há padrão (obrigatório)
Flow completo para testar:
{
"name": "Teste Airtable Create - Fields Dinâmicos",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Coletar Nome",
"parameters": {
"message": "Qual seu nome completo?",
"variable": "nomeUsuario"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Coletar Email",
"parameters": {
"message": "Qual seu email?",
"variable": "emailUsuario"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Criar Lead com Dados",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Leads"
},
"fields": {
"Nome": "{{nomeUsuario}}",
"Email": "{{emailUsuario}}",
"Data": "{{hoje}}",
"Origem": "WhatsApp"
},
"responseVariable": "leadCriado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Obrigado! Seus dados foram salvos."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "airtable_1" },
{ "source": "airtable_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite nome e email. O sistema criará registro com os campos especificados.
responseVariable (string, opcional)
O que é: Nome da variável onde o resultado da criação será armazenado (incluindo o ID do registro criado).
Padrão: "airtableResult"
Flow completo para testar:
{
"name": "Teste Airtable Create - 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": "Criar e Guardar ID",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Contatos"
},
"fields": {
"Nome": "Pedro Santos",
"Telefone": "+5511999999999"
},
"responseVariable": "contatoCriado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar ID",
"parameters": {
"message": "Contato criado! ID: {{contatoCriado.id}}\nCampos salvos: {{contatoCriado.fields}}"
}
}
},
{
"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 criará registro e mostrará ID e campos na variável customizada.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "create" |
| 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 |
| fields | object | Sim | Campos e valores a serem criados |
| responseVariable | string | Não | Nome da variável de resposta (padrão: "airtableResult") |
Exemplo 1: Cadastro de Lead Completo
Objetivo: Criar sistema de captação de leads que armazena dados no Airtable
JSON para Importar
{
"name": "Cadastro de Lead Completo",
"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 fazer seu cadastro."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "Qual seu nome completo?",
"variable": "nome"
}
}
},
{
"id": "input_2",
"type": "email",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Qual seu email?",
"variable": "email"
}
}
},
{
"id": "input_3",
"type": "phone",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Telefone",
"parameters": {
"message": "Qual seu telefone?",
"variable": "telefone"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 850, "y": 100 },
"data": {
"label": "Salvar no Airtable",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Leads"
},
"fields": {
"Nome": "{{nome}}",
"Email": "{{email}}",
"Telefone": "{{telefone}}",
"Data Cadastro": "{{hoje}}",
"Origem": "WhatsApp Bot",
"Status": "Novo"
},
"responseVariable": "leadCriado"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1000, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Perfeito, {{nome}}! Seu cadastro foi realizado com sucesso. Em breve nossa equipe entrará em contato."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1150, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "input_3" },
{ "source": "input_3", "target": "airtable_1" },
{ "source": "airtable_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Olá! Vou fazer seu cadastro.
Sistema: Qual seu nome completo?
Usuário: José Roberto Silva
Sistema: Qual seu email?
Usuário: jose@exemplo.com
Sistema: Qual seu telefone?
Usuário: 11999999999
Sistema: Perfeito, José Roberto Silva! Seu cadastro foi realizado com sucesso. Em breve nossa equipe entrará em contato.
Exemplo 2: Registro de Pedido de Venda
Objetivo: Criar registro de venda no Airtable após confirmação do pedido
JSON para Importar
{
"name": "Registro de Pedido de Venda",
"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": "Produto",
"parameters": {
"message": "Qual produto você deseja comprar?",
"variable": "produto"
}
}
},
{
"id": "input_2",
"type": "number",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Quantidade",
"parameters": {
"message": "Quantas unidades?",
"variable": "quantidade"
}
}
},
{
"id": "calculator_1",
"type": "calculator",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Calcular Total",
"parameters": {
"expression": "{{quantidade}} * 97",
"resultVariable": "valorTotal"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Total: R$ {{valorTotal}}\n\nConfirmar pedido? (sim/não)"
}
}
},
{
"id": "input_3",
"type": "input",
"position": { "x": 850, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "",
"variable": "confirmacao"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 1000, "y": 100 },
"data": {
"label": "Verificar Confirmação",
"parameters": {
"condition": "{{confirmacao}} == 'sim'"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 1150, "y": 50 },
"data": {
"label": "Registrar Venda",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Vendas"
},
"fields": {
"Produto": "{{produto}}",
"Quantidade": "{{quantidade}}",
"Valor Total": "{{valorTotal}}",
"Data Venda": "{{hoje}}",
"Cliente": "{{nomeUsuario}}",
"Status": "Confirmado"
},
"responseVariable": "vendaRegistrada"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1300, "y": 50 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Pedido confirmado! Número: {{vendaRegistrada.id}}"
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 1150, "y": 150 },
"data": {
"label": "Cancelado",
"parameters": {
"message": "Pedido cancelado. Até logo!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1450, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "calculator_1" },
{ "source": "calculator_1", "target": "message_1" },
{ "source": "message_1", "target": "input_3" },
{ "source": "input_3", "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" }
]
}
Saída esperada:
Sistema: Qual produto você deseja comprar?
Usuário: Curso de React
Sistema: Quantas unidades?
Usuário: 2
Sistema: Total: R$ 194
Confirmar pedido? (sim/não)
Usuário: sim
Sistema: Pedido confirmado! Número: recABC123XYZ456
Exemplo 3: Sistema de Tickets de Suporte
Objetivo: Criar ticket de suporte no Airtable quando usuário relatar problema
JSON para Importar
{
"name": "Sistema de Tickets 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\n1 - Problema técnico\n2 - Dúvida\n3 - Cancelamento\n\nDigite o número:"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Tipo",
"parameters": {
"message": "",
"variable": "tipoTicket"
}
}
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Classificar",
"parameters": {
"variable": "tipoTicket",
"cases": {
"1": "Técnico",
"2": "Dúvida",
"3": "Cancelamento"
},
"defaultCase": "Outro",
"resultVariable": "categoriaTicket"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Descrição",
"parameters": {
"message": "Descreva seu problema/dúvida:",
"variable": "descricao"
}
}
},
{
"id": "airtable_1",
"type": "airtable",
"position": { "x": 850, "y": 100 },
"data": {
"label": "Criar Ticket",
"operation": "create",
"config": {
"apiKey": "patABC123456789xyz",
"baseId": "appXYZ123456",
"tableName": "Tickets"
},
"fields": {
"Cliente": "{{nomeUsuario}}",
"Telefone": "{{telefoneUsuario}}",
"Categoria": "{{categoriaTicket}}",
"Descrição": "{{descricao}}",
"Data Abertura": "{{hoje}}",
"Status": "Aberto",
"Prioridade": "Normal"
},
"responseVariable": "ticketCriado"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1000, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Ticket criado com sucesso!\n\nProtocolo: {{ticketCriado.id}}\nCategoria: {{categoriaTicket}}\n\nEm breve nossa equipe entrará em contato."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1150, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "switch_1" },
{ "source": "switch_1", "target": "input_2" },
{ "source": "input_2", "target": "airtable_1" },
{ "source": "airtable_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Central de Suporte
1 - Problema técnico
2 - Dúvida
3 - Cancelamento
Digite o número:
Usuário: 1
Sistema: Descreva seu problema/dúvida:
Usuário: Não consigo fazer login no sistema
Sistema: Ticket criado com sucesso!
Protocolo: recXYZ789ABC123
Categoria: Técnico
Em breve nossa equipe entrará em contato.
Resposta do Node
{
"id": "recABC123XYZ456",
"createdTime": "2025-01-15T10:30:00.000Z",
"fields": {
"Nome": "José Roberto",
"Email": "jose@exemplo.com",
"Telefone": "+5511999999999",
"Data Cadastro": "2025-01-15",
"Origem": "WhatsApp Bot",
"Status": "Novo"
}
}
Boas Práticas
✅ SIM:
- Valide dados antes de criar no Airtable (use nodes de validação)
- Use nomes de campos EXATAMENTE como estão no Airtable (case-sensitive)
- Armazene o ID retornado para futuras atualizações
- Use variáveis dinâmicas para campos personalizados
- Trate erros de API (credenciais inválidas, campos não existentes)
❌ NÃO:
- Não crie registros duplicados sem verificar existência
- Não exponha API Keys em mensagens de erro
- Não use campos que não existem na tabela
- Não esqueça de validar tipos de dados (número, data, etc)
Dicas
💡 Dica 1: Use {{hoje}} para preencher automaticamente campos de data com a data atual
💡 Dica 2: Combine com CONDITION para criar registros apenas sob certas condições (ex: após pagamento confirmado)
💡 Dica 3: O ID retornado em responseVariable.id pode ser usado em AIRTABLE UPDATE para atualizar o registro depois
💡 Dica 4: Para campos de múltipla escolha no Airtable, passe arrays: "Tags": ["Lead", "WhatsApp"]
💡 Dica 5: Use AIRTABLE SEARCH antes de criar para evitar duplicatas (buscar por email/telefone)
Próximo Node
→ AIRTABLE UPDATE - Atualizar registro existente → AIRTABLE GET - Buscar registro por ID → AIRTABLE SEARCH - Buscar registros com filtros → AIRTABLE BATCH CREATE - Criar múltiplos registros