Planos
[et_pb_section fb_built="1" fullwidth="on" admin_label="Header" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"] 01 · CABEÇALHO + MENU — só HTML ═══════════════════════════════════════════════════════════════ -->
Início Planos Comparar todos os planosPreços, simulação e contratação Não sei qual escolherResponda 2 perguntas e descubra Créditos pré-pagosUso pontual, sem mensalidade Assinatura mensalCréditos que acumulam Plano personalizadoAlto volume, API e atendimento VIP
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="Hero" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"] 02 · HERO — só HTML ═══════════════════════════════════════════════════════════════ --> Escolha a quantidade ideal e notifique com segurança jurídica. Três formas de contratar a AR Online: créditos avulsos para uso pontual, assinatura mensal para quem notifica todo mês e plano personalizado para operações de alto volume. Todos com Carimbo do Tempo ICP‑Brasil e dossiê de provas incluído.
Ver preços e simular Não sei qual escolher
Sem franquia mínima Compra 100% online Suporte por WhatsApp
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="Planos" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"] 03 · OS TRÊS PLANOS (com calculadora e checkout) — HTML + JS próprio Módulo AUTOCONTIDO: traz o próprio no fim do arquivo, no<!-- [et_pb_line_break_holder] --> mesmo padrão do módulo 03 da página de assinatura. As duas<!-- [et_pb_line_break_holder] --> calculadoras (créditos e assinatura) funcionam só com este módulo<!-- [et_pb_line_break_holder] --> colado — não dependem do arquivo 05.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> ⚠ Se um dia a calculadora for para o JS global, remova o <script><!-- [et_pb_line_break_holder] --> daqui: as duas cópias rodando juntas duplicam eventos no GTM.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> Copy e estrutura vindas de ar-online.com.br/loja/. A mecânica de<!-- [et_pb_line_break_holder] --> checkout é a mesma já usada na pré-paga e na assinatura:<!-- [et_pb_line_break_holder] --> · créditos → POST /loja/ · add-to-cart 176 · ar_bulk_mode=credits<!-- [et_pb_line_break_holder] --> · assinatura → POST /carrinho/ · add-to-cart 37761 · ar_bulk_mode=subscription<!-- [et_pb_line_break_holder] --> ═══════════════════════════════════════════════════════════════ --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><section id="planos"><!-- [et_pb_line_break_holder] -->
Escolha a quantidade ideal e aproveite a economia por volume. Quanto maior o volume, menor o preço por notificação. Simule abaixo e contrate na hora — ou fale com um especialista se a sua operação pedir algo sob medida.
Mais popular Uso pontual AR Créditos De 3 a 500 créditos · sem mensalidade a partir de R$ 3,89 por crédito · validade 12 meses
- 3 a 14 créditosR$ 4,97
- 15 a 49 créditosR$ 4,70
- 50 a 99 créditosR$ 4,19
- 100 a 500 créditosR$ 3,89
De quantos envios você precisa?
Investimento único R$ 209,50
R$ 4,19 por crédito
- Envio multiplataforma: e-mail, SMS e WhatsApp
- Carimbo do Tempo ICP-Brasil e dossiê de provas
- E-book de otimização de entrega
- Suporte prioritário
O preço unitário por faixa é calculado no servidor. --> Comprar 50 créditos Pagamento único, sem renovação automática. Os créditos ficam no Portal AR até o fim da validade.
Uso recorrente Assinatura mensal Entre 25 e 500 créditos/mês · apenas cartão de crédito a partir de R$ 3,00 por crédito · validade 24 meses
- 25 a 49 créditosR$ 4,00
- 50 a 99 créditosR$ 3,80
- 100 a 149 créditosR$ 3,70
- 150 a 249 créditosR$ 3,60
- 250 a 500 créditosR$ 3,00
Quantos envios por mês?
Total mensal R$ 370,00 /mês
R$ 3,70 por crédito · economia de 12%
- Envio multiplataforma: e-mail, SMS e WhatsApp
- Créditos acumulativos — o que não usar fica para o mês seguinte
- Renovação automática no cartão
- Cancele quando quiser
sobrescreve o preço pela quantidade e o WC Asaas cria a assinatura mensal depois do pagamento. --> Assinar 100 créditos/mês A assinatura é finalizada sozinha no carrinho, separada de outras compras.
Operação sob medida Plano personalizado Acima de 500 créditos/mês · faturamento pós-pago Precisa de volume maior ou condições especiais? Criamos um plano sob medida para o seu negócio.
AR-Email AR-SMS AR-WhatsApp AR-Voz AR-Cartas
- Volume customizado de créditos
- Condições comerciais exclusivas
- Integração via API ou SFTP e envio em lote
- Homologação de domínio próprio
- Múltiplos usuários e customização
- Envio prioritário
- Suporte dedicado, com grupo de WhatsApp
Falar com especialista Preencher formulário comercial Retorno de um especialista em horário útil — não de um robô.
Ainda em dúvida? Responda 2 perguntas e a gente indica o plano certo — ou compare em detalhe os créditos pré-pagos, a assinatura mensal e o plano personalizado.
<!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] --> "use strict";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> var brl = new Intl.NumberFormat("pt-BR", {style:"currency", currency:"BRL"});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* Cada calculadora é a mesma coisa com dados diferentes, então em vez<!-- [et_pb_line_break_holder] --> de duplicar o código montamos uma só e chamamos duas vezes. */<!-- [et_pb_line_break_holder] --> function montar(cfg){<!-- [et_pb_line_break_holder] --> var qty = document.getElementById(cfg.qty);<!-- [et_pb_line_break_holder] --> var range = document.getElementById(cfg.range);<!-- [et_pb_line_break_holder] --> var total = document.getElementById(cfg.total);<!-- [et_pb_line_break_holder] --> var unit = document.getElementById(cfg.unit);<!-- [et_pb_line_break_holder] --> var cart = document.getElementById(cfg.cart);<!-- [et_pb_line_break_holder] --> var btnQty = document.getElementById(cfg.btnQty);<!-- [et_pb_line_break_holder] --> var save = cfg.save ? document.getElementById(cfg.save) : null;<!-- [et_pb_line_break_holder] --> var linhas = document.querySelectorAll("#" + cfg.tiers + " li");<!-- [et_pb_line_break_holder] --> var botao = document.getElementById(cfg.btn);<!-- [et_pb_line_break_holder] --> if(!qty || !range) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> function faixaDe(n){<!-- [et_pb_line_break_holder] --> for(var i = 0; i < cfg.tiers_data.length; i++){<!-- [et_pb_line_break_holder] --> var t = cfg.tiers_data[i];<!-- [et_pb_line_break_holder] --> if(n >= t.min && n <= t.max) return t;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> return cfg.tiers_data[cfg.tiers_data.length - 1];<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> function preencherTrilha(){<!-- [et_pb_line_break_holder] --> var min = parseFloat(range.min) || 0, max = parseFloat(range.max) || 100;<!-- [et_pb_line_break_holder] --> var pct = ((parseFloat(range.value) - min) / (max - min)) * 100;<!-- [et_pb_line_break_holder] --> range.style.setProperty("--fill-pct", pct + "%");<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> function atualizar(n){<!-- [et_pb_line_break_holder] --> n = Math.max(cfg.min, Math.min(cfg.max, Math.round(n) || cfg.min));<!-- [et_pb_line_break_holder] --> qty.value = n; range.value = n;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> var t = faixaDe(n);<!-- [et_pb_line_break_holder] --> total.innerHTML = brl.format(n * t.price) + (cfg.sufixo || "");<!-- [et_pb_line_break_holder] --> unit.textContent = brl.format(t.price);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> linhas.forEach(function(li){<!-- [et_pb_line_break_holder] --> li.classList.toggle("active",<!-- [et_pb_line_break_holder] --> n >= +li.getAttribute("data-min") && n <= +li.getAttribute("data-max"));<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> if(save){<!-- [et_pb_line_break_holder] --> var economia = Math.round((1 - t.price / cfg.refPrice) * 100);<!-- [et_pb_line_break_holder] --> save.textContent = economia > 0 ? "economia de " + economia + "% vs. avulso" : "";<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> if(cart) cart.value = n;<!-- [et_pb_line_break_holder] --> if(btnQty) btnQty.textContent = n;<!-- [et_pb_line_break_holder] --> preencherTrilha();<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* O range acompanha ao vivo; o campo numérico só ajusta no "change".<!-- [et_pb_line_break_holder] --> Com "input", o clamp do mínimo dispara a cada tecla e embaralha a<!-- [et_pb_line_break_holder] --> digitação de valores maiores (digitar "250" viraria "2" → 25). */<!-- [et_pb_line_break_holder] --> qty.addEventListener("change", function(){ atualizar(qty.value); });<!-- [et_pb_line_break_holder] --> range.addEventListener("input", function(){ atualizar(range.value); });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* Trava: se o "change" não disparou (o visitante digita e clica<!-- [et_pb_line_break_holder] --> direto no botão), o campo oculto ainda estaria com o valor antigo<!-- [et_pb_line_break_holder] --> e o carrinho receberia quantidade diferente da simulada. */<!-- [et_pb_line_break_holder] --> var form = botao ? botao.closest("form") : null;<!-- [et_pb_line_break_holder] --> if(form){<!-- [et_pb_line_break_holder] --> form.addEventListener("submit", function(){<!-- [et_pb_line_break_holder] --> var n = Math.max(cfg.min, Math.min(cfg.max, Math.round(+qty.value) || cfg.min));<!-- [et_pb_line_break_holder] --> if(cart) cart.value = n;<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> if(botao){<!-- [et_pb_line_break_holder] --> botao.addEventListener("click", function(){<!-- [et_pb_line_break_holder] --> var n = +qty.value, t = faixaDe(n);<!-- [et_pb_line_break_holder] --> window.dataLayer = window.dataLayer || [];<!-- [et_pb_line_break_holder] --> window.dataLayer.push({<!-- [et_pb_line_break_holder] --> event: cfg.evento,<!-- [et_pb_line_break_holder] --> creditos: n,<!-- [et_pb_line_break_holder] --> preco_unitario: t.price,<!-- [et_pb_line_break_holder] --> valor_total: +(n * t.price).toFixed(2),<!-- [et_pb_line_break_holder] --> faixa: t.min + "-" + t.max<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> atualizar(cfg.inicial);<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> function init(){<!-- [et_pb_line_break_holder] --> montar({<!-- [et_pb_line_break_holder] --> tiers:"crTiers", qty:"crQty", range:"crRange", total:"crTotal", unit:"crUnit",<!-- [et_pb_line_break_holder] --> cart:"crCartQty", btn:"crCheckout", btnQty:"crCheckoutQty",<!-- [et_pb_line_break_holder] --> min:3, max:500, inicial:50, evento:"begin_checkout_creditos",<!-- [et_pb_line_break_holder] --> tiers_data:[<!-- [et_pb_line_break_holder] --> {min:3, max:14, price:4.97},<!-- [et_pb_line_break_holder] --> {min:15, max:49, price:4.70},<!-- [et_pb_line_break_holder] --> {min:50, max:99, price:4.19},<!-- [et_pb_line_break_holder] --> {min:100, max:500, price:3.89}<!-- [et_pb_line_break_holder] --> ]<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> montar({<!-- [et_pb_line_break_holder] --> tiers:"asTiers", qty:"asQty", range:"asRange", total:"asTotal", unit:"asUnit",<!-- [et_pb_line_break_holder] --> cart:"asCartQty", btn:"asCheckout", btnQty:"asCheckoutQty", save:"asSave",<!-- [et_pb_line_break_holder] --> min:25, max:500, inicial:100, evento:"begin_checkout_assinatura",<!-- [et_pb_line_break_holder] --> sufixo:"<small> /mês</small>",<!-- [et_pb_line_break_holder] --> refPrice:4.97, /* referência para a economia: menor preço do avulso na 1ª faixa */<!-- [et_pb_line_break_holder] --> tiers_data:[<!-- [et_pb_line_break_holder] --> {min:25, max:49, price:4.00},<!-- [et_pb_line_break_holder] --> {min:50, max:99, price:3.80},<!-- [et_pb_line_break_holder] --> {min:100, max:149, price:3.70},<!-- [et_pb_line_break_holder] --> {min:150, max:249, price:3.60},<!-- [et_pb_line_break_holder] --> {min:250, max:500, price:3.00}<!-- [et_pb_line_break_holder] --> ]<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> if(document.readyState === "loading"){<!-- [et_pb_line_break_holder] --> document.addEventListener("DOMContentLoaded", init);<!-- [et_pb_line_break_holder] --> } else {<!-- [et_pb_line_break_holder] --> init();<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] -->[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="FAQ" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"] 04 · PERGUNTAS RÁPIDAS — só HTML ═══════════════════════════════════════════════════════════════ -->
Dúvidas antes de contratar.
Qual a diferença entre créditos avulsos e assinatura? Os créditos avulsos são uma compra única, sem mensalidade: você compra quando precisa e usa dentro da validade de 12 meses. A assinatura mensal renova sozinha no cartão, tem preço unitário menor (a partir de R$ 3,00) e os créditos não usados acumulam, com validade de 24 meses. Se você notifica todo mês, a assinatura sai mais barata. O que é 1 crédito? Um crédito equivale ao envio de uma notificação por um único canal — AR-Email, AR-SMS ou AR-WhatsApp. Notificar a mesma pessoa por dois canais consome dois créditos, e cada tentativa gera prova própria. Os créditos que não uso no mês se perdem? Não. Na assinatura, o que não for usado acumula para os meses seguintes, respeitando a validade de 24 meses. Nos créditos avulsos, valem por 12 meses a partir da compra. Posso mudar de faixa ou de plano depois? Pode. Na assinatura, a faixa se ajusta ao volume que você contratar — e você cancela quando quiser, sem multa. Para migrar de avulso para assinatura (ou para o plano personalizado), fale com a gente pelo WhatsApp que fazemos a transição sem perder os créditos que você já tem. Como funciona o pagamento? Os créditos avulsos aceitam os meios de pagamento da loja, em cobrança única. A assinatura mensal é exclusivamente por cartão de crédito, com renovação automática. O plano personalizado é faturado (pós-pago), com condições combinadas com o time comercial. E se eu precisar de mais de 500 envios por mês? Aí o caminho é o plano personalizado: volume sob medida, canais AR-Voz e AR-Cartas, integração via API ou SFTP, homologação de domínio e condições comerciais exclusivas. A notificação tem validade jurídica? Sim. Cada etapa do envio é autenticada com Carimbo do Tempo ICP-Brasil e reunida num dossiê de provas, pronto para auditorias, reguladores e processos — em todos os planos, sem custo extra.
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="Rodape" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"] 08 · RODAPÉ — só HTML Se o rodapé do tema Divi já estiver ativo, desative-o nesta página (Configurações de Página > modelo "Em branco"). ═══════════════════════════════════════════════════════════════ -->
AR ONLINE TECNOLOGIA LTDA · CNPJ 37.459.079/0001-23 · Rua Inácio Higino, 673, Sala 816 — Praia da Costa, Vila Velha/ES +55 (11) 4200-7766 · Contato
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="JS Global" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"] 06 · JAVASCRIPT GLOBAL — PÁGINA PLANOS (/planos) Colar no ÚLTIMO módulo Código da página. Faz funcionar: · repasse de UTMs (persistido em sessionStorage) nos links internos e no POST dos dois formulários de compra · CTAs .js-open-wa abrindo o popup do WhatsApp, com o href wa.me servindo de fallback se o widget não estiver na página · tracking de cliques (GTM/GA4) · menu hambúrguer mobile ⚠ As DUAS calculadoras (créditos e assinatura) NÃO estão aqui. Elas vivem dentro do próprio módulo 03 (03-planos.txt), que é autocontido. Se trouxer para cá, remova o de lá.<!-- [et_pb_line_break_holder] --> ═══════════════════════════════════════════════════════════════ --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] --> "use strict";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ═══ repasse de UTMs ═══════════════════════════════════════════<!-- [et_pb_line_break_holder] --> Sem isto a campanha de origem morre no meio do funil: os links<!-- [et_pb_line_break_holder] --> internos são absolutos ("/assinatura/") e o botão de compra é um<!-- [et_pb_line_break_holder] --> POST para uma URL limpa — o carrinho chega sem nenhuma UTM.<!-- [et_pb_line_break_holder] --> Cobre os dois casos: links internos e o action do formulário. */<!-- [et_pb_line_break_holder] --> var UTM_KEYS = ["utm_source","utm_medium","utm_campaign","utm_id",<!-- [et_pb_line_break_holder] --> "utm_term","utm_content","gclid","fbclid"];<!-- [et_pb_line_break_holder] --> /* As UTMs vivem na URL só na primeira página da visita. A partir da<!-- [et_pb_line_break_holder] --> segunda (e no POST do formulário/carrinho) elas sumiam — por isso o<!-- [et_pb_line_break_holder] --> lead chegava no CRM sem origem. Agora a primeira ocorrência é<!-- [et_pb_line_break_holder] --> gravada em sessionStorage e reaproveitada em toda a navegação. */<!-- [et_pb_line_break_holder] --> var UTM_STORE = "arOnlineUtms";<!-- [et_pb_line_break_holder] --> var UTMS = (function(){<!-- [et_pb_line_break_holder] --> var src = new URLSearchParams(window.location.search), out = {}, has = false;<!-- [et_pb_line_break_holder] --> UTM_KEYS.forEach(function(k){<!-- [et_pb_line_break_holder] --> var v = src.get(k);<!-- [et_pb_line_break_holder] --> if(v){ out[k] = v; has = true; }<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> try{<!-- [et_pb_line_break_holder] --> if(has){<!-- [et_pb_line_break_holder] --> sessionStorage.setItem(UTM_STORE, JSON.stringify(out));<!-- [et_pb_line_break_holder] --> }else{<!-- [et_pb_line_break_holder] --> var saved = JSON.parse(sessionStorage.getItem(UTM_STORE) || "null");<!-- [et_pb_line_break_holder] --> if(saved && Object.keys(saved).length){ out = saved; has = true; }<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> }catch(e){ /* modo privado / storage bloqueado: segue só com a URL */ }<!-- [et_pb_line_break_holder] --> return has ? out : null;<!-- [et_pb_line_break_holder] --> })();<!-- [et_pb_line_break_holder] --> /* exposto para os outros módulos da página (ex.: formulário comercial) */<!-- [et_pb_line_break_holder] --> window.arOnlineUtms = UTMS || {};<!-- [et_pb_line_break_holder] --> function withUtms(raw){<!-- [et_pb_line_break_holder] --> try{<!-- [et_pb_line_break_holder] --> var u = new URL(raw, window.location.origin);<!-- [et_pb_line_break_holder] --> if(u.origin !== window.location.origin) return raw; /* não mexe em link externo */<!-- [et_pb_line_break_holder] --> Object.keys(UTMS).forEach(function(k){<!-- [et_pb_line_break_holder] --> if(!u.searchParams.has(k)) u.searchParams.set(k, UTMS[k]);<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> return u.href;<!-- [et_pb_line_break_holder] --> }catch(e){ return raw; }<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> function forwardUtms(){<!-- [et_pb_line_break_holder] --> if(!UTMS) return;<!-- [et_pb_line_break_holder] --> document.querySelectorAll('a[href]').forEach(function(a){<!-- [et_pb_line_break_holder] --> var h = a.getAttribute("href");<!-- [et_pb_line_break_holder] --> if(!h || h.charAt(0) === "#") return; /* âncora da própria página */<!-- [et_pb_line_break_holder] --> a.setAttribute("href", withUtms(h));<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> document.querySelectorAll('form[action]').forEach(function(f){<!-- [et_pb_line_break_holder] --> f.setAttribute("action", withUtms(f.getAttribute("action")));<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> function init(){<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> forwardUtms();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* O forwardUtms() acima só alcança o que já existe no DOM. O Divi e<!-- [et_pb_line_break_holder] --> alguns widgets injetam links depois — este ouvinte, em captura,<!-- [et_pb_line_break_holder] --> completa o href no instante do clique, antes da navegação. */<!-- [et_pb_line_break_holder] --> document.addEventListener("click", function(e){<!-- [et_pb_line_break_holder] --> if(!UTMS || !e.target || !e.target.closest) return;<!-- [et_pb_line_break_holder] --> var a = e.target.closest("a[href]");<!-- [et_pb_line_break_holder] --> if(!a) return;<!-- [et_pb_line_break_holder] --> var h = a.getAttribute("href");<!-- [et_pb_line_break_holder] --> if(!h || h.charAt(0) === "#") return;<!-- [et_pb_line_break_holder] --> var nh = withUtms(h);<!-- [et_pb_line_break_holder] --> if(nh !== h) a.setAttribute("href", nh);<!-- [et_pb_line_break_holder] --> }, true);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ── CTAs que abrem o popup de WhatsApp (.js-open-wa) ──────────────<!-- [et_pb_line_break_holder] --> O widget flutuante é injetado pelo WordPress, fora do Divi. Testamos<!-- [et_pb_line_break_holder] --> em ordem os seletores conhecidos do botão principal; se nenhum<!-- [et_pb_line_break_holder] --> existir (widget desativado, bloqueado por adblock, script ainda não<!-- [et_pb_line_break_holder] --> carregado), o próprio href do link — um wa.me completo — segue como<!-- [et_pb_line_break_holder] --> fallback e o clique não se perde. */<!-- [et_pb_line_break_holder] --> var WA_SELECTORS = [<!-- [et_pb_line_break_holder] --> "#wppMainBtn",<!-- [et_pb_line_break_holder] --> ".wpp-main-btn", ".wpp-btn-main", "#wpp-main-btn",<!-- [et_pb_line_break_holder] --> ".joinchat__button", ".joinchat .joinchat__button",<!-- [et_pb_line_break_holder] --> ".chaty-main-btn", "#chaty-widget-0 .chaty-btn-wrap",<!-- [et_pb_line_break_holder] --> ".ht-ctc-chat", ".wa__button", ".wa-chat-box-toggle"<!-- [et_pb_line_break_holder] --> ];<!-- [et_pb_line_break_holder] --> function findWaWidget(){<!-- [et_pb_line_break_holder] --> for(var i = 0; i < WA_SELECTORS.length; i++){<!-- [et_pb_line_break_holder] --> var el = document.querySelector(WA_SELECTORS[i]);<!-- [et_pb_line_break_holder] --> /* offsetParent é null em elementos position:fixed — usamos<!-- [et_pb_line_break_holder] --> getClientRects() para saber se o botão está de fato na tela */<!-- [et_pb_line_break_holder] --> if(el && el.getClientRects().length) return el;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> return null;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> document.querySelectorAll(".js-open-wa").forEach(function(a){<!-- [et_pb_line_break_holder] --> a.addEventListener("click", function(e){<!-- [et_pb_line_break_holder] --> window.dataLayer = window.dataLayer || [];<!-- [et_pb_line_break_holder] --> window.dataLayer.push({<!-- [et_pb_line_break_holder] --> event: "abrir_whatsapp",<!-- [et_pb_line_break_holder] --> origem: a.getAttribute("data-qual") || "",<!-- [et_pb_line_break_holder] --> rotulo: (a.textContent || "").trim().slice(0, 60)<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> var w = findWaWidget();<!-- [et_pb_line_break_holder] --> if(!w) return; /* sem widget: usa o href wa.me */<!-- [et_pb_line_break_holder] --> e.preventDefault();<!-- [et_pb_line_break_holder] --> /* stopPropagation e obrigatorio: o widget fecha o popup quando um<!-- [et_pb_line_break_holder] --> clique chega ao document vindo de fora dele. Sem esta linha, o<!-- [et_pb_line_break_holder] --> proprio clique que abre o popup continua subindo, o widget<!-- [et_pb_line_break_holder] --> entende como "clicou fora" e fecha na mesma hora - parecia que<!-- [et_pb_line_break_holder] --> o botao nao fazia nada. */<!-- [et_pb_line_break_holder] --> e.stopPropagation();<!-- [et_pb_line_break_holder] --> var target = w.matches("a,button") ? w : (w.querySelector("a,button") || w);<!-- [et_pb_line_break_holder] --> target.click();<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ── tracking GTM/GA4 ── */<!-- [et_pb_line_break_holder] --> window.dataLayer = window.dataLayer || [];<!-- [et_pb_line_break_holder] --> document.querySelectorAll("a[href]").forEach(function(a){<!-- [et_pb_line_break_holder] --> a.addEventListener("click", function(){<!-- [et_pb_line_break_holder] --> window.dataLayer.push({event:"planos_click", destino:a.href, rotulo:(a.textContent||"").trim().slice(0,60)});<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ── menu mobile (hambúrguer) ── */<!-- [et_pb_line_break_holder] --> var t = document.getElementById('navToggle'), n = document.getElementById('navLinks');<!-- [et_pb_line_break_holder] --> if(t && n){<!-- [et_pb_line_break_holder] --> function closeNav(){<!-- [et_pb_line_break_holder] --> n.classList.remove('open');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-expanded','false');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-label','Abrir menu');<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> t.addEventListener('click', function(){<!-- [et_pb_line_break_holder] --> var open = n.classList.toggle('open');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-expanded', open ? 'true' : 'false');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-label', open ? 'Fechar menu' : 'Abrir menu');<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> n.addEventListener('click', function(e){ if(e.target.closest('a')) closeNav(); });<!-- [et_pb_line_break_holder] --> document.addEventListener('keydown', function(e){ if(e.key === 'Escape') closeNav(); });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> if(document.readyState === "loading"){<!-- [et_pb_line_break_holder] --> document.addEventListener("DOMContentLoaded", init);<!-- [et_pb_line_break_holder] --> } else {<!-- [et_pb_line_break_holder] --> init();<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] -->[/et_pb_fullwidth_code][/et_pb_section]
