Formulários suportados
O plugin captura submissões de qualquer formulário do seu site WordPress de duas formas:
- Integração server-side dedicada — pra Contact Form 7, WPForms, Gravity Forms e Elementor Pro. Mais robusta, captura mesmo se JS estiver desabilitado.
- Fallback JavaScript universal — pra HTML puro, plugins de form não suportados nativamente, builders custom.
Plugins com integração dedicada
Seção intitulada “Plugins com integração dedicada”Contact Form 7
Seção intitulada “Contact Form 7”- Hook:
wpcf7_submit— dispara em toda submissão validada, com ou sem e-mail.
- Identificador no CRM:
cf7-{form_id}(ex:cf7-12). - Nome no CRM:
CF7 — {título do formulário}. - Campos enviados: todos os campos do form. Campos internos do CF7 (
_wpcf7,_wpcf7_version,_wpcf7_locale,_wpcf7_unit_tag,_wpcf7_container_post,_wpcf7_posted_data_hash,_wpcf7_recaptcha_response) são removidos antes de enviar. - Campos multi-valor (checkbox, multi-select) são concatenados com vírgula.
WPForms
Seção intitulada “WPForms”- Hook:
wpforms_process_complete. - Identificador:
wpforms-{form_id}. - Nome:
WPForms — {form_title}. - Chave do campo: usa o
nameconfigurado em “Advanced Options” do campo. Se vazio, fallback prafield_{id}.
Gravity Forms
Seção intitulada “Gravity Forms”- Hook:
gform_after_submission(dispara após salvar entry). - Identificador:
gf-{form_id}. - Nome:
Gravity Forms — {form_title}. - Campos compostos (ex: Name com first/last) são concatenados com espaço.
Elementor Pro Forms
Seção intitulada “Elementor Pro Forms”- Hook:
elementor_pro/forms/new_record. - Identificador:
elementor-{slug_do_form_name}(ex: form chamado “Contato Site” viraelementor-contato-site). - Nome:
Elementor — {form_name}.
Fallback JavaScript universal
Seção intitulada “Fallback JavaScript universal”Pra formulários que não são de nenhum desses plugins (HTML puro, builders custom, plugins menos populares), o plugin usa um listener JS que escuta submits em qualquer form da página.
Como funciona
Seção intitulada “Como funciona”O JS adiciona um listener em capture phase:
document.addEventListener('submit', handler, true);Antes de enviar pro CRM, ele filtra:
Forms ignorados (não-leads):
#loginform(login WP)#registerform(cadastro WP)#lostpasswordform(recuperar senha)#commentform(comentários de post).search-form,[role="search"],.wp-block-search(busca)
Forms já tratados server-side (evita duplicação):
.wpcf7-form(Contact Form 7).wpforms-form(WPForms).gform_wrapper form(Gravity Forms).elementor-form(Elementor Pro)
Validação de “é um form de lead”:
O JS só envia se algum campo contém um e-mail ou um telefone (e-mail no formato [email protected]; telefone com 10 dígitos ou mais). Sem nenhum dos dois, ignora — evita enviar buscas, filtros e outros forms de utilidade que escaparam dos filtros acima.
Configurar seletor extra
Seção intitulada “Configurar seletor extra”Por padrão o JS monitora todos os submits (exceto os ignorados acima). Para limitar a formulários específicos, preencha Seletor CSS dos formulários em Configurações → app.smart CRM → Captura e proteção — por exemplo form.captura-de-lead, #form-orcamento. Vazio = todos.
Desativar o fallback
Seção intitulada “Desativar o fallback”Em Configurações → app.smart CRM → seção Captura e proteção, desmarque Captura JS Universal.
Útil se você quer só capturar via plugins dedicados e tem outros forms na página que não devem virar lead.
O identificador de quem cai no fallback
Seção intitulada “O identificador de quem cai no fallback”Formulário capturado pelo fallback não tem ID de plugin, então o identificador é derivado da página onde ele está: generic- mais um hash do endereço.
Como o plugin envia os dados
Seção intitulada “Como o plugin envia os dados”Pra toda submissão (dedicada ou fallback), o plugin envia:
{ "name": "Maria Silva", "phone": "+5511999998888", "fields": { "nome": "Maria Silva", "telefone": "+5511999998888", "interesse": "Plano Pro", "mensagem": "..." }, "metadata": { "utm_source": "google", "utm_campaign": "blackfriday", "gclid": "Cj0KCQ...", "click_ids": { "fbclid": "abc123", "gclid": "..." }, "landing_page": "https://seusite.com.br/promocao", "referrer": "https://google.com.br", "user_agent": "...", "locale": "pt_BR" }, "page_url": "https://seusite.com.br/contato", "form_identifier": "cf7-12", "form_name": "CF7 — Formulário de Contato"}Esse payload vira um contato + uma conversa no app.smart.
Mapeamento de campos
Seção intitulada “Mapeamento de campos”O plugin não tenta adivinhar quais campos são nome/email/telefone — ele envia todos os campos do formulário como atributos, com as chaves normalizadas (minúsculas, sem espaços nem caracteres especiais).
No app.smart, você configura o mapeamento uma vez em Forms → {seu form} → Mapear atributos:
| Campo do form (WP) | Atributo no CRM |
|---|---|
nome ou name | Nome do contato |
email | Email do contato |
telefone ou phone ou whatsapp | Telefone do contato |
mensagem | Mensagem da conversa |
interesse | Custom attribute “interesse” |
plano_desejado | Custom attribute “plano_desejado” |
Novos campos enviados pelo plugin são auto-criados como custom attributes na primeira submissão. Aí é só ir no app.smart e mapear/categorizar.
Anti-spam embutido
Seção intitulada “Anti-spam embutido”Toda submissão passa por honeypot automaticamente — o plugin injeta um campo escondido chamado smart2_hp_check em todo formulário. Humanos nunca veem nem preenchem; bots preenchem porque varrem o HTML.
Se o campo vier preenchido, a submissão é descartada silenciosamente (não é enviada pro CRM). Você pode desativar em Configurações → app.smart CRM → Honeypot anti-spam, mas recomenda-se manter ligado.
Em paralelo, há dois freios:
- Por IP: até 30 chamadas por minuto no endereço do plugin (formulário, WhatsApp e pré-coleta somados). Acima disso, HTTP 429 e a chamada não chega ao CRM. O IP é o real do visitante, mesmo atrás da Cloudflare.
- Por formulário e contato: o mesmo formulário com o mesmo e-mail/telefone em menos de 5 segundos é ignorado — é o clique duplo no botão Enviar.
Pré-coleta (lead parcial)
Seção intitulada “Pré-coleta (lead parcial)”Quem digita e-mail ou telefone e para vira lead parcial no CRM — contato sim, conversão não. É o que antes se chamava “captura de abandono”, e desde a 2.12 vem ligado por padrão, com o aviso no formulário. O modelo inteiro (o que sobe, o que não sobe, campos sensíveis, como desligar) está em LGPD e consentimento; o resumo técnico está no fim desta página.
Próximos passos
Seção intitulada “Próximos passos”- WhatsApp — botão e tracking — rastrear cliques em wa.me
- UTMs e atribuição — onde os click IDs entram
- LGPD e consentimento — banner de cookies, aviso no formulário e pré-coleta
Pré-coleta, etapas e “obrigado” (2.12)
Seção intitulada “Pré-coleta, etapas e “obrigado” (2.12)”- Pré-coleta: com e-mail ou telefone preenchido, o que já foi digitado sobe como lead parcial — veja LGPD e consentimento.
- Formulário em etapas: botão de avançar com
data-smart-step="etapa-1"envia a etapa ao CRM. A Meta só recebe a etapa que você marcar como conversão. - Captura universal (formulário HTML sem plugin): se o
<form>tiverdata-smart-thanks="#obrigado", o plugin segura o envio, espera o servidor confirmar e só então mostra o elemento#obrigado. Deu erro? A pessoa vê “não conseguimos enviar” — com o link do WhatsApp se houverdata-smart-whatsapp="https://wa.me/55…". Sem esses atributos, o formulário segue o fluxo normal dele e o envio vai em paralelo. - Nada se perde: envio que falha (CRM fora, rede) fica numa fila em disco e tenta de novo em 3 min, 30 min e 2 h. A tela Logs e diagnóstico mostra quantos estão pendentes.