sirius·manual do time
Playbook · pilar tecnologia / CRM

O funil da Imersão caindo sozinho no CRM

Como o lead entra, sobe de estágio e é recuperado sem ninguém digitar nada: do pop-up da página de venda, passando pela compra do ingresso, até virar aluno e plugar a régua de recuperação. Uma oportunidade só, que progride.

Caso real: Imersão Além do Operacional (Comport Ensino). Montado e atualizado em 01/06/2026. Integração (código): Thiago. Estrutura do CRM e automações: Chardson.

← voltar pros guias

Visão geral: o funil inteiro automático

A pessoa deixa o contato no pop-up da página de venda. No mesmo segundo ela vira um lead no CRM, na pipeline da imersão. Quando compra o ingresso, sobe de estágio sozinha. Quando preenche a ficha pré-aula, vira aluno categorizado. Quem não comprou cai numa régua de recuperação. Tudo sem ninguém mexer no CRM na mão.

Pop-up
LP de venda
Comprou
postback Eduzz
Ficha
vira aluno
Programa
upsell R$3.500
O que mudou nesta versão

A primeira versão deste guia cobria só a ficha (o aluno). Faltava o começo do funil: o pop-up que captura o lead frio antes da compra, o postback do Eduzz que confirma quem comprou, e a régua de recuperação de quem não comprou. Sem o pop-up gravando o lead no CRM, não havia o que recuperar. Esta versão amarra tudo.

O funil e os 4 estágios

É uma pipeline só ("Além do Operacional"), com uma oportunidade por pessoa que vai progredindo de estágio e de valor. Decidimos contra criar uma pipeline separada de recuperação: recuperação não é um destino, é um tratamento de um lead que travou no mesmo funil, e quebrar em duas pipelines fragmenta o relatório.

1 · Lead · pop-up
deixou o contato · R$97
2 · Comprou ingresso
pagou os R$97
3 · Aluno · ficha
preencheu · sobe p/ R$3.500
4 · Cliente programa
comprou o programa

Três automações alimentam esses estágios, cada uma num proxy serverless (função na Vercel) com o token do GHL escondido no servidor. As três só avançam a oportunidade, nunca puxam de volta (um rank de estágio garante isso).

Na LP de venda, o pop-up "garantir vaga" pede nome, e-mail e WhatsApp e em seguida redireciona pro checkout do Eduzz. O segredo: antes de mandar a pessoa pro checkout, ele dispara os dados pro proxy, que cria o lead no GHL. Assim, quem desiste no checkout não se perde: já está no CRM como lead, pronto pra recuperação.

Preenche o pop-up POST pro proxy lead no estágio 1 redireciona pro checkout

O proxy faz: upsert do contato (dedup por e-mail/telefone), tag imersao-lead, campo "situação = Lead" e a oportunidade no estágio 1 com valor R$97.

Detalhe que quebra fácil

Como a página navega pro checkout logo depois, o POST do lead morreria no meio. Por isso o disparo usa keepalive:true: o navegador completa a requisição mesmo já tendo trocado de página. Sem isso, parte dos leads não chega no CRM.

2.Compra do ingresso → postback do Eduzz

O CRM não sabe sozinho quem comprou. Quem avisa é o Eduzz, via postback (uma notificação que o Eduzz manda pra uma URL nossa a cada evento de venda). Configura-se a URL uma vez em MyEduzz → Ferramentas → Notificações:

https://dashboard-siriusoperacional.vercel.app/api/eduzz-postback?token=<SEGREDO>

Quando a venda é aprovada, o proxy acha o contato (pelo e-mail), garante a tag imersao-comprou e move a oportunidade pro estágio 2 ("Comprou ingresso"). Se a pessoa comprou direto, sem ter passado pelo pop-up, ele cria a oportunidade já nesse estágio. Em reembolso/cancelamento, marca a oportunidade como perdida.

Segurança e escopo

3.Ficha pré-aula → vira aluno

Quem comprou o ingresso recebe o link da ficha pré-aula e preenche antes da aula. Aqui a pessoa já é aluno. A ficha é uma página estática que manda os dados pro proxy (o mesmo padrão: token nunca no front, sempre no servidor).

Aluno preenche POST pro proxy Proxy (token escondido) avança pro estágio 3 + R$3.500
Formulário que o aluno preenche
A ficha pré-aula. As respostas viram a categorização do aluno no CRM.

O proxy faz upsert do contato, avança a oportunidade pro estágio 3 ("Aluno · ficha") e sobe o valor pra R$3.500 (o programa, que é o upsell pós-ingresso). Tag imersao-aluno. E o pulo do gato: as respostas viram campos personalizados filtráveis (não nota).

Por que campo, não nota

O GHL não filtra pelo texto de uma nota — nota é só leitura humana. Pra puxar depois "só quem tem 6-20 funcionários e quer escalar", a resposta tem que ser campo personalizado (filtrável em smart list) ou tag. Por isso cada pergunta classificatória da ficha virou um campo dedicado (prefixo "Ficha Imersão ·").

Campos personalizados preenchidos no contato do GHL
Os campos da ficha no contato: situação, funcionários, faturamento, maior desafio, como conheceu, interesse, ICP.
Mais campos personalizados
E o resto: lead score, segmento de atuação e meta dos 90 dias.
Oportunidade na pipeline do GHL
A oportunidade na pipeline, ligada ao contato, com o valor do estágio.

As tags são os gatilhos das automações

Cada estágio do funil marca uma tag no contato. São elas que disparam os Workflows do GHL (boas-vindas, recuperação):

Contato com tags no GHL
As tags ficam no topo do contato e dão o recorte do estágio no funil.
Armadilha que pegou a gente

O contacts/upsert do GHL substitui o conjunto de tags, não mescla. Se cada etapa mandasse a tag dentro do upsert, a ficha apagaria imersao-lead e imersao-comprou ao gravar imersao-aluno, e a pessoa sumiria dos gatilhos. A correção: gravar tag pelo endpoint aditivo POST /contacts/{id}/tags, nunca no corpo do upsert.

Recuperação + boas-vindas (Workflows do GHL)

Essas duas automações vivem dentro do GHL (Workflows), montadas por quem cuida do CRM. A integração só prepara o terreno: coloca o lead no estágio certo e as tags certas. Os Workflows reagem a isso.

Régua de recuperação (quem não comprou)

  1. Gatilho: oportunidade entra no estágio Lead · pop-up (ou ganha a tag imersao-lead).
  2. Espera 30 min. Se ainda não tem imersao-comprou → manda o link da oferta.
  3. Espera mais 30 min. Se ainda não comprou → manda mensagem com desconto no ingresso.
  4. Saída: assim que a tag imersao-comprou entra, a pessoa sai da régua (marcar "remove from workflow"), pra não receber desconto depois de já ter comprado.

As copys e o link de desconto estão organizados no painel do Miro da campanha.

Boas-vindas (quem comprou)

  1. Gatilho: tag imersao-comprou.
  2. Manda o vídeo/mensagem de boas-vindas + instruções + o link da ficha pré-aula.
  3. Quando a pessoa preenche a ficha, a integração avança ela pro estágio 3 e enriquece os campos (passo 3).

A conta (location) certa no GHL

Uma conta GHL de agência tem várias subcontas (locations). No caso da Comport havia três, com nomes parecidos e enganosos ("INATIVO", "Perfil Cleber", "Comport Ensino"). Gravar na errada = lead perdido. A regra: nunca confie no nome de cor, confirme pela API.

# Confirma o nome real da location pelo ID
curl https://services.leadconnectorhq.com/locations/<LOCATION_ID> \
  -H "Authorization: Bearer <TOKEN>" -H "Version: 2021-07-28"
# resposta: { "location": { "name": "Comport Ensino", ... } }  ← essa é a certa

Cada token (PIT) é amarrado a uma location. Token de uma subconta dá erro 403 em outra. Achar o par certo (location + token) é o primeiro passo antes de qualquer escrita.

Detalhes de implementação (pra quem mexe no código)

Contato com dedup (upsert)

Os três proxies fazem upsert: se a pessoa já existe (mesmo e-mail/telefone), atualiza; se não, cria. É o que garante uma oportunidade só por pessoa, mesmo passando por pop-up, compra e ficha.

POST /contacts/upsert
{ "locationId": "<LOCATION>", "firstName": "...", "lastName": "...",
  "email": "...", "phone": "+55...", "source": "...",
  "customFields": [...] }   // tags NÃO vão aqui (ver "tags são gatilhos")

Campos personalizados (criados por API)

Cada pergunta classificatória da ficha é um campo dedicado (prefixo "Ficha Imersão ·"), criado uma vez por API. O proxy converte o código do formulário pro rótulo exato da opção e manda no customFields do upsert.

POST /locations/<LOCATION>/customFields
{ "name": "Ficha Imersão · Funcionários", "dataType": "SINGLE_OPTIONS",
  "options": ["Trabalho sozinho(a)","De 1 a 5 pessoas","De 6 a 20 pessoas","Mais de 20 pessoas"] }
# tipos: SINGLE_OPTIONS, CHECKBOX (várias), NUMERICAL, TEXT, LARGE_TEXT

Oportunidade que só avança, nunca rebaixa

A oportunidade é criada uma vez (no estágio de entrada) e depois só avança. Antes de mover, o proxy compara o rank do estágio atual com o de destino: se já está igual ou à frente, não mexe. Anti-duplicata: busca por contact_id na pipeline antes de criar outra.

POST /opportunities/        # criar (estágio de entrada)
PUT  /opportunities/{id}    # avançar estágio / subir valor

Limite do Vercel: as 3 funções num dispatcher só

O plano Hobby do Vercel aceita no máximo 12 serverless functions. Pop-up, ficha e postback foram consolidados num único arquivo (/api/imersao?fn=popup|ficha|eduzz); as URLs antigas continuam funcionando por rewrites no vercel.json.

Testar de ponta a ponta

Testamos o funil inteiro com dados fake, e no fim apagamos o contato de teste pra não sujar a base. O caminho completo:

  1. Pop-up: dispara o lead → confere que caiu no estágio 1 (Lead), valor R$97, tag imersao-lead.
  2. Postback Eduzz (venda aprovada, mesmo e-mail): confere que avançou pro estágio 2 e ganhou imersao-comprou.
  3. Ficha (mesmo e-mail): confere que avançou pro estágio 3, valor subiu pra R$3.500, ganhou imersao-aluno e os campos.
  4. Confere que as 3 tags coexistem no contato (foi exatamente aqui que o bug de tag sobrescrita apareceu).
  5. Apaga o contato de teste.

Como resgatar depois pra uma ação segmentada

É aqui que a categorização paga. Como cada resposta é um campo filtrável, dá pra montar qualquer recorte e disparar só pra ele.

Exemplo: campanha só pra quem tem time de 6 a 20 pessoas e marcou "escalar o faturamento" como maior desafio.
  1. No GHL: Contatos → Listas inteligentes → Filtros.
  2. Filtro 1: Ficha Imersão · Funcionários é De 6 a 20 pessoas.
  3. Filtro 2 (E): Ficha Imersão · Maior desafio contém Escalar o faturamento.
  4. Salva como Smart List e usa como público do disparo (e-mail/WhatsApp).

Vale pra qualquer combinação: faturamento, segmento, interesse, ICP, origem. Salvou a lista, reusa quando quiser.

Armadilhas que a gente já pagou (não repita)

Lições

De quem é o quê

A integração (pop-up → CRM, postback do Eduzz, ficha, proxies, campos) é de quem cuida de tecnologia (Thiago). A estrutura do CRM e as automações são de quem cuida do CRM (Chardson): renomear os estágios da pipeline e montar os dois Workflows (recuperação e boas-vindas), que reagem às tags/estágios que a integração já entrega.

Estágios da pipeline "Além do Operacional" (renomear no GHL)

Os IDs dos estágios não mudam ao renomear, então a integração continua funcionando antes mesmo do rename. Recuperação não é estágio: é Workflow + tag. "Perdido" é o status lost da oportunidade.

Documento de apoio com o fluxo visual e os prints: siriuspetvet.com.br/imersao-ficha-fluxo/