機器人偵測訊號
@moosehq/game-client-sdk/behavior-reporter 的 BehaviorReporter 在瀏覽器裡收集原始的互動時間數據(透過內部的 BehaviorCollector),並把產生的摘要直接送給平台——這條路徑完全不經過你的後端。機器人的操作節奏通常比真人玩家更快、也更規律,這是摘要回報訊號的一部分;程式化觸發的點擊則是另一個訊號。
這和生命週期上報是兩回事——兩者走的是完全不同的傳輸方式(BehaviorReporter 透過 fetch 直接送給平台;GameBridge 透過 postMessage 送給運營商的 shell),也是各自獨立建構的。
import { BehaviorReporter } from '@moosehq/game-client-sdk/behavior-reporter'
// ingestUrl 是平台專用的行為採集端點——和你傳給 ProviderClient
// 的基礎網址是不同的一組網址,由你的對接窗口提供。見「環境與基礎網址」。
const behavior = new BehaviorReporter({ ingestUrl: behaviorIngestUrl, sessionToken })
// 整個接入就這樣結束了——頁面上的每個點擊都已經在被自動記錄
// (見下方「自動採集」)。
// 遊戲結束時呼叫(例如在 SPA 路由跳轉離開之前),取消它的計時器並
// 移除監聽器:
behavior.stop()自動採集
建構 BehaviorReporter 時會自動掛上一個 document 層級的 click 監聽器,把頁面上的每一次點擊都記錄為一次互動——不需要再額外接入任何東西。stop() 會連同這個監聽器和其他監聽器一起移除。
如果你想自己控管採集範圍或補充上報,可以傳入 autoCollectClicks: false,改為直接呼叫 recordInteraction:
const behavior = new BehaviorReporter({
ingestUrl: behaviorIngestUrl,
sessionToken,
autoCollectClicks: false,
})
spinButton.addEventListener('click', (event) => {
behavior.recordInteraction(event) // 傳入 Event 以便檢查 isTrusted
placeBet()
})不論是透過自動採集還是手動呼叫,傳入觸發用的 Event 都能讓 BehaviorReporter 檢查 isTrusted:一個真人觸發的點擊永遠是 isTrusted === true,而一個程式化觸發的點擊(腳本呼叫的 element.click())則是 isTrusted === false,會被標記為自動化訊號。
回報
BehaviorReporter 會依照自己的計時器、以及分頁隱藏/頁面卸載事件自動送出摘要,直接 POST 到 ingestUrl,並用 X-Session-Token 標頭帶上 session token(這不是一個簽名呼叫:瀏覽器沒辦法保存你的 HMAC 金鑰,所以這個端點改用 session token 作為鑑權方式)。遊戲結束時呼叫 behavior.stop(),取消它的計時器並移除監聽器。
這是一個盡力而為的遙測訊號,不屬於遊戲流程的一部分——回報失敗會在內部被吞掉,絕不會上報給玩家,也不會阻擋下注。確切型別見 SDK 參考文件的 BehaviorReporter。