Saltar para o conteúdo

Instala o SDK do browser

Instala o SDK uma única vez através do mecanismo global de scripts do teu framework. A tag abaixo destina-se a HTML simples.

Script do SDK<script async src="https://cdn.splendorize.com/splendorize.js" data-site="pub_YOUR_SITE_KEY" ></script>

Os frameworks gerem o head do documento. No Next.js App Router, usa next/script no layout raiz. Não renderizes um head personalizado nem injetes esta tag com dangerouslySetInnerHTML.

Next.js App Routerimport Script from "next/script"; <Script id="splendorize-analytics" src="https://cdn.splendorize.com/splendorize.js" data-site="pub_YOUR_SITE_KEY" strategy="afterInteractive" />

Se puderem ocorrer chamadas antes de o SDK carregar, copia na secção Tracking do teu projeto o loader personalizado que as coloca em fila de forma segura.

Abrir a Splendorize

Chama os dois métodos principais

window.splendorize.action("start_trial");

Uma ação ou decisão relevante do visitante.

window.splendorize.conversion("trial_started");

Um resultado concluído, apenas depois de a aplicação confirmar o sucesso.

Monitoriza ações

Usa JavaScript para comportamentos relevantes sem uma ativação DOM correspondente. Para links, botões, controlos e formulários, adiciona atributos HTML em vez disso.

Método JavaScript

Chama action()

Para comportamentos relevantes sem uma ativação equivalente no DOM.

JavaScript
window.splendorize.action(
  "change_billing_period",
  { placement: "pricing" },
);

Atributos HTML

Anota o elemento

Para links, botões, controlos e formulários. A Splendorize acompanha automaticamente o ciclo existente.

HTML
<a
  href="/signup"
  data-splendorize-action="start_trial"
  data-splendorize-action-placement="hero"
>
  Start trial
</a>

<form data-splendorize-action="request_demo">
  <!-- Existing fields and submit button -->
</form>

Os atributos HTML servem para ações, não para conversões.

Não existe o atributo data-splendorize-conversion. Usa conversion() depois de confirmar o resultado, ou a API de servidor quando o teu backend o confirmar.

Regras para as ações

  • Usa uma chave de propósito em minúsculas que comece por uma letra, contenha letras, números e underscores simples, e não ultrapasse 64 caracteres.
  • Reutiliza a mesma chave em vários posicionamentos. Anota um formulário uma única vez no próprio formulário e nunca adiciones uma chamada programática para o mesmo gesto.
  • Nunca cries chaves ou posicionamentos a partir do texto visível, do idioma, de dados do visitante, de IDs de conta, de timestamps ou de variantes de experiências.

Conversões no browser

Chama conversion apenas depois de o fluxo existente da aplicação comprovar o sucesso, por exemplo, após uma resposta bem-sucedida da API ou ao chegar a um estado que confirme o resultado.

Autoridade
Declarada no lado do cliente. Um posicionamento correto dá significado ao evento, mas o código do browser não pode fornecer a autoridade de um servidor autenticado.
Quando usar
Um registo, trial, entrada numa lista de espera ou pedido de demo foi realmente concluído e o browser é o único ponto disponível que confirma o sucesso. Nunca a chames no clique ou envio que inicia o processo.
Resultado confirmado no browser
const result = await startTrial();

if (result.trialStarted === true) {
  window.splendorize.conversion("trial_started");
}

API de servidor autenticada

Quando o teu backend controla a transação que confirma o sucesso, envia a conversão por POST para /v1/conversion com a chave privada do site. Os pedidos aceites devolvem 202. url é obrigatório e deve pertencer a um domínio permitido do projeto; name, occurredAt, referrer e os IDs de visitante, sessão e visualização de página são opcionais.

Autoridade
Proveniência autenticada ao nível do projeto. É mais forte do que uma declaração do browser, mas não comprova a identidade de uma pessoa.
Quando usar
O teu backend confirmou um resultado não relacionado com um pagamento. Mantém a chave privada no servidor e escolhe esta via em vez de emitir a mesma conversão no browser.
Pedido de conversão apenas no servidor
const response = await fetch("https://cdn.splendorize.com/v1/conversion", {
  method: "POST",
  headers: {
    authorization: "Bearer " + process.env.SPLENDORIZE_PRIVATE_SITE_KEY,
    "content-type": "application/json",
  },
  body: JSON.stringify({
    name: "trial_started",
    url: "https://example.com/welcome",
    occurredAt: new Date().toISOString(),
  }),
});

if (response.status !== 202) {
  throw new Error("Splendorize rejected the conversion");
}

Receita da Stripe

Liga a Stripe, recolhe stripeMetadata() depois de o SDK do browser carregar e valida no teu backend as chaves de atribuição suportadas. Para Checkout em modo de subscrição, anexa-as aos metadados da Checkout Session e da subscrição. Os eventos assinados invoice.payment_succeeded fornecem o montante bruto, a moeda e o momento do pagamento; os webhooks de reembolso e disputa ajustam o valor líquido, enquanto os webhooks de subscrição acrescentam sinais de cancelamento e churn. As faturas históricas não são importadas.

Autoridade
Comprovada pelo fornecedor para o estado da fatura paga, montante bruto, moeda e momento do pagamento. Os metadados da Splendorize ligam o percurso do visitante; não comprovam o pagamento.
Quando usar
Precisas de medir compras associadas a faturas da Stripe pagas com sucesso ou receita recorrente de subscrições. Não comuniques montantes fornecidos pelo browser nem emitas uma segunda conversão no browser apenas para reivindicar o mesmo pagamento.
Ligação de atribuição no browser
const attribution = window.splendorize.stripeMetadata();

await fetch("/api/checkout", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ attribution }),
});
Metadados de Checkout validados
const attribution = Object.fromEntries(
  [
    "splendorize_site_id",
    "splendorize_visitor_id",
    "splendorize_session_id",
    "splendorize_page_view_id",
  ].flatMap((key) => {
    const value = requestBody.attribution?.[key];
    return typeof value === "string" && value.length <= 120
      ? [[key, value]]
      : [];
  }),
);

await stripe.checkout.sessions.create({
  mode: "subscription",
  line_items,
  success_url,
  cancel_url,
  metadata: attribution,
  subscription_data: { metadata: attribution },
});

Referência do SDK

Chama estes métodos em window.splendorize. Com o loader personalizado, todos exceto stripeMetadata() podem ser colocados em fila antes de o SDK carregar.

action(actionKey, { placement? })
Regista uma ação estável baseada no propósito, com um posicionamento opcional. Não declara que um resultado foi concluído.
conversion(name?, properties?)
Regista uma conversão declarada no lado do cliente. Chama-a apenas depois de a aplicação confirmar o sucesso.
payment({ email })
Cria um hash do email de checkout para ligar o percurso atual do visitante. Nunca comprova o pagamento, o montante ou a receita.
stripeMetadata()Depois de o SDK carregar
Devolve os IDs de atribuição da Splendorize para anexar aos metadados da Stripe. Não comprova o pagamento.

O loader gerado também suporta comandos invocáveis como window.splendorize("action", "start_trial"). No código da aplicação, dá preferência aos métodos com nome acima, porque são mais fáceis de ler.

Checklist de privacidade e implementação

Mantém a implementação restrita e faz com que cada sinal signifique exatamente uma coisa.

  • Instala um único loader global e mantém o comportamento de consentimento e CSP do site.
  • Mantém a chave privada do site no servidor; a chave pública do site pode aparecer no código do browser.
  • Nunca envies valores de formulários, emails, nomes, números de telefone, IDs de clientes ou segredos nos metadados de ações ou conversões.
  • Emite uma única ação semântica por gesto e escolhe uma só fonte de referência para cada resultado.
  • Trata a atribuição de pagamentos como uma ligação de identidade, nunca como autorização ou prova de pagamento.

Usa a fonte mais próxima da verdade.

Começa pelas instruções de instalação personalizadas do teu projeto. A Splendorize mantém as ações, os resultados confirmados e a receita paga separados, para que os teus agentes raciocinem a partir de provas em vez de suposições.