Pular para o conteúdo

Formulários suportados

O plugin captura submissões de qualquer formulário do seu site WordPress de duas formas:

  1. Integração server-side dedicada — pra Contact Form 7, WPForms, Gravity Forms e Elementor Pro. Mais robusta, captura mesmo se JS estiver desabilitado.
  2. Fallback JavaScript universal — pra HTML puro, plugins de form não suportados nativamente, builders custom.
  • 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.
  • Hook: wpforms_process_complete.
  • Identificador: wpforms-{form_id}.
  • Nome: WPForms — {form_title}.
  • Chave do campo: usa o name configurado em “Advanced Options” do campo. Se vazio, fallback pra field_{id}.
  • 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.
  • Hook: elementor_pro/forms/new_record.
  • Identificador: elementor-{slug_do_form_name} (ex: form chamado “Contato Site” vira elementor-contato-site).
  • Nome: Elementor — {form_name}.

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.

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.

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.

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.

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.

Pra toda submissão (dedicada ou fallback), o plugin envia:

{
"name": "Maria Silva",
"email": "[email protected]",
"phone": "+5511999998888",
"fields": {
"nome": "Maria Silva",
"email": "[email protected]",
"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.

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 nameNome do contato
emailEmail do contato
telefone ou phone ou whatsappTelefone do contato
mensagemMensagem da conversa
interesseCustom attribute “interesse”
plano_desejadoCustom 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.

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.

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é-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> tiver data-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 houver data-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.