星图直播小手柄组件监测服务说明
2025-03-19 18:08:59
📢  注意:此文档监测说明仅适配星图游戏行业直播场景任务
一、小手柄监测下发流程图
二、监测逻辑
1、监测事件范围
  • 事件
场景
图片
  • 转化组件曝光
  • 直播间小手柄曝光

  • 短视频锚点曝光
  • 组件点击
  • 小手柄点击

  • 短视频锚点点击

  • 主播讲解卡点击

  • 游戏落地页下载
  • iOS:拉起AppStore

  • Android:触发下载


  • 主播推荐列表下载


  • 主播讲解卡下载

2、监测链接宏参数
通过约定指定格式的字符串,用以代表将来将要替换的字段位置,这个格式我们统称为“宏”。参数的格式为“__参数__”,详细说明参考下文。
3、游戏事件
  • 游戏事件定义:
事件名称
事件定义
event_type值
激活事件
用户首次打开APP
active
登录事件
用户每次完成帐号登录行为
login
消费事件
用户成功支付/成功退款行为
active_pay
  • 涉及用户范围:所有归因至小手柄监测链接的转化,都应按照本文档约定回传深度事件,回传不区分是否属于商业化流量或自然流量(换句话说就是归因到通过抖音小手柄组件的转化,全部都需回传,不管是不是通过广告体系买量)
三、监测链接配置规范
1、格式
监测链接主要由"https://XXXX.XXX.com?"+"参数"+其他部分组成,且总大小不得超过10K。具体格式如下:
(1)监测链接的前缀格式为:https://XXX.XXX.com?
(2)“宏”参数的格式为“__参数__”,其中:
  • 参数必须全部大写,小手柄支持宏参数请见下方 
  • “__参数__”格式中参数两边为双下划线,即参数左右两边均为两个连续的英文字符'_' 
  • 广告主可以根据自己的需要选择具体填写哪些参数,支持参数详见参数列表 
  • 监测链接支持大小写字母、数字以及下划线字符。 
2、请求格式
  • 通信协议:支持通过HTTPS通道进行请求通信。 
  • 请求方法:支持接收HTTPS GET方法请求,这种方式下请求参数需要包含在请求的URL中。 
  • 字符编码:UTF-8 
3、说明
  • 宏参数必须全大写,否则无法回传对应参数值。 
  • 监测链接长度大小不得超过 10K。 
  • 监测链接不能是下载链接。 
  • 监测链接必须支持连通。 
  • 监测链接不能包含非法字符,包括但不限于如下列表: 
序号
非法字符
字符解释
url path 中出现的单个的 %,后面不跟2位16进制数;转义字符中的 % 没有问题 
空格 
url 中出现的空格 
// 
url path 中出现的连续 // 
4、宏参数列表 
  1)指派类任务、投稿类任务非效果结算
字段名
描述
格式
CALLBACK_PARAM

本次点击的唯一标识
加密字符串,一般长度不超过512字符。
如果需要进行事件转化回传,该参数必填
OS

客户端操作系统的类型
0 - Android
1 - iOS
2 - WP
3 - Others
int类型数值

UA

用户代理(User Agent),一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
例如:Mozilla/5.0 (Linux; Android 9; SM-G9750 Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36
字符串

IP

媒体投放系统获取的用户终端的公共 IP 地址。在IPV6环境下,会优先上报IPV6地址;IPV4环境下,上报IPV4地址
IPV4/IPV6地址,例如:10.110.90.58

TS
客户端触发监测的时间

UTC 时间戳,自1970 年起的毫秒数,例如:1575194434000
MODEL

手机型号
包含多种格式,如iPhone12,2 (urlencode之后为iPhone12%2c2),iPhone X (urlencode之后为iPhone+X),SM-A750GN (urlencode之后为SM-A750GN)
字符串
GAME_AWEME_ID
小手柄组件所在的主播/达人抖音号
字符串
GAME_LIVE_ITEM_ID
直播场景下为room_id
int64类型数值
GAME_AWEME_ITEM_ID
短视频场景下为video_id
int64类型数值
GAME_CHANNEL

场景枚举
1 - 直播
2 - 短视频
3 - 内容社区
int类型数值
GAMECP_EXTRA
预留的数据传递参数。当前未下发数据,未来使用该参数传递数据,后续会添加相应说明。
json格式的字符串
DEMAND_ID
星图计划ID,一次营销活动生成一个计划ID,仅星图场景使用
19位数字
ORDER_ID
星图任务ID,标识一次达人投稿活动,仅星图场景使用
19位数字
示例:
  2)投稿任务按效果结算
字段名
描述
格式
CALLBACK_PARAM

本次点击的唯一标识

加密字符串,一般长度不超过512字符。
如果需要进行事件转化回传,该参数必填
OS

客户端操作系统的类型
0 - Android
1 - iOS
2 - WP
3 - Others
int类型数值

UA

用户代理(User Agent),一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
例如:Mozilla/5.0 (Linux; Android 9; SM-G9750 Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36
字符串

IP

媒体投放系统获取的用户终端的公共 IP 地址。在IPV6环境下,会优先上报IPV6地址;IPV4环境下,上报IPV4地址
IPV4/IPV6地址,例如:10.110.90.58

TS
客户端触发监测的时间

UTC 时间戳,自1970 年起的毫秒数,例如:1575194434000
MODEL

手机型号
包含多种格式,如iPhone12,2 (urlencode之后为iPhone12%2c2),iPhone X (urlencode之后为iPhone+X),SM-A750GN (urlencode之后为SM-A750GN)
字符串
GAME_AWEME_ID
小手柄组件所在的主播/达人抖音号
字符串
GAME_LIVE_ITEM_ID
直播场景下为room_id
int64类型数值
GAME_AWEME_ITEM_ID
短视频场景下为video_id
int64类型数值
GAME_CHANNEL

场景枚举
1 - 直播
2 - 短视频
3 - 内容社区
int类型数值
GAMECP_EXTRA

预留的数据传递参数。当前未下发数据,未来使用该参数传递数据,后续会添加相应说明。
json格式的字符串
ANDROIDID_MD5
联系对接直客申请
字符串
IDFA_MD5
联系对接直客申请
字符串
IMEI_MD5
联系对接直客申请
字符串
MAC_MD5
联系对接直客申请
字符串
OAID_MD5
联系对接直客申请
字符串
DEMAND_ID
星图计划ID,一次营销活动生成一个计划ID,仅星图场景使用
19位数字
ORDER_ID
星图任务ID,标识一次达人投稿活动,仅星图场景使用
19位数字
示例:
四、游戏事件回传
💕💕特别提醒:一定要按照本文档要求回传正确的参数及完整的信息!错传漏传参数将影响数据的准确性
1、请求方式
  • 通信协议:支持通过HTTPS通道进行请求通信
  • 请求方法:支持HTTPS POST方法发送请求 
  • 字符编码:UTF-8 
  • Content-Type : application/json
  • 注意事项:
  • 传递数据必须统一记录在extra内的ad_extra_data,参考下面的数据格式
  • iOS上报登录事件之前,先要上报激活事件
  • ad_extra_data的具体数据结构参考「回传事件数据结构(ad_extra_data)」一节
2、请求体格式
  1. 1.{
  1. 2.    "event_type": "event_type",
  1. 3.    "context": {
  1. 4.        "ad": {
  1. 5.            "callback": "B.vgcH5jYqoquzezEA"
  1. 6.        }
  1. 7.    },
  1. 8.    "extra": {
  1. 9.       // 回传事件信息统一在这里提供
  1. 10.        "ad_extra_data": "{\"game_user_id\":\"1234\"}" 
  1. 11.    }
  1. 12.}
字段
类型
是否必选
示例
说明
event_type

字符串
active
active_pay
login
回传的事件,包含”激活“、”付费“、“登录”
event_weight
浮点数
100

广告主可以针对每一次转化,回传一个这次转化的价值,单位是 RMB。
context
结构体
--
包含一些关键的上下文信息
结构体
--
包含一些关键的广告相关信息
context.ad.callback
字符串
B.EPHk9cX3pv4CGJax4ZENKI7w4MDev_4C
callback 字段有两个获取途径,对于监测链接归因的方式,需要从监测链接的__CALLBACK_PARAM__这个宏获取这个字段值;对于落地页或小程序归因的方式,需要从 url 中的 clickid 参数获取值。
extra
结构体

包含回传数据
extra.ad_extra_data
字符串

具体的转化回传数据,数据格式参考下文 ad_extra_data 一节
timestamp
长整形
1604888786102
事件发生的毫秒级时间戳
properties
结构体
{
 "pay_amount":120
}
付费回传事件必传

3、如何获取callback?
在填写的监测链接中,需要有一个关键宏信息__CALLBACK_PARAM__,完整的监测链接应该是这样:
经过信息替换以后的监测链接是这样
您在进行归因以后,回调我们的转化上报接口,需要将 callback传入 context.ad.callback 的位置。
  1. 1.{
  1. 2.    "event_type": "active", 
  1. 3.    "context": {
  1. 4.        "ad": {
  1. 5.            "callback": "EPHk9cX3pv4CGJax4ZENKI7w4MDev_4C",
  1. 6.        }
  1. 7.    },
  1. 8.    "timestamp": 1604888786102
  1. 9.}
4、回传事件数据结构(ad_extra_data)
  1)激活事件
无需传递任何字段,特别注意:ActiveExtra是空结构体,即"{}",不是空字符串
名称
类型
含义
样例



  1. 1."{}"
  2)登录事件

名称
类型
是否必选
含义
样例
iOS
game_user_id
字符串
必填,游戏用户uid,保证游戏内唯一
  1. 1."
  1. 2.  {
  1. 3.     \"game_user_id\":\"user1\",
  1. 4.     \"game_user_register_time\":1669044367,
  1. 5.     \"game_user_last_login_time\":1669044367,
  1. 6.     \"game_install_time\":1669044367
  1. 7.  }
  1. 8."

game_user_register_time

int64整型
账户注册时间,秒级时间戳



game_user_last_login_time
int64整型
账户最近一次登录时间,秒级时间戳


game_install_time
int64整型
游戏安装事件,秒级时间戳

android
game_user_id

字符串
必填,游戏用户uid,保证游戏内唯一
  1. 1."
  1. 2.  {
  1. 3.     \"game_user_id\":\"user1\",
  1. 4.     \"game_user_last_login_time\":1669044367
  1. 5.  }
  1. 6."

game_user_last_login_time/
login_time
int64整型
账户最近一次登录时间,秒级时间戳。
两个字段选其中之一即可

  3)付费事件
名称
类型
是否必选
含义
示例
os
字符串
必填,android/ios
  1. 1."
  1. 2.  {
  1. 3.     \"os\":\"ios\",
  1. 4.     \"order_type\":1,
  1. 5.     \"game_user_id\":\"user1\",
  1. 6.     \"game_order_id\":\"order123\",
  1. 7.     \"total_amount\":100,
  1. 8.     \"pat_time\":1669044367,
  1. 9.     \"product_id\":\"product_id\",
  1. 10.     \"product_name\":\"product_name\",
  1. 11.     \"product_desc\":\"product_desc\"
  1. 12.   }
  1. 13."
order_type
int64整型
必填,1 支付成功 2 退款成功

game_user_id
字符串
必填,游戏用户uid,保证游戏内唯一

game_order_id
字符串
必填,订单唯一标记

total_amount
int64整型
必填,总金额,单位为分

pay_time
int64整型
必填,秒级时间戳

product_id
字符串
商品id

product_name
字符串
商品名称

product_desc
字符串
商品描述

5、返回值
  1. 1.{
  1. 2.    "code":0,
  1. 3.    "message":"成功"
  1. 4.}
枚举值
message
说明
0
成功

10
服务暂时不可用,请稍后重试
比较严重的错误,请立即联系字节同学
100
无效的请求,请求数据解析失败
如果参数的 body 按照 json 解析错误,就会报这个错。
102
参数:event_type无效
event_type 不在我们列举的值中
103
参数:callback无效
callback 解析错误
6、示例代码
  Golang
  1. 1.import (
  1. 2.   "encoding/json"
  1. 3.   "errors"
  1. 4.   "io/ioutil"
  1. 5.   "net/http"
  1. 6.   "strings"
  1. 7.)
  1. 8.
  1. 9.// ActiveExtra 激活事件回传结构
  1. 10.type ActiveExtra struct {}
  1. 11.
  1. 12.// IOSLoginExtra ios系统登录事件回传结构
  1. 13.type IOSLoginExtra struct {
  1. 14.   GameUserID            string `json:"game_user_id"` // 必填
  1. 15.   GameUserRegisterTime  int64  `json:"game_user_register_time"` // 秒级时间戳
  1. 16.   GameUserLastLoginTime int64  `json:"game_user_last_login_time"` // 秒级时间戳
  1. 17.   GameInstallTime       int64  `json:"game_install_time"` // 秒级时间戳
  1. 18.}
  1. 19.
  1. 20.// AndroidLoginExtra 安卓系统登录事件回传结构
  1. 21.type AndroidLoginExtra struct {
  1. 22.   GameUserID string `json:"game_user_id"`  // 必填,
  1. 23.   LoginTime  int64  `json:"login_time"` // 必填,秒级时间戳
  1. 24.}
  1. 25.
  1. 26.// PayExtra 付费事件回传结构
  1. 27.type PayExtra struct {
  1. 28.   OS          string `json:"os"`         // 必填,android/ios
  1. 29.   OrderType   int32  `json:"order_type"` // 必填,1 成功 2 退款
  1. 30.   GameUserId  string `json:"game_user_id"` // 必填
  1. 31.   GameOrderId string `json:"game_order_id"`    // 必填,订单唯一标记
  1. 32.   ProductId   string `json:"product_id"`    // 可不传
  1. 33.   ProductName string `json:"product_name"`  // 可不传
  1. 34.   ProductDesc string `json:"product_desc"`  // 可不传
  1. 35.   TotalAmount int64  `json:"total_amount"` // 必填,总金额,单位为分
  1. 36.   PayTime     int64  `json:"pay_time"`     // 必填,秒级时间戳
  1. 37.}
  1. 38.
  1. 39.type CallBackMsg struct {
  1. 40.   EventType string            `json:"event_type"`
  1. 41.   Context   ContextData       `json:"context"`
  1. 42.   Extra     map[string]string `json:"extra"`
  1. 43.}
  1. 44.
  1. 45.type ContextData struct {
  1. 46.   AD map[string]string `json:"ad"`
  1. 47.}
  1. 48.
  1. 49.const (
  1. 50.   ActiveEventType = "active"     // 激活事件
  1. 51.   LoginEventType  = "login"      // 登录事件
  1. 52.   PayEventType    = "active_pay" // 消费事件
  1. 53.)
  1. 54.
  1. 55.// SendCallbackMsg 发送转化回传事件
  1. 56.// @param eventType 事件类型,上面的 ActiveEventType/LoginEventType/PayEventType
  1. 57.// @param callbackParam 在监测链接中传递的callback参数,对应宏参数 CALLBACK_PARAM
  1. 58.// @param retExtraStr 需要传递回平台的数据,json化字符串。不同类型的事件有不同结构,ActiveExtra / PayExtra / ...
  1. 59.func SendCallbackMsg(eventType, callbackParam, retExtraStr string) error {
  1. 60.   // 回传事件上报地址
  1. 62.   client := &http.Client{}
  1. 63.   
  1. 64.   // 构建传递的参数
  1. 65.   callBackMsg := CallBackMsg{
  1. 66.      EventType: eventType,
  1. 67.      Context: ContextData{
  1. 68.         AD: map[string]string{"callback": callbackParam},
  1. 69.      },
  1. 70.      Extra: map[string]string{
  1. 71.          // 特别注意:retExtraStr不能为空字符串,可以是空json结构体
  1. 72.          // retExtraStr可以用"{}",不能用""
  1. 73.         "ad_extra_data": retExtraStr,
  1. 74.      },
  1. 75.   }
  1. 76.   
  1. 77.   infoBytes, _ := json.Marshal(callBackMsg)
  1. 78.   req, _ := http.NewRequest("POST", retURL, strings.NewReader(string(infoBytes)))
  1. 79.   resp, err := client.Do(req)
  1. 80.   if err != nil {
  1. 81.      return err
  1. 82.   }
  1. 83.   defer resp.Body.Close()
  1. 84.   if resp.StatusCode != 200 {
  1. 85.      return errors.New("resp StatusCode not 200")
  1. 86.   }
  1. 87.
  1. 88.   // 检查返回值code,code不为0时参考接入文档的返回值
  1. 89.   type respMsg struct {
  1. 90.      Code    int64  `json:"code"`
  1. 91.      Message string `json:"message"`
  1. 92.   }
  1. 93.   var result respMsg
  1. 94.   body, err := ioutil.ReadAll(resp.Body)
  1. 95.   if err == nil {
  1. 96.      err = json.Unmarshal(body, &result)
  1. 97.   }
  1. 98.   if err != nil {
  1. 99.      return err
  1. 100.   }
  1. 101.   if result.Code != 0 {
  1. 102.      return errors.New("send Callback Msg err StatusCode")
  1. 103.   }
  1. 104.   return nil
  1. 105.}
  Java
  Python
  C++

星图首页星图帮助中心-客户星图帮助中心-达人星图帮助中心-mcn星图帮助中心-服务商
客服