即日起,智能运营模块将不再作为火山引擎增长分析产品售卖时的默认自带模块。
推送运营目前支持以下触达方式:
更多触达方式会陆续发布。
使用极光推送进行用户触达,需要按照以下步骤完成极光通道的配置:
极光推送有免费版和付费版,如果您想要使用华米OV等厂商推送通道,请购买付费版。
进入「运营优化/推送运营/推送通道管理」,编辑极光账号的AppKey、MasterSecrect等信息,输入账号,并开启。
如果您使用的极光VIP账号,并想开通推送报告功能,则需要在极光推送后台配置回执URL。
进入极光后台/回执管理,将送达回执和点击回执设置为:
https://console.volcengine.com/PushCallback/api/v1/JPush/{DataRangers应用的AppId}
极光推送SDK的集成过程请参照极光官方文档:
然后,您需要编写代码获得极光的RegistrationID,并作为jpush_registration_id公共属性通过AppLog SDK上报至火山引擎侧。
Android代码示例:
String resistrationId = JPushInterface.getRegistrationID (this); HashMap<String,Object> param = new HashMap<String,Object> (); param.put ("jpush_registration_id",resistrationId); //saas环境 AppLog.setHeaderInfo (param); //私有化部署 AppLog.profileSet(params);
iOS代码示例:
[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { if(resCode == 0){ NSLog(@"registrationID获取成功:%@",registrationID); //saas环境 [BDAutoTrack setCustomHeaderBlock:^NSDictionary<NSString *,id> * _Nonnull{ return @{@"jpush_registration_id":registrationID}; }]; //私有化部署 [BDAutoTrack profileSet:^NSDictionary<NSString *,id> * _Nonnull{ return @{@"jpush_registration_id":registrationID}; }]; } else{ NSLog(@"registrationID获取失败,code:%d",resCode); } }];
使用个推推送进行用户触达,需要按照以下步骤完成个推通道的配置:
个推推送有免费版和付费版,如果您想要使用推送报告功能,请购买付费版。
进入「运营优化/推送运营/推送通道管理」,编辑个推账号的AppID、AppKey、MasterSecrect等信息,输入账号,并开启。
如果想使用推送报告功能(需要个推VIP账号),请在配置界面中勾选。
如果您使用的个推VIP账号,并想开通推送报告功能,则需要联系个推客服配置回执URL。
回执URL设置为:
https://console.volcengine.com/PushCallback/api/v1/GeTui/{DataRangers应用的AppId}
个推推送SDK的集成过程请参照个推官方文档:
然后,您需要编写代码获得个推的ClientID,并作为getui_client_id公共属性通过AppLog SDK上报至火山引擎侧。
Android代码示例:
String resistrationId = com.igexin.sdk.PushManager.getInstance().getClientid (this); HashMap<String,Object> param = new HashMap<String,Object> (); param.put ("getui_client_id",resistrationId); //saas环境 AppLog.setHeaderInfo (param); //私有化部署 AppLog.profileSet(params);
iOS代码示例:
//saas环境 [BDAutoTrack setCustomHeaderBlock:^NSDictionary<NSString *,id> * _Nonnull{ return @{@"getui_client_id":GeTuiSdk.clientId}; }]; //私有化部署 [BDAutoTrack profileSet:^NSDictionary<NSString *,id> * _Nonnull{ return @{@"getui_client_id":GeTuiSdk.clientId}; }];
在增长分析平台中使用友盟推送进行用户触达,需要按照以下步骤完成友盟通道的配置:
友盟推送有免费版和 Pro 版,如果您想要使用推送报告功能,请购买 Pro 版。
进入「运营优化/推送运营/推送通道管理」,编辑友盟账号AppKey、MasterSecrect等信息,点击保存,并开启友盟推送通道。
如果想使用推送报告功能(需要 U-Push Pro 账号),请在配置界面中勾选。
友盟推送 SDK 的配置过程请参照友盟官方文档:
您需要获得友盟的 DeviceToken,并作为 upush_device_token
公共属性传递给 DataRangers 的 SDK。
deviceToken 是【友盟+】消息推送生成的用于标识设备的id,长度为44位,不能定制和修改。同一台设备上不同应用对应的deviceToken不一样。
Android代码示例:
String resistrationId = mPushAgent.getRegistrationId(); HashMap<String,Object> param = new HashMap<String,Object> (); param.put ("upush_device_token",resistrationId); //saas环境 AppLog.setHeaderInfo (param); //私有化部署 AppLog.profileSet(params);
iOS13代码示例:
#include <arpa/inet.h> - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { if (![deviceToken isKindOfClass:[NSData class]]) return; const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes]; NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]), ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]), ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; NSLog(@"deviceToken:%@",hexToken); }
//saas环境 [BDAutoTrack setCustomHeaderBlock:^NSDictionary<NSString *,id> * _Nonnull{ return @{@"upush_device_token":hexToken}; }]; //私有化部署 [BDAutoTrack profileSet:^NSDictionary<NSString *,id> * _Nonnull{ return @{@"upush_device_token":hexToken}; }];
如果您使用的 U-Push Pro 账号,并想开通推送报告功能,须进行额外配置。具体可见 U-Push Pro 集成文档。
DataFinder 用于接收回执的 URL 如下,须赋值给 receipt_url
,而 receipt_type
须留空。
https://console.volcengine.com/PushCallback/api/v1/UPush/{DataRangers应用的AppId}
除了使用系统提供的Push等常用方式触达用户,在实际运营工作中,还可能用到一些较为个性化的触达通道(如网站的站内信),或者希望在触达前进行一些个性化处理(如希望在Push发送前,向客户账号中添加一个红包)。
为了帮助您对接这些自有或个性化的触达通道,系统提供了Webhook接口对接的方式,在触达执行时,会通过回调的方式通知您的服务接口。
Webhook接口提供单次推送、批量推送两种方式,具体的对接步骤如下:
进入「分析/推送运营/推送通道管理」,切换到「Webhook」,点击新建通道;
通道名称:尽量用运营和业务人员能够直接理解的名称,如「发送站内信」;
回调的url地址:当触达执行时,增长分析平台会通过这个url调用您的服务实际执行触达;
启用聚合批量推送:确认是否使用批量推送方式;
参数模板:创建任务使用该通道时,需要配置的参数值;当触达执行时,平台会将用户配置的参数值下发给您的服务
自定义扩展参数:自定义的通道透传参数,与参数模板类似,区别是需要设置参数值,且无法在创建推送任务时进行配置
单次推送时,增长分析平台会通过POST方法调用webhook接口,传递数据如下:
Webhook接口调用的请求数据示例如下:
{ "push_id":"882f7c1c-af41-4351-9ec1-04a574597055", // 用于识别单条消息的uuid "app_id": 234901, // 应用ID "sign": "f67ebb5fac42feacdee69d77bb0314cf", // 校验签名信息 "timestamp":1606789775, // 发送时间戳 "task":{ // 推送任务信息 "task_id":100, // 推送任务id "task_name":"test_push", // 任务名称 "channel_id":14, // 通道id "channel_name":"发优惠券", // 通道名称 "push_experiment_id": 129103, // 推送实验id "push_experiment_name": "老用户年终回馈实验" // 推送实验名称 }, "receipt_properties": { // 回执属性打包,用户通常无需关心此结构内部细节,在发送回执消息时,直接作为属性 map 使用即可 "push_id": "882f7c1c-af41-4351-9ec1-04a574597055", "user_unique_id" : "hulan@163.com", "push_config_id" : 231122, //强需,任务ID,number类型 "push_batch_id": 2311222343112, //强需,推送的批次ID,number类型 "channel_id": 14, //强需,本次推送任务的webhook通道id "channel_type" : "webhook", //可省略,推送通道类型 "ab_version": "231892", // 实验版本ID。 "push_experiment_id": 129103, //实验ID "task_unit_id":12 // 强需,推送节点ID }, "params": { // 用户在 webhook 通道中配置的模板参数 "action_type": "老用户反馈", // 自定义模板参数「活动类型」 "bonus_type": "抵用金", // 自定义模板参数「奖励类型」 "count" : 200, // 自定义模板参数「金额」 "content_message":"亲爱的${user_nickname} , 您好!\n\r老客户年终回馈,送您${count}元抵用券,给咱娃新年好课选起来咯!" }, "user_info":{ // 用户ID、自定义用户/公共属性信息 "user_unique_id": "hulan@163.com", // 推送用户唯一标识 "device_id": "EA7583CDA6678BC", // 可选,用户的设备 ID "ssid": "12345678901", //可选,用户的唯一ID }, "trigger_time":{ // 手动时间触发条件。当推送任务为自动触发时,为空。多用于webhook中确定触达C端终端用户和数据预处理时间 "trigger_type": 1, //数值型。 1-立即推送,2-定时非例行 3-定时例行 其他值可抛弃 "trigger_routine": "true", // 是否例行重复发送 "trigger_cycle": "daily", // 若trigger_routine为false,不出现该字段。例行推送时,该字段值候选项为daily、weekly、monthly "trigger_weekday": "MON", // 只在trigger_cycle为weekly时出现该字段,表明具体推送是星期几,可多选,以逗号分隔。该字段值候选为MON、TUE、WEDS、THU、FRI、SAT、SUN,例如值为"MON, FRI, SUN"表示周一、周五和周日发送 "trigger_monthday": "1, 10, 20", // 只在trigger_cycle为weekly时出现该字段,表明具体推送是每月几号,可多选,以逗号分隔。该字段值候选为1-31,例如值为"1, 10, 20"表示每月1号、10号、20号发送 "trigger_timestamp": "9:00", // 若trigger_routine为false,不出现该字段。例行推送时,字段值格式为HH:MM,表示在该时间点进行推送 "trigger_datewindow":"2020/01/02-2021/05/20" // 任务发送时间窗口,格式为“YYYY/MM/DD-YYYY/MM/DD” } "trigger_events":{ // 自动事件流触发时记录用户事件行为序列 } }
Webhook接口响应规范要求:
{ "code":200, // 200表示成功,非200表示失败 "message": "Success" // 消息 }
启用批量推送后,增长分析平台会通过POST方法调用webhook接口,请求体则是下面结构的 数组 :
Webhook接口调用的请求数据示例如下:
[ { "push_id":"882f7c1c-af41-4351-9ec1-04a574597055", // 用于识别单条消息的uuid "app_id": "234901", // 应用ID "sign": "f67ebb5fac42feacdee69d77bb0314cf", // 校验签名信息 "timestamp":1606789775, // 发送时间戳 "task":{ // 推送任务信息 "task_id":100, // 推送任务id "task_name":"test_push", // 任务名称 "channel_id":14, // 通道id "channel_name":"发优惠券", // 通道名称 "push_experiment_id": 129103, // 推送实验id "push_experiment_name": "老用户年终回馈实验" // 推送实验名称 }, "receipt_properties": { // 回执属性打包,用户通常无需关心此结构内部细节,在发送回执消息时,直接作为属性 map 使用即可 "push_id": "882f7c1c-af41-4351-9ec1-04a574597055", "user_unique_id" : "hulan@163.com", "push_config_id" : 231122, //强需,任务ID,number类型 "push_batch_id": 2311222343112, //强需,推送的批次ID,number类型 "channel_id": 14, //强需,本次推送任务的webhook通道id "channel_type" : "webhook", //可省略,推送通道类型 "ab_version": "231892", // 实验版本ID,推送实验使用 "push_experiment_id": 129103, //实验ID,推送实验使用 "task_unit_id":12 // 强需,推送节点ID }, "params": { // 用户在 webhook 通道中配置的模板参数 "action_type": "老用户反馈", // 自定义模板参数「活动类型」 "bonus_type": "抵用金", // 自定义模板参数「奖励类型」 "count" : 200, // 自定义模板参数「金额」 "content_message":"亲爱的${user_nickname} , 您好!\n\r老客户年终回馈,送您${count}元抵用券,给咱娃新年好课选起来咯!" }, "user_info":{ // 用户ID、自定义用户/公共属性信息 "user_unique_id": "hulan@163.com", // 推送用户唯一标识 "device_id": "EA7583CDA6678BC", // 可选,用户的设备 ID "ssid": "12345678901", //可选,用户的唯一ID }, "trigger_time":{ // 手动时间触发条件。当推送任务为自动触发时,为空。多用于webhook中确定触达C端终端用户和数据预处理时间 "trigger_type": 1, //数值型。 1-立即推送,2-定时非例行 3-定时例行 其他值可抛弃 "trigger_routine": "true", // 是否例行重复发送 "trigger_cycle": "daily", // 若trigger_routine为false,不出现该字段。例行推送时,该字段值候选项为daily、weekly、monthly "trigger_weekday": "MON", // 只在trigger_cycle为weekly时出现该字段,表明具体推送是星期几,可多选,以逗号分隔。该字段值候选为MON、TUE、WEDS、THU、FRI、SAT、SUN,例如值为"MON, FRI, SUN"表示周一、周五和周日发送 "trigger_monthday": "1, 10, 20", // 只在trigger_cycle为weekly时出现该字段,表明具体推送是每月几号,可多选,以逗号分隔。该字段值候选为1-31,例如值为"1, 10, 20"表示每月1号、10号、20号发送 "trigger_timestamp": "9:00", // 若trigger_routine为false,不出现该字段。例行推送时,字段值格式为HH:MM,表示在该时间点进行推送 "trigger_datewindow":"2020/01/02-2021/05/20" // 任务发送时间窗口,格式为“YYYY/MM/DD-YYYY/MM/DD” } "trigger_events":{ // 自动事件流触发时记录用户事件行为序列 } }, {}, ]
Webhook接口响应规范要求:
针对一次request的response回复body如下所示:
[ { "success": true }, { "success": false, "fail_reason": ".....", // 以下是receipt_properties中参数 "push_id": "882f7c1c-af41-4351-9ec1-04a574597055", "user_unique_id" : "hulan@163.com", "push_config_id" : 231122, "push_batch_id": 2311222343112, "channel_id": 123, "channel_type" : "webhook", "ab_version": "231892", "push_experiment_id": 129103 }, ... ]
为了让webhook接口更加安全,您可以对webhook调用进行安全校验。
我们提供了 签名+IP白名单 两种方式的组合进行校验。
当收到webhook调用请求时,您可以使用sign参数对请求内容进行校验。
校验方法如下:
sign = md5("【app_id】:【task_id】:【push_id】:【user_unique_id】:【timestamp】:【app_secret】")
其中:
示例:
假如appsecret为123456,webhook请求为:
{ "push_id":"882f7c1c-af41-4351-9ec1-04a574597055", // uuid "app_id": 165031, "sign": "f67ebb5fac42feacdee69d77bb0314cf", "timestamp":1606789775, "task":{ // 推送任务信息 "task_id":100, "task_name":"test_push", "channel_id":14, "channel_name":"发优惠券" }, "params":{ // 推送参数 "key1":"value1", "key2":2 }, "user_info":{ // 用户信息 "user_unique_id":"69826555537", "device_id":"3MYRAOL36CVIYK7EDREISWBIA36EQ26KTZOLJMOQIRAXV4VTV5YA01", "getui_client_id":"" // optional }, "trigger_events":[ // 触发条件,自动活动才可能有 { "time":1587626788, // 事件发生时间 "event_name":"gt_init_info", "params":{// 事件参数 "lev":131, "coin_left":392, "coin_type":"钻石", "scene_id":1003, "user":"1018908035", "scene_lev":2 } }, { "time":1587628681, "event_name":"gt_ad_button_click", "params":{ "ad_position":"点位1", "ad_type":"激励视频", "ad_position_type":"双倍金币", "lev":154, "scene_id":1016, "code_id":101232, "user":"1018908035", "scene_lev":3 } } ] }
最终计算的sign为:
sign = md5("165031:100:882f7c1c-af41-4351-9ec1-04a574597055:69826555537:1606789775:123456") = "f67ebb5fac42feacdee69d77bb0314cf"
如果您计算的sign和webhook请求中的sign不同,则请求可能是伪造的。
使用火山引擎增长分析SaaS版,Webhook调用请求会从以下IP地址发出:
如果您需要Webhook通道的到达、点击等回执数据统计报告,可以通过HTTP接口进行回执事件上报,并增加回执属性。上报方式可参考帮助文档「应用接入-服务端接入-HTTP API」)。上报地址样例为:
https://{your_sdk_domain}/v2/event/list
事件/属性的定义如下:
name | 是否预置 | 是否必须 | 附带属性 | 解释 |
---|---|---|---|---|
rangers_push_show | 是 | 是 | 使用receipt_properties 中的属性即可 | 消息触达用户上报的事件。主动事件。 |
rangers_push_click | 是 | 是 | 使用receipt_properties 中的属性即可 | 消息被用户打开时触发上报的事件。如果 Webhook 对接的系统是第三方/自研推送系统,需在客户的 App 端对此事件埋点。主动事件。 |
rangers_webhook_XXX | 否 | 否 | 使用receipt_properties 中的属性即可 | 客户自定义的 Webhook 回执成功事件,例如站内消息发送成功、优惠券发送成功、支付成功等深度转化事件等,非必须。 |
以rangers_push_show举例,上报埋点事件样例:
https://{your_sdk_domain}/v2/event/list POST header: Content-Type: application/json X-MCS-AppKey: your_app_key body: [{ "events": [{ "event": "rangers_push_show", //触达事件名称,必选 "params": "{ \"push_config_id\": 231122, //强需,任务ID,int64类型。 \"push_batch_id\": 2311222343112, //强需,推送的批次ID,int64类型 \"push_id\": \"21234\", //Message ID,string类型 \"channel_id\": 123, //强需,推送通道ID,int32类型 \"channel_type\": \"\",//推送通道类型,string类型 \"ab_sdk_version\": \"\",//强需,实验vid,string类型,对应ab_version字段 \"$task_unit_id\": 231122,//强需,推送节点id,int32类型,对应task_unit_id字段 }", "local_time_ms": 1608455325028, //事件毫秒时间戳必选 }], "user": { "user_unique_id": "hulan@163.com", //强需,请求体user_info中的user_unique_id字段,string类型 "ssid": "12345678901", //请求体user_info中的ssid字段,string类型 "bddid": "EA7583CDA6678BC", //saas使用bddid字段,上报请求体user_info中的device_id字段,string类型 "device_id": "EA7583CDA6678BC",//私有化使用device_id字段,上报请求体user_info中的device_id字段,string类型 }, "header": { "app_id": 234901, //强需,app_id 必须,int32类型 "ab_sdk_version": "", //强需,实验vid,string类型,对应ab_version字段 } }]
Response返回值:
{ "Type": "Web/Mp(MiniProgram)", "e": 0, // 是否有error,0表示正常 "message": "success", // 输出结果,success表示成功 "sc": 1, // 成功处理的条数 "server_time": 1616587176 // 服务端处理时间 }
客户端上报回执数据使用埋点sdk,事件上报方式同其他自定义埋点(各版本sdk集成方式参考:Android SDK接入),回执数据的事件及属性定义如下:
事件名 | 属性 | 描述 |
---|---|---|
rangers_push_show | push_config_id | 推送任务id,强需 |
push_batch_id | 推送批次id,强需 | |
channel_id | 推送通道id,强需 | |
ab_sdk_version | 实验版本id,强需 | |
push_id | 消息id,非必需 | |
channel_type | 推送通道类型,非必需 | |
$task_unit_id | 强需,推送节点id | |
rangers_push_click | push_config_id | 推送任务id,强需 |
push_batch_id | 推送批次id,强需 | |
channel_id | 推送通道id,强需 | |
ab_sdk_version | 实验版本id,强需 | |
push_id | 消息id,非必需 | |
channel_type | 推送通道类型,非必需 | |
$task_unit_id | 强需,推送节点id |
以Android SDK为例:账户登录、事件公共属性、用户属性沿用其他埋点,无需改动,上报消息到达(rangers_push_show)事件demo如下:
// 以rangers_push_show(消息到达)为例 // 上报event+params JSONObject paramsObj = new JSONObject(); try { paramsObj.put("push_config_id", 231122); //事件属性 推送任务id 强需 paramsObj.put("push_batch_id",20); //推送批次 强需 paramsObj.put("push_id","21234"); //消息id。非必需 paramsObj.put("channel_id",124); //强需,推送通道ID paramsObj.put("channel_type","21234"); //推送通道类型,string类型 非必需 paramsObj.put("ab_sdk_version","21234"); //强需,实验vid,string类型 paramsObj.put("$task_unit_id",124); //强需,推送节点ID } catch (JSONException e) { e.printStackTrace(); } AppLog.onEventV3("rangers_push_show", paramsObj);
微信侧接入参考文档 微信公众号开发接入指南,填写回调服务器地址URL、Token、EncodingAESKey等信息。回调服务器地址URL可通过「接入微信公众号」-「服务URL」获取
在「应用管理」-「数据集成」-「数据接入」-「第三方数据接入」-「微信公众号」点击新接入公众号
微信公众号模版是在微信开放平台后台进行配置,可选择已有的模板进行消息配置,支持配置跳转动作。
可通过该页面配置批量修改用户的标签,标签为所选公众号创建的标签