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 do Contentor GTM
Obtenha o seu ID do 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 vá ao separador Personalizações. Cole o seu ID do Contentor GTM no campo GTM e guarde. A sua integração está agora ativa.
-
(Opcional) Adicione um ID de Medição GA4 + Segredo API para Compra Server-Side
Os contentores GTM correm inteiramente no navegador do hóspede, pelo que uma reserva concluída pode ser perdida se o hóspede fechar o separador durante o redirecionamento de pagamento. Se o seu contentor carregar uma propriedade GA4 e quiser que as reservas concluídas sejam registadas de forma fiável, introduza também o ID de Medição e o Segredo da API do Protocolo de Medição dessa GA4 na secção GTM. O Wink enviará então o evento
purchasepara essa propriedade server-side, exatamente como descrito no guia de Integração GA4 Analytics. Deixe estes campos em branco se só precisar de rastreio no navegador. -
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 do Contentor GTM está disponível no separador Personalizações do seu portal Wink. 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 rastreio 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.
- Se forneceu um ID de Medição GA4 + segredo API (passo 3 acima), o evento
purchasepara reservas concluídas é adicionalmente enviado server-side via o Protocolo de Medição GA4, para que uma venda seja registada mesmo que o hóspede nunca volte à página de confirmaçã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, pelo que 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 ao nível superior e um objeto ecommerce. Antes de cada push, o Wink limpa o payload ecommerce anterior para evitar que dados antigos interfiram em 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 a página de uma propriedade específica |
| 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-se 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 de exibição 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 de exibição 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 nos 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 de exibição 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 de 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 de exibição 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 → Exibição de dados → Definições personalizadas.
-
Crie uma nova dimensão personalizada
Clique em Criar dimensões personalizadas.
-
Preencha os detalhes da dimensão
- Nome da dimensão — o rótulo legível que aparece nos relatórios GA4 (veja a tabela abaixo)
- Âmbito — selecione Item
- Parâmetro do evento — o nome exato do parâmetro conforme aparece no dataLayer (veja a tabela abaixo)
- Descrição — opcional mas recomendado
-
Guarde e repita
Clique em Guardar, depois repita para cada parâmetro que deseja rastrear.
Use a tabela seguinte como referência ao criar dimensões personalizadas. O valor do Parâmetro do evento 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 |
