GA4Measurment Protocol 應用

GA4Measurment Protocol 實例 | 透Python請求MP-API

Measurement Protocol 是甚麼? 如何透過GA4的Measurement Protocol在特定無法埋設GA4代碼的情境等,可以發送指定的事件? 這一篇想要透過Measurement Protocol – MP通訊協定,來進行GA4的事件發送。

Measurement Protocol 基本上就是像https請求的方式,對GA4的伺服器進行傳遞「瀏覽內容、電商資訊、推薦來源等」。另外也可以透過Python,來實作一個MP的事件發送工具,我的網站很早就蓋好了這工具,也歡迎你直接使用 :)。

GA4是如何收到事件

GA4伺服器接收事件

從這張圖最上方可以看到,發送端有「WebClient, Server, Mobile Client」。橫向是講解Client如何與Server溝通,縱向為講解三個發送端分別帶入甚麼資料,給GA4伺服器,後續GA4接收終端,再分別將資料分派給GA、DATA API、BQ。

圖片來源:GA4官方文件

Measurement Protocol 實例

這次會透過官方提供的Event Builder工具,來進行Measurment 的事件發送操作。文章後面我也會展示PYTHON怎麼打造一個Measurement的工具。

Measurement Protocol 必備資料

使用Measurement Protocol – MP時,有4個必備「ga_session_id, client_id, event_timestamp, api_secret, measurment_id」。

  • ga_session_id:為判別使用者的來源/媒介,他會接續一開始使用者進入時,被GA4設定好的ga_session_id,如果缺少那來源媒介就會not set
  • event_timestamp:事件時間戳,為時間單位標示方式的一種,經常出現在程式語言、BigQuery也會出現,用於給機器讀取時間格式資料。這一個資料也得從BigQuery進行撈取。另外如果你想要將時間戳轉換成人類易懂的時間表示,你也可以上網搜尋「timestamp convert」。
  • api_secret:你可以從GA4「設定」 > 「資料串流」> 「你要發送的資源」> 「Measurement Protocol 密鑰」(下方圖一) > 「申請一組API KEY」 (下方圖二) 。
Measurement Protocol 密鑰
  • measurment_id:則是你的GA4資源代碼。

BigQuery撈取session_id

從BigQuery撈取session_id

透過BigQuery的查詢,可以在這邊看到Client_id;也就是對應BigQuery的user_pseudo_idga_session_id, event_stamp也可以在BigQuery中拿到。

Event_Builder設定

打開Event_builder填入以上必要的資料。

本次範例以share事件作為範例,直接將這個事件傳入GA4。另外注意timestamp_micros會攸關事件的順序。例如page_view不可能發生的比session_start還要早。所以務必對齊事件的發生順序;把傳送事件timestampe設定 > 前一個事件的timestampe。資料透過MP傳入的,就會藉於兩個事件的順序當中。

Session_id則是在事件層級中維度填入。

確認GA4即時報表

如果在Event Build事件發送出去有看到「Event is valid」,並且有發送至GA4,就可以前往GA4的即時報表查看該事件。

你也可以看到裡面自帶一個ga_session的參數。

利用Python製作MP事件工具

透過前端請求的API,我們可以直接利用這個cURL – 來進行PYTYON的請求。目前的請求方式都是使用post。簡單來說,就是在請求的時候,帶上一些資料,例如網頁標題、購買產品名、推薦來源等參數。

以下也整理一些常見的參數,當然你也可以直接透過瀏覽器的f12,看一下GA4還有哪一些參數能用,進而帶入到自己寫的python程式中。

  • tid = gid
  • cid = client_id
  • dl = page_location
  • dt = page_title
  • sr = screen resolution
  • cu = currency (電子商務事件)
  • en = event_name
  • epn.value = event_value
  • pr1: product1 price
  • ep.transaction_id = transasionID
  • shippint = shipping

注意,下方程式碼由於放在網路關係,因此沒有將dict做好分類;程式碼無經過排版。實際做的時候,其實可以讓這邊的資料美化一些。但由於這個範例所夾帶的都是大量數據參數,所以你可能會覺得看起來非常凌亂,但仔細看他還是會有規則的。

import requests as req

header = {'path': f'/g/collect?v=2&tid={gid}&cid={cid1},{cid2}&sr=1829x1029&uaa=x86&uab=64&uapv=15.0.0&uaw=0&_s=5&cu={currency}&sid={sid}&seg=1&en={event}&_c=1&_ee=1&pr1={total}&quantity={quantity}&epn.value={total}&_et=380&dl={page_location}&pr1={name}', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'}


data={ 'tid': f'{gid}', 'cid': f'{cid1},{cid2}', 'dl':f'{page_location}', 'dt': f'{page_title}',}


gareq = req.post(f'https://analytics.google.com/g/collect?v=2&tid={gid}&cid={cid1}.{cid2}&sr=1829x1029&uaa=x86&uab=64&uamb=0&uam=&uap=Windows&uaw=0&_s=5&cu={currency}&sid={sid}&seg=1&epn.value={total}&en={event}&_c=1&_ee=1&dl={page_location}&pr1={name}',data=data,header=header)

總結

隔天就可以看到透過Measurment Protocol發送的事件出現在GA4。不管你是透過ga提供的event_builder來進行事件發送,或者是透過Python直接本地事件發送。不外乎一個原則就是帶參數,告訴GA4這個事件是甚麼、來自哪裡….等。

唯一不同的是PYTHON進行發送不需要apikey,只需要MeasurmentID。務必使用python的時候,也先確認好自己帶的參數正不正確,以免將GA4的資料弄髒。

error: