Visão geral
O Web Server-to-Server (Web S2S) envia eventos de conversão e engajamento da web para o Singular diretamente
do seu servidor, usando o mesmo endpoint EVENT da integração móvel V1. O caminho da web é
diferenciado pelo parâmetro de plataforma
p=Web
.
O Web S2S é uma
arquitetura assistida pelo navegador
. Vários valores relevantes para atribuição
estão disponíveis apenas no navegador —
location.href
,
document.referrer
e o
userAgent
do navegador não podem ser reconstruídos no backend. Um trecho de código leve no lado do cliente precisa coletar esses valores e
chamar o endpoint diretamente ou encaminhá-los para o seu backend, que então faz a chamada S2S.
Não há
endpoint SESSION da web
. O primeiro evento de conversão
__PAGE_VISIT__
substitui a chamada
launch
móvel e estabelece a linha de base de atribuição para a visita.
O Web S2S compartilha as convenções de autenticação, codificação e parâmetros comuns com o restante da suíte S2S. Consulte o hub de S2S Fundamentals e a referência do endpoint EVENT .
Endpoint
O Web S2S usa o mesmo host e caminho do endpoint EVENT móvel V1. Defina
p=Web
para rotear a requisição pelo caminho de atribuição da web.
GET https://s2s.singular.net/api/v1/evt
Geração e persistência do SDID
O ID de dispositivo do Singular (
sdid
) vincula todos os eventos de um navegador a um
único dispositivo web. No primeiro carregamento da página, se nenhum
global_singular_id
existir
no
localStorage
, gere um UUID v4 e armazene-o. Reutilize o mesmo valor
como
sdid
em todos os eventos daquele navegador até que o
localStorage
seja limpo.
Se o Web SDK estiver presente na página, reutilize o valor que ele já definiu em
global_singular_id
em vez de gerar um novo.
function getOrCreateSDID() {
var KEY = 'global_singular_id';
var sdid = localStorage.getItem(KEY);
if (!sdid) {
sdid = crypto.randomUUID(); // UUID v4
localStorage.setItem(KEY, sdid);
}
return sdid;
}
O padrão __PAGE_VISIT__
O primeiro evento de qualquer nova visita DEVE ser
__PAGE_VISIT__
com
conversion_event=true
. Isso estabelece a linha de base de atribuição que
os eventos posteriores herdam.
Envie um novo
__PAGE_VISIT__
com
conversion_event=true
sempre que o mesmo navegador retornar de uma
campanha diferente
(UTM ou parceiro diferente). Reutilize o mesmo
sdid
e envie o
__PAGE_VISIT__
antes de
quaisquer outros eventos daquela visita.
Eventos de não conversão (por exemplo
sng_registration_complete
ou
sng_purchase
) usam
conversion_event=false
e
omitem
attribution_data
. Eles herdam a atribuição do
__PAGE_VISIT__
mais recente.
Um evento de não conversão que chega antes do seu evento de conversão é adiado por um minuto enquanto o backend aguarda uma correspondência.
Regras de custom_user_id
-
Inclua
custom_user_idapós o registro ou login, e em todos os eventos subsequentes. -
Persista-o no
localStorageou em um cookie de primeira parte. - Remova-o no logout.
- Nunca inclua PII. Use um ID interno ou com hash.
Parâmetros
O Web SDK envia aproximadamente 40 parâmetros no
__PAGE_VISIT__
, mas a maioria é
telemetria interna do SDK que os desenvolvedores de S2S não devem replicar. As tabelas abaixo cobrem apenas os conjuntos obrigatórios
e recomendados.
A autenticação (
a
) e outras convenções compartilhadas estão documentadas uma vez no
hub. Consulte
Common
Parameters em S2S Fundamentals
.
Parâmetros obrigatórios
| Parâmetro | Detalhes |
|---|---|
a
|
Chave de API do Singular do seu dashboard. Consulte Common Parameters .
Exemplo:
|
p
|
Plataforma. Sempre
Exemplo:
|
i
|
Bundle ID do app/site web no Singular. Deve corresponder ao Product ID do Web SDK. Encontre-o em Settings > Apps > expanda o app web > Bundle ID.
Exemplo:
|
n
|
Nome do evento. O primeiro evento de uma visita deve ser
Exemplo:
|
sdid
|
ID de dispositivo do Singular. Use o mesmo valor definido pelo Web SDK
(
Exemplo:
|
conversion_event
|
Defina
Exemplo:
|
attribution_data
|
Dados de click-through de ad networks, JSON codificado em URL. Obrigatório em
Exemplo:
|
custom_user_id
|
Seu ID de usuário interno. Sem PII. Inclua após o registro/login e em eventos subsequentes; remova no logout.
Exemplo:
|
ip
|
IP do dispositivo no momento do evento.
Exemplo:
|
web_url
|
A URL da landing page de conversão, incluindo seus parâmetros de marketing. Esta é a última URL
que continha parâmetros de marketing, armazenada como o SDID e reutilizada. É usada pelo backend para
criar o touchpoint de atribuição. Distinta de
Exemplo:
|
Parâmetros recomendados
| Parâmetro | Detalhes |
|---|---|
device_user_agent
|
O user agent do navegador (
Exemplo:
|
web_page_referrer
|
O referrer da página atual (
Exemplo:
|
timezone
|
O fuso horário do dispositivo.
Exemplo:
|
os
|
O sistema operacional do dispositivo.
Exemplo:
|
screen_width
|
Largura da tela em pixels.
Exemplo:
|
screen_height
|
Altura da tela em pixels.
Exemplo:
|
utime
|
Horário do evento em tempo UNIX (segundos).
Exemplo:
|
Parâmetros de URL e referrer — não confunda.
web_url
e
web_page_referrer
são
relevantes para atribuição e são usados pelo pipeline.
web_page_url
(a
página atual,
window.location.href
) e
document_referrer
são
apenas para event-logging
e são
descartados silenciosamente para atribuição. Não envie
web_page_url
ou
document_referrer
esperando que afetem a atribuição.
Para identidade de dispositivo e outros parâmetros compartilhados não listados acima, consulte Common Parameters em S2S Fundamentals em vez de redocumentá-los aqui.
attribution_data
O parâmetro
attribution_data
carrega dados de click-through de ad
networks como JSON codificado em URL. Envie-o somente em eventos de conversão
__PAGE_VISIT__
.
{
"partner_name": "Snapchat",
"is_attributed": "true",
"touch_timestamp": "",
"partner_campaign_id": "",
"partner_campaign_name": "Snap_campaign_1234",
"partner_creative_id": "",
"partner_creative_name": "",
"partner_keyword": "",
"partner_site": "",
"partner_site_id": "",
"partner_site_name": "",
"partner_sub_site": "",
"partner_sub_site_name": "",
"partner_subcampaign_id": "",
"partner_subcampaign_name": "",
"_p": ""
}
Campos obrigatórios
| Campo | Detalhes |
|---|---|
partner_name
|
Mapeado a partir do parâmetro web
Exemplo:
|
is_attributed
|
Defina
Exemplo:
|
partner_campaign_name
|
Mapeado a partir do parâmetro web
Exemplo:
|
Campos opcionais
| Campo | Detalhes |
|---|---|
touch_timestamp
|
Horário do touchpoint em segundos UNIX.
Exemplo:
|
partner_campaign_id
|
Mapeado a partir do parâmetro web
|
partner_creative_id
|
Mapeado a partir do parâmetro web
|
partner_creative_name
|
Mapeado a partir do parâmetro web
|
partner_keyword
|
Mapeado a partir do parâmetro web
|
partner_site_id
|
Mapeado a partir do parâmetro web
|
partner_site_name
|
Mapeado a partir do parâmetro web
|
partner_sub_site_name
|
Mapeado a partir do parâmetro web
|
partner_subcampaign_id
|
Mapeado a partir do parâmetro web
|
partner_subcampaign_name
|
Mapeado a partir do parâmetro web
|
IDs de clique da web no parâmetro e
Suporte a Conversion API de parceiros: Para encaminhar esses eventos aos parceiros de redes de anúncios por meio das integrações de Conversion API da Singular, inclua os atributos de evento opcionais padrão (dados próprios com hash, como eventId e ehash). Consulte Atributos de evento padrão para integrações de Conversion API.
Passe os IDs de clique da network no payload
e
do evento usando a chave JSON que cada
parceiro espera:
| Parceiro | Chave(s) do Click ID |
|---|---|
| Snapchat |
ScCid
|
| TikTok |
ttclid
|
gclid
,
gbraid
,
wbraid
|
|
| DV360 |
dclid
|
fbclid
|
|
rdt_uuid
|
Detecção de parâmetros de marketing.
Trate uma landing URL como um touchpoint quando ela contiver
qualquer um de:
utm_*
; Singular
wp*
(
wpsrc
,
wpcn
,
wpcid
e similares); Singular
pc*
/
p*
(
pcid
,
pcn
,
psrc
e similares);
clid
; ou
kw
/
an
/
ud
. Em uma correspondência, armazene a URL completa como
web_url
e dispare um evento de conversão.
Atribuição web-to-app
Para levar o contexto de campanha da web para um clique móvel, crie um Singular Link a partir da sua landing page e anexe a query string de landing capturada. Isso encaminha os parâmetros de marketing para o clique móvel para que a instalação do app possa ser atribuída.
Ao chegar na landing page, capture
window.location.search
(mais o fragmento) quando ela
contiver parâmetros de marketing e persista-o. Ao renderizar o link da app store ou do smart banner, construa:
function buildWebToAppLink(baseLink, webUrl, deeplink, passthrough, deferredDeeplink) {
var url = new URL(baseLink); // preserves existing base-link params
if (webUrl) {
var q = new URL(webUrl);
var captured = q.search.slice(1) + (q.hash || ''); // landing query string (+fragment)
url.searchParams.set('_web_params', captured); // URL-encoded on serialization
}
if (deeplink) url.searchParams.set('_dl', deeplink);
if (passthrough) url.searchParams.set('_p', passthrough);
if (deferredDeeplink) url.searchParams.set('_ddl', deferredDeeplink);
return url.toString();
}
| Parâmetro anexado | Detalhes |
|---|---|
_web_params
|
Query string codificada em URL (mais o fragmento) da
|
_dl
|
Argumento de deep link. Opcional. |
_p
|
Argumento de passthrough. Opcional. |
_ddl
|
Argumento de deferred deep link. Opcional. |
Precisão:
o SDID
não
é anexado ao link (sem
_dsid
ou
_sdid
). Isso é
encaminhamento de parâmetros de campanha, não device-stitching determinístico por SDID.
Atribuição por clipboard (deferred deep link)
A atribuição por clipboard fornece uma correspondência determinística para um deferred deep link. O trecho de código web grava um token único no clipboard; o app recém-instalado o lê de volta e faz a correspondência por igualdade de token.
function openAppWithClipboardDdl(baseLink, deeplink, passthrough, deferredDeeplink) {
// 1. Build the web-to-app link (see Web-to-App Attribution).
var link = buildWebToAppLink(baseLink, capturedWebUrl, deeplink, passthrough, deferredDeeplink);
// 2. Generate a UUID v4 and form the token.
var uuid = crypto.randomUUID();
var tokenUrl = location.protocol + '//' + location.hostname + '/__singular_ddl__/' + uuid;
// 3. Write ONLY the token to the clipboard (execCommand fallback).
copyToClipboard(tokenUrl);
// 4. Append the token to the click as ecid.
var url = new URL(link);
url.searchParams.set('ecid', tokenUrl);
// 5. Open the app / store.
window.open(url.toString());
}
function copyToClipboard(text) {
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(text);
return;
}
var ta = document.createElement('textarea');
ta.value = text;
document.body.appendChild(ta);
ta.select();
document.execCommand('copy');
document.body.removeChild(ta);
}
Precisão:
o clipboard mantém
apenas
o token — não o SDID,
nem
_web_params
, e nem o deep link. A correspondência é por igualdade de token
(
ecid
no clique é igual ao token do clipboard), de modo que o app recém-instalado
faz a correspondência de forma determinística.
A gravação no clipboard precisa ser executada dentro de um handler de gesto do usuário (um clique) ou os navegadores a bloqueiam. Observe as restrições de clipboard do iOS Safari.
Ler o clipboard no primeiro launch é responsabilidade do lado do app (sua própria integração de SDK/S2S móvel), não deste trecho de código web.
Exemplos de sequência de eventos
Primeira visita e registro
-
O usuário chega pelo Google Ads. Envie a page visit inicial:
-
n=__PAGE_VISIT__ -
conversion_event=true -
sdid=3730aecb-47ba-4d13-bd17-52b4b700956f -
attribution_data={ "partner_name": "googleadwords_int", "is_attributed": "true", "partner_campaign_name": "brand_us_en" }
-
-
O usuário se registra. Envie o evento de registro:
-
n=sng_registration_complete -
conversion_event=false -
sdid=3730aecb-47ba-4d13-bd17-52b4b700956f(mesmo SDID) -
custom_user_id=user_12345abc -
Sem
attribution_data
-
Usuário retornante de uma nova campanha
-
O mesmo navegador retorna de uma campanha diferente. Envie uma nova page visit:
-
n=__PAGE_VISIT__ -
conversion_event=true -
sdid=3730aecb-47ba-4d13-bd17-52b4b700956f(mesmo SDID) -
attribution_data={ "partner_name": "facebook", "is_attributed": "true", "partner_campaign_name": "retargeting_Q1" }
-
-
O usuário faz uma compra. Envie o evento de compra:
-
n=sng_purchase -
conversion_event=false -
sdid=3730aecb-47ba-4d13-bd17-52b4b700956f(mesmo SDID) -
custom_user_idpersistido -
Sem
attribution_data
-