Pular para conteúdo

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:

  1. Armazenamento de Dados: Salvar informações coletadas em conversas diretamente no Airtable
  2. Integração com Bases Existentes: Conectar fluxos do WhatsApp com bases Airtable já em uso pela empresa
  3. Organização Estruturada: Manter dados organizados em campos específicos do Airtable
  4. Automação de Processos: Eliminar entrada manual de dados coletados via WhatsApp

Como funciona internamente?

Quando o AIRTABLE CREATE é executado, o sistema:

  1. Coleta Credenciais: Obtém o API Key, Base ID e nome da tabela
  2. Prepara Campos: Processa os campos que serão criados, substituindo variáveis do contexto
  3. Monta URL da API: Constrói a URL https://api.airtable.com/v0/{baseId}/{tableName}
  4. Faz Requisição POST: Envia os dados para a API do Airtable
  5. Se falha: Lança erro e interrompe o fluxo
  6. Se sucesso: Armazena o registro criado (com ID) na variável de resposta
  7. 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

  1. Cadastro de Leads: "Quando usuário fornecer nome, email e telefone, criar registro na tabela 'Leads'"
  2. Registro de Pedidos: "Após confirmação do pedido, criar registro na tabela 'Vendas' com detalhes do produto"
  3. Sistema de Tickets: "Quando usuário relatar problema, criar ticket na tabela 'Suporte' do Airtable"
  4. Agendamentos: "Após coleta de data/hora, criar registro na tabela 'Agendamentos'"
  5. Formulários Dinâmicos: "Armazenar respostas de formulário WhatsApp no Airtable"

Quando NÃO usar AIRTABLE CREATE

  • Atualizar registro existente: Use AIRTABLE UPDATE ao invés
  • Buscar dados: Use AIRTABLE SEARCH ou AIRTABLE LIST ao invés
  • Criar múltiplos registros: Use AIRTABLE BATCH CREATE ao 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