Measurement Protocol 是甚麼? 如何透過GA4的Measurement Protocol在特定無法埋設GA4代碼的情境等,可以發送指定的事件? 這一篇想要透過Measurement Protocol – MP通訊協定,來進行GA4的事件發送。
Measurement Protocol 基本上就是像https請求的方式,對GA4的伺服器進行傳遞「瀏覽內容、電商資訊、推薦來源等」。另外也可以透過Python,來實作一個MP的事件發送工具,我的網站很早就蓋好了這工具,也歡迎你直接使用 :)。
章節內容
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。
- client_id:GA4用於記錄使用者的判別方式。這一個資料可以從BigQuery中的user_pseudo_id 撈取,也可以透過指定JS在前端、GTM中直接撈取。
- event_timestamp:事件時間戳,為時間單位標示方式的一種,經常出現在程式語言、BigQuery也會出現,用於給機器讀取時間格式資料。這一個資料也得從BigQuery進行撈取。另外如果你想要將時間戳轉換成人類易懂的時間表示,你也可以上網搜尋「timestamp convert」。
- api_secret:你可以從GA4「設定」 > 「資料串流」> 「你要發送的資源」> 「Measurement Protocol 密鑰」(下方圖一) > 「申請一組API KEY」 (下方圖二) 。
- measurment_id:則是你的GA4資源代碼。
BigQuery撈取session_id
透過BigQuery的查詢,可以在這邊看到Client_id;也就是對應BigQuery的user_pseudo_id。ga_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。簡單來說,就是在請求的時候,帶上一些資料,例如網頁標題、購買產品名、推薦來源等參數。
https://analytics.google.com/g/collect?
以下也整理一些常見的參數,當然你也可以直接透過瀏覽器的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的資料弄髒。