Integração GTM Analytics
Pode ligar qualquer contentor Google Tag Manager (GTM) ao Wink introduzindo o seu ID do Contentor GTM no portal Wink. Uma vez ligado, o seu contentor carrega automaticamente para a sua propriedade e lê diretamente os eventos de reserva do Wink — cobrindo toda a jornada do hóspede desde a pesquisa até à reserva concluída. Um caso de uso comum é um contentor Sojern para retargeting e publicidade, mas qualquer contentor GTM funciona da mesma forma.
O Que Precisa de Fazer
Seção intitulada “O Que Precisa de Fazer”-
Obtenha o Seu ID de Contentor GTM
Obtenha o seu ID de Contentor GTM (formato
GTM-XXXXXXX). Se for de um parceiro como a Sojern, solicite especificamente o ID do Contentor GTM — é diferente de um pixel ou ID de tag. -
Introduza-o no Portal Wink
Inicie sessão em app.wink.travel, selecione a sua conta e abra as definições de personalização. Na secção Analytics & integrations, cole o seu ID de Contentor GTM no campo GTM Container ID e guarde. A sua integração está agora ativa.
-
Confirme com o Seu Fornecedor
Se o seu contentor for de um parceiro como a Sojern, informe o seu gestor de conta que a integração está ativa. Eles podem verificar do lado deles se as tags estão a disparar corretamente em
wink.travelpara a sua propriedade e se os dados estão a fluir para a sua conta.
O Que o Wink Faz do Nosso Lado
Seção intitulada “O Que o Wink Faz do Nosso Lado”Para transparência, aqui está o que o Wink configura para fazer esta integração funcionar:
- Um campo de ID de Contentor GTM está disponível na secção Analytics & integrations das suas definições de personalização. Quando introduz o seu ID de Contentor, o Wink valida o formato (
GTM-XXXXXXX) e armazena-o de forma segura associado à sua propriedade. - Em todas as páginas onde a sua propriedade está ativa no Wink, o seu contentor é injetado diretamente na página — partilhando o próprio
window.dataLayerdo Wink — para que carregue em paralelo com o contentor do Wink sem depender de qualquer configuração extra. Isto acontece automaticamente, sem trabalho por propriedade da equipa Wink. - O seu contentor é carregado de forma assíncrona, para não afetar o desempenho do carregamento da página para os seus hóspedes.
- O tracking do Wink e o seu contentor correm em paralelo, lendo do mesmo
dataLayerpartilhado. Cada evento de reserva que o Wink regista está simultaneamente disponível para o seu contentor. - Quando a sua propriedade não está a ser visualizada — por exemplo, quando um hóspede está a navegar por outro hotel no Wink — o seu contentor não é carregado, recebendo apenas dados relevantes para a sua propriedade.
- A reserva concluída (
purchase) dispara no browser na página de agradecimento. Um ID de Contentor GTM é uma caixa preta — o Wink não pode assumir que tags estão dentro dele — por isso o Wink nunca chama o Google em seu nome a partir dos seus servidores. Em vez disso, qualquer tag GA4 ou de conversão que exista no seu contentor recebe opurchaseno lado do cliente, exatamente como qualquer outro evento de reserva. Como o fornecedor de pagamento redireciona o browser do hóspede para fora e de volta, o Wink reconecta a sessão de analytics que o redirecionamento interrompeu antes de disparar opurchase, para que a venda seja atribuída à visita original do hóspede e não contabilizada como uma nova sessão.
Referência DataLayer
Seção intitulada “Referência DataLayer”O Wink envia eventos compatíveis com GA4 para o dataLayer ao longo da jornada do hóspede. O seu contentor GTM lê deste mesmo dataLayer partilhado, por isso qualquer trigger ou variável que configure tem acesso a todas as propriedades descritas abaixo.
Cada evento segue a estrutura padrão GA4 Enhanced Ecommerce: uma string event de topo e um objeto ecommerce. Antes de cada push, o Wink limpa o payload ecommerce anterior para evitar que dados antigos influenciem novos triggers.
Eventos da Jornada de Reserva
Seção intitulada “Eventos da Jornada de Reserva”Estes eventos disparam automaticamente à medida que um hóspede avança no funil de reserva. Configure os seus triggers GTM como triggers de Evento Personalizado que correspondam aos nomes dos eventos abaixo.
| Passo | Evento | Quando Dispara |
|---|---|---|
| 1 | view_item_list | Carregamento da grelha ou lista de inventário do hotel |
| 2 | view_item | Hóspede visualiza uma página específica da propriedade |
| 3 | add_to_cart | Hóspede adiciona um quarto ao carrinho de compras |
| 4 | begin_checkout | Carregamento da página de checkout / pagamento |
| 5 | add_payment_info | Hóspede seleciona um método de pagamento |
| 6 | login | Hóspede autentica via SSO |
| 7 | purchase | Reserva é confirmada |
| 8 | refund | Reserva é cancelada |
view_item_list
Seção intitulada “view_item_list”Dispara quando uma grelha ou lista de inventário do hotel é renderizada.
{ "event": "view_item_list", "ecommerce": { "item_list_id": "featured_hotels", "item_list_name": "Featured Hotels", "items": [ ] }}view_item
Seção intitulada “view_item”Dispara quando um hóspede visualiza uma propriedade específica.
{ "event": "view_item", "ecommerce": { "currency": "USD", "value": 299.00, "items": [ ] }}add_to_cart
Seção intitulada “add_to_cart”Dispara quando um hóspede adiciona um quarto ao carrinho.
{ "event": "add_to_cart", "ecommerce": { "currency": "USD", "value": 299.00, "items": [ ] }}begin_checkout
Seção intitulada “begin_checkout”Dispara quando a página de checkout / pagamento carrega.
{ "event": "begin_checkout", "ecommerce": { "currency": "USD", "value": 299.00, "coupon": "SUMMER10", "items": [ ] }}coupon está presente apenas quando um código de desconto foi aplicado.
add_payment_info
Seção intitulada “add_payment_info”Dispara quando o hóspede seleciona ou confirma um método de pagamento.
{ "event": "add_payment_info", "ecommerce": { "currency": "USD", "value": 299.00, "coupon": "SUMMER10", "payment_type": "STRIPE", "items": [ ] }}payment_type é preenchido a partir do tipo de adquirente de pagamento. coupon está presente apenas quando um código de desconto foi aplicado.
Dispara quando um hóspede se autentica via single sign-on.
{ "event": "login", "ecommerce": { "method": "IAM" }}purchase
Seção intitulada “purchase”Dispara quando uma reserva é confirmada.
{ "event": "purchase", "ecommerce": { "currency": "USD", "transaction_id": "bc-a1b2c3d4", "value": 299.00, "coupon": "SUMMER10", "shipping": 0.00, "tax": 0.00, "items": [ { "item_id": "rr-xyz789", "item_name": "Deluxe Ocean Suite", "item_brand": "Grand Resort", "item_category": "GUEST_ROOM", "price": 299.00, "quantity": 1, "property_id": "prop-abc123", "property_name": "Grand Resort Maldives", "property_brand": "Grand Collection", "property_chain": "Luxury Hotels International", "city_name": "Malé", "country_code": "MV", "start_date": "2026-06-01", "end_date": "2026-06-05", "num_adults": 2, "num_children": 0, "cancellation_policy": "Refundable", "rate_plan_id": "rp-summer2026", "room_rate_id": "rr-xyz789", "room_rate_name": "Summer Escape — Bed & Breakfast", "num_perks": 2, "room_location": "Overwater", "room_view": "Ocean", "room_classification": "Suite" } ] }}transaction_id é o identificador único do contrato de reserva. coupon, shipping e tax estão presentes apenas quando aplicáveis.
Dispara quando uma reserva é cancelada.
{ "event": "refund", "ecommerce": { "currency": "USD", "transaction_id": "bc-a1b2c3d4", "value": 299.00, "coupon": "SUMMER10", "shipping": 0.00, "tax": 0.00, "items": [ ] }}transaction_id corresponde ao evento purchase da mesma reserva. coupon, shipping e tax estão presentes apenas quando aplicáveis.
Propriedades do Item
Seção intitulada “Propriedades do Item”Todos os eventos que incluem um array items partilham o mesmo esquema de item. Cada propriedade é opcional, a menos que marcada como obrigatória.
Campos padrão GA4
Seção intitulada “Campos padrão GA4”Estes campos são nativamente compreendidos pelo GA4 e aparecem em relatórios ecommerce padrão sem configuração adicional.
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
item_id | string | Sim | Identificador único para o quarto ou produto |
item_name | string | — | Nome do quarto ou produto |
affiliation | string | — | Nome do afiliado ou vendedor |
coupon | string | — | Código de cupão aplicado ao item |
currency | string | — | Código de moeda ISO 4217 (ex: USD) |
creative_name | string | — | Nome criativo usado numa promoção |
creative_slot | string | — | Posição do slot da promoção criativa |
discount | number | — | Valor do desconto aplicado |
index | number | — | Posição na lista (base 1) |
item_brand | string | — | Nome do hotel ou marca |
item_category | string | — | Tipo de produto — ex: GUEST_ROOM, ACTIVITY, ATTRACTION, MEETING_ROOM, RESTAURANT, SPA |
item_list_id | string | — | Identificador da lista a que o item pertence |
item_list_name | string | — | Nome exibido da lista |
location_id | string | — | Coordenadas geográficas da propriedade |
price | number | — | Preço unitário |
promotion_id | string | — | Identificador da promoção |
promotion_name | string | — | Nome exibido da promoção |
quantity | number | — | Quantidade (padrão 1) |
Parâmetros personalizados ao nível do item
Seção intitulada “Parâmetros personalizados ao nível do item”Estes parâmetros transportam contexto de reserva específico do Wink. O GA4 não os apresenta automaticamente em relatórios — deve registar cada um como uma dimensão personalizada ao nível do item na sua propriedade GA4 antes de aparecerem em explorações ou relatórios padrão. Veja Dimensões Personalizadas no GA4 abaixo para instruções de configuração.
| Propriedade | Tipo | Descrição |
|---|---|---|
property_id | string | Identificador da propriedade Wink |
property_name | string | Nome exibido da propriedade |
property_brand | string | Marca a que a propriedade pertence |
property_chain | string | Cadeia a que a propriedade pertence |
property_url_name | string | Slug amigável para URL da propriedade |
city_name | string | Cidade onde a propriedade está localizada |
country_code | string | Código do país ISO 3166-1 alpha-2 |
start_date | string | Data de check-in no formato YYYY-MM-DD |
end_date | string | Data de check-out no formato YYYY-MM-DD |
num_adults | number | Número de adultos na reserva |
num_children | number | Número de crianças na reserva |
cancellation_policy | string | Um dos: Refundable, Non-Refundable, Refundable-With-Restrictions, Non-Refundable-With-Restrictions |
rate_plan_id | string | Identificador do plano tarifário |
room_rate_id | string | Identificador da tarifa específica do quarto |
room_rate_name | string | Nome exibido da tarifa do quarto |
num_perks | number | Número de benefícios incluídos na tarifa |
room_location | string | Descrição da localização do quarto (ex: Overwater, Garden) |
room_view | string | Descrição da vista do quarto (ex: Ocean, City) |
room_classification | string | Classificação ou categoria do quarto (ex: Suite, Standard) |
bed_type | string | Configuração da cama do quarto (ex: King, Twin) |
Dimensões Personalizadas no GA4
Seção intitulada “Dimensões Personalizadas no GA4”O GA4 ignora parâmetros personalizados ao nível do item nos relatórios até que os registe explicitamente como dimensões personalizadas ao nível do item. Só precisa registar os parâmetros que pretende usar nos relatórios — não é necessário registar todos os 20.
-
Abra Definições Personalizadas
No GA4, vá a Admin (ícone de engrenagem no canto inferior esquerdo) → selecione a sua propriedade → Data display → Custom definitions.
-
Crie uma nova dimensão personalizada
Clique em Create custom dimensions.
-
Preencha os detalhes da dimensão
- Dimension name — o rótulo legível que aparece nos relatórios GA4 (veja a tabela abaixo)
- Scope — selecione Item
- Event parameter — o nome exato do parâmetro conforme aparece no dataLayer (veja a tabela abaixo)
- Description — opcional mas recomendado
-
Guarde e repita
Clique em Save, depois repita para cada parâmetro que deseja acompanhar.
Use a tabela seguinte como referência ao criar dimensões personalizadas. O valor de Event parameter deve corresponder exatamente — o GA4 diferencia maiúsculas de minúsculas.
| Nome da dimensão | Parâmetro do evento | Tipo |
|---|---|---|
| Property ID | property_id | Texto |
| Property name | property_name | Texto |
| Property brand | property_brand | Texto |
| Property chain | property_chain | Texto |
| Property URL name | property_url_name | Texto |
| City name | city_name | Texto |
| Country code | country_code | Texto |
| Check-in date | start_date | Texto |
| Check-out date | end_date | Texto |
| Number of adults | num_adults | Número |
| Number of children | num_children | Número |
| Cancellation policy | cancellation_policy | Texto |
| Rate plan ID | rate_plan_id | Texto |
| Room rate ID | room_rate_id | Texto |
| Room rate name | room_rate_name | Texto |
| Number of perks | num_perks | Número |
| Room location | room_location | Texto |
| Room view | room_view | Texto |
| Room classification | room_classification | Texto |
| Bed type | bed_type | Texto |
Eventos Adicionais Disponíveis
Seção intitulada “Eventos Adicionais Disponíveis”Os seguintes eventos estão disponíveis no dataLayer do Wink mas não fazem parte do funil padrão de reserva. Podem ser disparados por outras interações na plataforma.
add_to_wishlist
Seção intitulada “add_to_wishlist”{ "event": "add_to_wishlist", "ecommerce": { "currency": "USD", "value": 299.00, "items": [ ] }}remove_from_cart
Seção intitulada “remove_from_cart”{ "event": "remove_from_cart", "ecommerce": { "currency": "USD", "value": 299.00, "items": [ ] }}select_item
Seção intitulada “select_item”{ "event": "select_item", "ecommerce": { "item_list_id": "featured_hotels", "item_list_name": "Featured Hotels", "items": [ ] }}view_cart
Seção intitulada “view_cart”{ "event": "view_cart"}Nenhum payload ecommerce está incluído com este evento.
view_promotion
Seção intitulada “view_promotion”{ "event": "view_promotion", "ecommerce": { "creative_name": "Summer Banner", "creative_slot": "hero", "promotion_id": "promo_001", "promotion_name": "Summer Sale", "items": [ ] }}select_promotion
Seção intitulada “select_promotion”{ "event": "select_promotion", "ecommerce": { "creative_name": "Summer Banner", "creative_slot": "hero", "promotion_id": "promo_001", "promotion_name": "Summer Sale", "items": [ ] }}{ "event": "search", "ecommerce": { "search_term": "beachfront resort" }}select_content
Seção intitulada “select_content”{ "event": "select_content", "ecommerce": { "content_type": "hotel", "content_id": "prop_12345" }}{ "event": "share", "ecommerce": { "method": "copy_link", "content_type": "hotel", "item_id": "prop_12345" }}sign_up
Seção intitulada “sign_up”{ "event": "sign_up", "ecommerce": { "method": "email" }}generate_lead
Seção intitulada “generate_lead”{ "event": "generate_lead", "ecommerce": { "currency": "USD", "value": 0.00 }}join_group
Seção intitulada “join_group”{ "event": "join_group", "ecommerce": { "group_id": "group_abc" }}earn_virtual_currency
Seção intitulada “earn_virtual_currency”{ "event": "earn_virtual_currency", "ecommerce": { "virtual_currency_name": "WinkPoints", "value": 100 }}spend_virtual_currency
Seção intitulada “spend_virtual_currency”{ "event": "spend_virtual_currency", "ecommerce": { "virtual_currency_name": "WinkPoints", "value": 50, "item_name": "Room Upgrade" }}level_start
Seção intitulada “level_start”{ "event": "level_start", "ecommerce": { "level_name": "Gold" }}level_end
Seção intitulada “level_end”{ "event": "level_end", "ecommerce": { "level_name": "Gold", "success": true }}level_up
Seção intitulada “level_up”{ "event": "level_up", "ecommerce": { "level": 2, "character": "traveler" }}post_score
Seção intitulada “post_score”{ "event": "post_score", "ecommerce": { "score": 980, "level": 2, "character": "traveler" }}unlock_achievement
Seção intitulada “unlock_achievement”{ "event": "unlock_achievement", "ecommerce": { "achievement_id": "first_booking" }}tutorial_begin
Seção intitulada “tutorial_begin”{ "event": "tutorial_begin", "ecommerce": {}}tutorial_complete
Seção intitulada “tutorial_complete”{ "event": "tutorial_complete", "ecommerce": {}}virtualPageView
Seção intitulada “virtualPageView”Este é um evento personalizado do Wink — não faz parte do conjunto padrão de eventos GA4. É enviado em cada navegação de página e transporta contexto de dispositivo e sessão. Não inclui um objeto ecommerce.
{ "event": "virtualPageView", "device": "Desktop", "deviceAgent": "Mozilla/5.0 ...", "os": "MacOS", "path": "/hotels/grand-resort", "title": "Grand Resort — Wink", "userId": "user_abc123", "startDate": "2026-06-01", "endDate": "2026-06-05", "guests": "2", "rooms": "1"}| Propriedade | Descrição |
|---|---|
device | Tipo de dispositivo detetado — Desktop, Android, iPhone, iPad ou similar |
deviceAgent | String bruta do user agent |
os | Sistema operativo detetado — Windows, MacOS, Linux, UNIX |
path | Caminho da página atual |
title | Título da página atual |
userId | Identificador do utilizador autenticado (omitido quando não está autenticado) |
startDate | Data de check-in da sessão de pesquisa atual |
endDate | Data de check-out da sessão de pesquisa atual |
guests | Número de hóspedes da sessão de pesquisa atual |
rooms | Número de quartos da sessão de pesquisa atual |
