Pular para conteúdo

SUPABASE_INSERT - Inserir Registro no Supabase

O que é este Node?

O SUPABASE_INSERT é o node responsável por inserir um novo registro em uma tabela Supabase. Ele cria uma nova linha com os dados fornecidos e retorna o registro criado com seu ID.

Por que este Node existe?

Criar dados é uma operação fundamental em qualquer aplicação. O SUPABASE_INSERT existe para:

  1. Cadastrar novos registros: Criar usuários, pedidos, produtos, etc.
  2. Capturar dados de usuário: Salvar informações coletadas em fluxos de conversação
  3. Registrar eventos: Gravar logs, histórico, interações do usuário
  4. Integrar com banco: Persistir dados coletados no WhatsApp direto no Supabase
  5. Automação de cadastros: Criar registros automaticamente baseado em ações do fluxo

Como funciona internamente?

Quando o SUPABASE_INSERT é executado, o sistema:

  1. Valida configuração: Verifica se host e serviceRole do Supabase estão configurados
  2. Cria cliente: Inicializa conexão com Supabase usando credenciais fornecidas
  3. Substitui variáveis: Processa o objeto row substituindo variáveis do contexto (ex: {{userName}})
  4. Executa INSERT: Insere novo registro na tabela especificada
  5. Se erro: Retorna erro indicando problema (campo obrigatório faltando, constraint violada, etc.)
  6. Se sucesso: Retorna registro criado completo incluindo ID gerado pelo banco
  7. Salva em variável: Armazena registro criado na variável especificada em responseVariable

Código interno (supabase.executor.ts:126-145):

private async insertRow(
  supabase: SupabaseClient,
  table: string,
  row: Record<string, any>,
  context: ExecutionContext,
): Promise<any> {
  const replacedRow = this.replaceObjectVariables(row, context.variables);

  const { data, error } = await supabase
    .from(table)
    .insert(replacedRow)
    .select()
    .single();

  if (error) {
    throw new Error(`Supabase insert error: ${error.message}`);
  }

  return data;
}

Quando você DEVE usar este Node?

Use SUPABASE_INSERT sempre que precisar de criar um novo registro no banco:

Casos de uso

  1. Cadastro de usuário: "Salvar dados do novo cliente no banco"
  2. Criar pedido: "Registrar novo pedido feito pelo WhatsApp"
  3. Log de interação: "Salvar histórico de conversação do usuário"
  4. Agendar compromisso: "Criar novo agendamento na tabela de appointments"
  5. Feedback de usuário: "Salvar avaliação ou comentário do cliente"

Quando NÃO usar SUPABASE_INSERT

  • Atualizar registro existente: Use SUPABASE_UPDATE para modificar dados
  • Inserir múltiplos registros de uma vez: Atualmente suporta apenas 1 registro por execução
  • Duplicar registro: Verifique se registro já existe com SUPABASE_GETALL antes de inserir

Parâmetros Detalhados

operation (string, obrigatório)

O que é: Tipo da operação Supabase a ser executada. Para este node, sempre deve ser "insert".

Padrão: Nenhum (obrigatório)

Flow completo para testar:

{
  "name": "Teste Supabase Insert - Operation",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Usuário",
        "operation": "insert",
        "config": {
          "host": "https://seu-projeto.supabase.co",
          "serviceRole": "sua-service-role-key"
        },
        "table": "users",
        "row": {
          "name": "Novo Usuário",
          "email": "novo@example.com"
        },
        "responseVariable": "novoUsuario"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Usuário criado com ID: {{novoUsuario.id}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "supabase_1" },
    { "source": "supabase_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Configure suas credenciais Supabase. O sistema deve criar um novo usuário e retornar o ID gerado.

config (object, obrigatório)

O que é: Objeto contendo as credenciais de conexão com Supabase (host e serviceRole).

Padrão: Nenhum (obrigatório)

Flow completo para testar:

{
  "name": "Teste Supabase Insert - Config",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Testar Insert",
        "operation": "insert",
        "config": {
          "host": "https://xyzcompany.supabase.co",
          "serviceRole": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
        },
        "table": "test_logs",
        "row": {
          "message": "Teste de conexão",
          "timestamp": "2025-01-15T10:00:00Z"
        },
        "responseVariable": "logCriado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "Log registrado: {{logCriado.message}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "supabase_1" },
    { "source": "supabase_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Use suas credenciais reais do Supabase. Se a configuração estiver correta, deve criar o log.

table (string, obrigatório)

O que é: Nome da tabela no Supabase onde inserir o novo registro.

Padrão: Nenhum (obrigatório)

Flow completo para testar:

{
  "name": "Teste Supabase Insert - Table",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Pedido",
        "operation": "insert",
        "config": {
          "host": "https://seu-projeto.supabase.co",
          "serviceRole": "sua-service-role-key"
        },
        "table": "orders",
        "row": {
          "customer_name": "Cliente Teste",
          "total": 99.90,
          "status": "pending"
        },
        "responseVariable": "novoPedido"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Pedido criado! Número: {{novoPedido.order_number}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "supabase_1" },
    { "source": "supabase_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Use uma tabela existente no seu banco Supabase. O sistema deve criar o pedido.

row (object, obrigatório)

O que é: Objeto contendo os dados a serem inseridos. Cada chave é um campo da tabela e cada valor é o dado a salvar. Aceita variáveis (ex: {{userName}}).

Padrão: Nenhum (obrigatório)

Flow completo para testar:

{
  "name": "Teste Supabase Insert - Row Dinâmico",
  "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": "Pedir Nome",
        "parameters": {
          "message": "Qual seu nome?",
          "variableName": "nome"
        }
      }
    },
    {
      "id": "email_1",
      "type": "email",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Pedir Email",
        "parameters": {
          "message": "Qual seu email?",
          "variableName": "email"
        }
      }
    },
    {
      "id": "phone_1",
      "type": "phone",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Pedir Telefone",
        "parameters": {
          "message": "Qual seu telefone?",
          "variableName": "telefone"
        }
      }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Salvar Contato",
        "operation": "insert",
        "config": {
          "host": "https://seu-projeto.supabase.co",
          "serviceRole": "sua-service-role-key"
        },
        "table": "contacts",
        "row": {
          "name": "{{nome}}",
          "email": "{{email}}",
          "phone": "{{telefone}}",
          "source": "whatsapp",
          "created_at": "{{_timestamp}}"
        },
        "responseVariable": "contatoSalvo"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "Cadastro realizado com sucesso!\n\nNome: {{contatoSalvo.name}}\nEmail: {{contatoSalvo.email}}\nTelefone: {{contatoSalvo.phone}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "email_1" },
    { "source": "email_1", "target": "phone_1" },
    { "source": "phone_1", "target": "supabase_1" },
    { "source": "supabase_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite nome, email e telefone. O sistema deve criar contato com todos os dados informados.

responseVariable (string, obrigatório)

O que é: Nome da variável onde o registro criado será armazenado para uso posterior no fluxo.

Padrão: Nenhum (obrigatório)

Flow completo para testar:

{
  "name": "Teste Supabase Insert - ResponseVariable",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Cliente",
        "operation": "insert",
        "config": {
          "host": "https://seu-projeto.supabase.co",
          "serviceRole": "sua-service-role-key"
        },
        "table": "customers",
        "row": {
          "name": "João Silva",
          "email": "joao@example.com",
          "plan": "premium"
        },
        "responseVariable": "clienteCriado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Boas-vindas",
        "parameters": {
          "message": "Bem-vindo, {{clienteCriado.name}}!"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Detalhes",
        "parameters": {
          "message": "Seu ID de cliente é: {{clienteCriado.id}}\nPlano: {{clienteCriado.plan}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "supabase_1" },
    { "source": "supabase_1", "target": "message_1" },
    { "source": "message_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Teste: O registro criado deve ser armazenado em clienteCriado e acessível em múltiplos nodes subsequentes.

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Tipo de operação: "insert"
config object Sim Credenciais Supabase (host, serviceRole)
config.host string Sim URL do projeto Supabase
config.serviceRole string Sim Service Role Key do Supabase
table string Sim Nome da tabela
row object Sim Dados a serem inseridos (campo: valor)
responseVariable string Sim Nome da variável para armazenar registro criado

Exemplo 1: Cadastro Completo de Cliente

Objetivo: Coletar dados do cliente em um fluxo e salvar tudo no Supabase.

JSON para Importar

{
  "name": "Cadastro de Cliente - Supabase Insert",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Boas-vindas",
        "parameters": {
          "message": "Olá! Vamos fazer seu cadastro. Por favor, responda algumas perguntas:"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Nome",
        "parameters": {
          "message": "Qual seu nome completo?",
          "variableName": "nomeCliente"
        }
      }
    },
    {
      "id": "email_1",
      "type": "email",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Email",
        "parameters": {
          "message": "Qual seu melhor email?",
          "variableName": "emailCliente"
        }
      }
    },
    {
      "id": "phone_1",
      "type": "phone",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Telefone",
        "parameters": {
          "message": "Qual seu telefone?",
          "variableName": "telefoneCliente"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Empresa",
        "parameters": {
          "message": "Qual o nome da sua empresa?",
          "variableName": "empresaCliente"
        }
      }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Salvar Cliente",
        "operation": "insert",
        "config": {
          "host": "https://empresa.supabase.co",
          "serviceRole": "service-role-key"
        },
        "table": "customers",
        "row": {
          "name": "{{nomeCliente}}",
          "email": "{{emailCliente}}",
          "phone": "{{telefoneCliente}}",
          "company": "{{empresaCliente}}",
          "status": "active",
          "source": "whatsapp_flow",
          "created_at": "{{_timestamp}}"
        },
        "responseVariable": "novoCliente"
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "Cadastro realizado com sucesso!\n\nID: {{novoCliente.id}}\nNome: {{novoCliente.name}}\nEmail: {{novoCliente.email}}\n\nEm breve entraremos em contato!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "email_1" },
    { "source": "email_1", "target": "phone_1" },
    { "source": "phone_1", "target": "input_2" },
    { "source": "input_2", "target": "supabase_1" },
    { "source": "supabase_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Olá! Vamos fazer seu cadastro. Por favor, responda algumas perguntas:
Sistema: Qual seu nome completo?
Usuário: Maria Santos
Sistema: Qual seu melhor email?
Usuário: maria@empresa.com
Sistema: Qual seu telefone?
Usuário: +5511999999999
Sistema: Qual o nome da sua empresa?
Usuário: Tech Solutions
Sistema: Cadastro realizado com sucesso!

ID: uuid-12345
Nome: Maria Santos
Email: maria@empresa.com

Em breve entraremos em contato!

Exemplo 2: Criar Pedido a partir de Conversa

Objetivo: Coletar informações do pedido via WhatsApp e criar registro no Supabase.

JSON para Importar

{
  "name": "Criar Pedido - Supabase Insert",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Menu",
        "parameters": {
          "message": "Olá! Vamos registrar seu pedido."
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Produto",
        "parameters": {
          "message": "Qual produto você deseja?",
          "variableName": "produto"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Quantidade",
        "parameters": {
          "message": "Quantas unidades?",
          "variableName": "quantidade"
        }
      }
    },
    {
      "id": "number_2",
      "type": "number",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Valor",
        "parameters": {
          "message": "Qual o valor unitário?",
          "variableName": "valorUnitario"
        }
      }
    },
    {
      "id": "calculator_1",
      "type": "calculator",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Calcular Total",
        "parameters": {
          "expression": "{{quantidade}} * {{valorUnitario}}",
          "variableName": "valorTotal"
        }
      }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Criar Pedido",
        "operation": "insert",
        "config": {
          "host": "https://loja.supabase.co",
          "serviceRole": "service-role-key"
        },
        "table": "orders",
        "row": {
          "product_name": "{{produto}}",
          "quantity": "{{quantidade}}",
          "unit_price": "{{valorUnitario}}",
          "total_amount": "{{valorTotal}}",
          "status": "pending",
          "customer_phone": "{{_from}}",
          "created_at": "{{_timestamp}}"
        },
        "responseVariable": "pedidoCriado"
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "Pedido registrado com sucesso!\n\nNúmero do Pedido: {{pedidoCriado.id}}\nProduto: {{pedidoCriado.product_name}}\nQuantidade: {{pedidoCriado.quantity}} un\nValor Total: R$ {{pedidoCriado.total_amount}}\n\nEntraremos em contato para confirmar o pagamento."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "number_1" },
    { "source": "number_1", "target": "number_2" },
    { "source": "number_2", "target": "calculator_1" },
    { "source": "calculator_1", "target": "supabase_1" },
    { "source": "supabase_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Olá! Vamos registrar seu pedido.
Sistema: Qual produto você deseja?
Usuário: Mouse Gamer RGB
Sistema: Quantas unidades?
Usuário: 2
Sistema: Qual o valor unitário?
Usuário: 89.90
Sistema: Pedido registrado com sucesso!

Número do Pedido: uuid-98765
Produto: Mouse Gamer RGB
Quantidade: 2 un
Valor Total: R$ 179.80

Entraremos em contato para confirmar o pagamento.

Exemplo 3: Registrar Feedback do Cliente

Objetivo: Coletar e salvar avaliação do atendimento no banco de dados.

JSON para Importar

{
  "name": "Feedback do Cliente - Supabase Insert",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Solicitar Feedback",
        "parameters": {
          "message": "Obrigado por utilizar nosso serviço! Gostaríamos de saber sua opinião."
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Nota",
        "parameters": {
          "message": "Em uma escala de 1 a 10, como você avalia nosso atendimento?",
          "variableName": "nota",
          "min": 1,
          "max": 10
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Comentário",
        "parameters": {
          "message": "Deixe um comentário sobre sua experiência (opcional):",
          "variableName": "comentario"
        }
      }
    },
    {
      "id": "supabase_1",
      "type": "supabase",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Salvar Feedback",
        "operation": "insert",
        "config": {
          "host": "https://app.supabase.co",
          "serviceRole": "service-role-key"
        },
        "table": "feedback",
        "row": {
          "customer_phone": "{{_from}}",
          "rating": "{{nota}}",
          "comment": "{{comentario}}",
          "flow_id": "{{_flowId}}",
          "created_at": "{{_timestamp}}"
        },
        "responseVariable": "feedbackSalvo"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Nota Alta?",
        "parameters": {
          "variable": "{{nota}}",
          "operator": "greater_than_or_equal",
          "value": "8"
        }
      }
    },
    {
      "id": "message_alta",
      "type": "message",
      "position": { "x": 1300, "y": 50 },
      "data": {
        "label": "Agradecimento Positivo",
        "parameters": {
          "message": "Ficamos muito felizes com sua avaliação! Obrigado pela confiança!"
        }
      }
    },
    {
      "id": "message_baixa",
      "type": "message",
      "position": { "x": 1300, "y": 150 },
      "data": {
        "label": "Agradecimento e Desculpas",
        "parameters": {
          "message": "Agradecemos seu feedback. Vamos trabalhar para melhorar nosso atendimento!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "number_1" },
    { "source": "number_1", "target": "input_1" },
    { "source": "input_1", "target": "supabase_1" },
    { "source": "supabase_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_alta", "label": "yes" },
    { "source": "condition_1", "target": "message_baixa", "label": "no" },
    { "source": "message_alta", "target": "end_1" },
    { "source": "message_baixa", "target": "end_1" }
  ]
}

Saída esperada (nota alta):

Sistema: Obrigado por utilizar nosso serviço! Gostaríamos de saber sua opinião.
Sistema: Em uma escala de 1 a 10, como você avalia nosso atendimento?
Usuário: 9
Sistema: Deixe um comentário sobre sua experiência (opcional):
Usuário: Excelente atendimento, muito rápido!
Sistema: Ficamos muito felizes com sua avaliação! Obrigado pela confiança!

Resposta do Node

{
  "id": "uuid-generated-by-supabase",
  "name": "João Silva",
  "email": "joao@example.com",
  "phone": "+5511999999999",
  "status": "active",
  "created_at": "2025-01-15T10:30:00.000Z",
  "updated_at": "2025-01-15T10:30:00.000Z"
}

Boas Práticas

SIM:

  • Use variáveis para dados dinâmicos ({{userName}})
  • Sempre defina responseVariable para acessar ID do registro criado
  • Adicione campos de tracking (source, created_at, flow_id)
  • Valide dados antes de inserir (use nodes de validação)
  • Trate possíveis erros (constraint violations, campos obrigatórios)

NÃO:

  • Não insira dados sensíveis sem criptografia
  • Não assuma que insert sempre funciona (trate erros)
  • Não use valores hardcoded quando deveria ser dinâmico
  • Não exponha Service Role Key em código front-end
  • Não insira registros duplicados (verifique antes com getAll)

Dicas

💡 Dica 1: O Supabase gera automaticamente campos id, created_at e updated_at se configurados na tabela. Não precisa passar esses valores no row.

💡 Dica 2: Use variáveis especiais do sistema: {{_from}} (telefone do usuário), {{_timestamp}} (timestamp atual), {{_flowId}} (ID do fluxo).

💡 Dica 3: Se inserção falhar por constraint (ex: email único já existe), o erro será retornado. Use CONDITION após insert para verificar sucesso.

💡 Dica 4: Para inserir dados relacionados (ex: pedido + itens), faça múltiplas inserções em sequência, usando o ID retornado do primeiro insert.

💡 Dica 5: Configure Row Level Security (RLS) no Supabase para proteger dados mesmo usando Service Role Key.

Próximos Nodes

SUPABASE_GETROW - Buscar registro específico por ID → SUPABASE_GETALL - Buscar múltiplos registros com filtros → SUPABASE_UPDATE - Atualizar registro existente → SUPABASE_DELETE - Deletar registro da tabela