简介
本文档描述了第三方软件服务商(以下简称ISV)接入京东云自动化营销平台,所需的接口,包括:京东云提供的API接口,以及ISV提供的API接口。默认为京东云提供接口,ISV提供的接口,会在接口名称后面以【ISV提供】标识。
业务名词释义
人群对象:人群标签的规则组,即文档中的search_id(人群对象ID)
人群对象实例:人群对象实例化后的结果集(对应人群快照),即文档中的package_id(人群对象实例ID,也称包ID)
京东云提供接口通用申明
权限认证
京东云提供的接口,默认采用京东云网关的鉴权,需要ISV在京东云注册账号,并且在京东云控制台创建Access Key(简称AK),并生成Access Key Secret(简称SK)。ISV将Access Key提供给京东云侧人员,由京东云对AK进行请求授权,生成SDK(现在提供java和python的sdk,其它开发语言,请通过HTTP方式调用),将SDK交由ISV。ISV在项目中引入 SDK,通过AK、SK,请求京东云的API。
生成AK和SK
注册京东云后登录京东云,进入控制台(https://console.jdcloud.com/overview),点击右上角个人信息,进入Access Key管理。
按步骤创建AK和SK即可。
编码方式
若无特殊说明或应答头中的 Content-Type 未指定编码,请求和应答中的字符编码均使用 utf-8(无 BOM 头)。
API请求
HTTPMethod
目前接口HTTP Method有GET和POST。
HTTPHeader
请求方法为 GET,不需要指定Content-Type。
请求方法为POST,Content-Type 应为 application/json; charset=UTF-8。
API应答
HttpHeader
Content-Type: application/json; charset=UTF-8。
HTTPBody
所有接口响应参数格式如下:
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
code | String | 是 | 状态码 0=调用成功,非0=调用失败 |
msg | String | 是 | 错误信息 |
data | Json | 否 | code=0时,返回业务数据,具体返回内容见各接口定义。code!=0时,返回null。 |
ISV提供接口通用申明
===================
编码方式
若无特殊说明或应答头中的 Content-Type 未指定编码,请求和应答中的字符编码均使用 utf-8(无 BOM 头)。
Token校验
描述
为保证通信安全,调用ISV接口时参数中会添加一个token作为安全令牌。ISV收到请求后根据生成规则生成 token 值,并与接口参数中获取的 token 值进行比较,完全相同即为校验通过。token值由每次传递的参数和双方约定key共同决定。
Key值获取
由ISV提供,建议生成规则:32位长度,大写字母+小写字母+数字。
token值生成
说明
token值作为安全校验必有参数,运营后台每次调用ISV接口参数中都会带有 token 值。服务商根据生成规则生成 token值,并与接口中获取的 token 值进行比较。完全相同即为校验通过。
生成规则
取每次http get和post 请求参数中除token以外的其它所有参数,排除值为空的参数,对参数名进行字典排序,并且对参数进行请求地址encode,编码类型为utf-8,在排序后的字符串最后加上 &key=[约定key值],然后对整个字符串进行 md5 加密,加密后的字符串作为token值。
示例
- ISV收到的请求示例:
http://www.isvwebsite.com?p1=1&p2=2&p3=3&token=xxxx |
---|
- 进行排序操作:排除值为空的参数,遍历对每个参数进行请求地址encode
sort(P1,P2,P3); |
---|
- token值:对拼接后字符串进行MD5加密,注意:不需要进行请求地址 encode
“p1=1&p2=2&p3=3&key=isvkey”.toMD5() |
---|
京东云联合登录
品牌商登录ISV系统,需要使用京东云联合登录。帮助文档如下:
- 创建应用地址:
ISV提供京东云pin,我们为其开通灰度权限后,可在此看到菜单:管理-身份认证-应用管理
或者直接访问URL:https://ias-console.jdcloud.com/ias/apps
- 文档:
请查看PDF文档 京东云OAuth2.0服务对接说明
API请求
HTTPMethod
目前接口HTTP Method有GET和POST
HTTPHeader
请求方法为 GET,不需要指定Content-Type。
请求方法为POST,Content-Type 应为 application/json; charset=UTF-8。
API应答
HttpHeader
Content-Type: application/json; charset=UTF-8。
HTTPBody
所有接口响应参数格式如下:
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
code | String | 是 | 状态码 0=调用成功,非0=调用失败 |
msg | String | 是 | 错误信息 |
data | Json | 否 | code=0时候的返回数据 |
接口描述
========
品牌商相关
- 创建品牌商账号【ISV提供】
说明
京东云侧创建完品牌商账号后,需要将品牌商信息同步给ISV系统。
请求
请求地址:/JDCloud/master/sync
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
master_name | String | 是 | 品牌商名称 |
master_desc | String | 是 | 品牌商描述 |
shop_id | String | 是 | 品牌商对应的店铺ID |
shop_type | String | 是 | 店铺类型:1=自营 2=pop |
user_type | String | 是 | 用户类型:1=商家 |
expire_time | long | 是 | 有效期,时间戳,单位:秒 |
status | int | 是 | 状态:1=正常 0=冻结 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:1=成功 0=失败 |
示例
请求参数:
{
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”,
“master_name”:”测试品牌商”,
“master_desc”:”测试品牌商”,
“shop_id”:”10000087”,
“shop_type”:”1”,
“user_type”:”1”,
“expire_time”:1577807999,
“status”:1
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“status”:”1”
}
}
更新品牌商账号【ISV提供】
说明
京东云侧修改品牌商账号信息后,需要将品牌商信息同步给ISV系统。
请求
请求地址:/JDCloud/master/edit
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
expire_time | long | 是 | 有效期,时间戳,单位:秒 |
status | int | 是 | 状态:1=正常 0=冻结 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:1=成功 0=失败 |
示例
请求参数:
{
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”,
“expire_time”:1577807999,
“status”:1
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“status”:”1”
}
}
验证登录用户
说明
ISV系统使用京东云授权登录机制进行登录认证,当用户登录后,ISV系统通过此接口验证当前用户是否是合法的品牌商。
请求
请求地址:/master/verify
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_pin | String | 是 | 品牌商登录pin |
响应参数
名称 | 类型 | 描述 |
---|---|---|
valid | String | 结果:1=合法用户 0=非法用户 |
master_id | String | 如果是合法用户,返回对应的品牌商ID |
示例
请求参数:
{
“master_pin”:”jiangkun”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“valid”:”1”,
**“master_id”**:**”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”**
}
}
人群对象相关
获取标签列表
请求
请求地址:/tag/list/v2
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
无 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
tag | String | 标签名称 |
instruction | String | 标签描述 |
table_cd | String | 标签所属表 |
tag_type | String | 标签类型 |
enums | String | 标签值,如:[“a”,”b”],没有则为[] |
示例
请求参数:
无
响应参数:
{
“code”:”0”,
“msg”:”success”,
“data”:[
{
“tag”:”TAG_001”,
“instruction”:”用户年龄”,
“table_cd”:”001”,
“tag_type”:”1”,
“enums”:[
“15岁~25岁”,
“35岁~45岁”,
“45岁~55岁”,
“55岁以上”
]
},
{
“tag”:”TAG_101”,
“instruction”:”店铺会员”,
“table_cd”:”003”,
“tag_type”:”0”,
“enums “:[
“是”,
“否”
]
}
]
}
新建人群对象
说明
根据筛选条件生成人群人群对象(可以理解为人群对象里保存的是筛选条件),而非实际人群。拿人群对象去参与后续的人群运算和短信发送等营销活动,在人群运算和短信发送等营销活动时根据人群对象实时生成人群实例参与运算。
请求
请求地址:/crowd/create/v2
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
data_type | String | 是 | 结果包类型:1=PIN 2=OPEN_ID,固定传1 |
condition | String | 是 | 筛选条件,JSON格式条件,借鉴elasticsearch查询语法 |
crowd_name | String | 是 | 人群对象名称 |
crowd_desc | String | 是 | 人群对象描述 |
master_id | String | 是 | 品牌商ID |
crowd_type | String | 是 | 人群对象的类型:1=人群提取 2=人群计算 3=人群另存 4=人群上传,固定传1 |
package_type | int | 是 | 人群类型:1=公域人群 2=私域人群 必须和condition中的私域标签保持一致,比如查询condition是私域的,则人群类型必须也是私域的。 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
search_id | String | 人群对象ID |
请求参数condition参数详解:
整个查询语句是一个json对象,作为字符串参数,需要转义双引号 \”。
整个语句的构造需查看标签文档。
条件查询
结构描述:
是一个json对象
只有一个key且是固定的term、terms、range、bool
value为json对象
对于上面2的json对象
bool查询
- 见下方
其他查询
只有一个key且是标签的code,
value为标签的值(枚举code或者手写值)。
term:等值查询
{
“term”:{
“TAG_020”:{
“value”:”TAG_020_01”
}
}
}
- terms:in查询
{
“terms”:{
“TAG_805”:[
“7066”,
“7069”,
“7070”,
“7068”,
“7067”,
“7071”
]
}
}
- range:范围查询 gte,lte,gt,lt
{
“range”:{
“TAG_552”:{
“gte”:1,
“lte”:3
}
}
}
bool:布尔查询,内部key为关系词—见下方
通用规则
必须包含且只能包含must、should的一个
只有第一层的bool可以包含must_not,且必须配合should或must使用
规则2
- 第二层bool的key必须包含group
{
“bool”:{
“group”:”011”,
“must”:[
]
}
}
- 规则3
{
“bool”:{
“must”:[
]
}
}
关系词 , 值为json数组,内嵌json对象(条件查询),只能作为bool查询的key
通用规则
must、should在同一bool内只能包含一个
must_not必须配合should或者must使用,且只能出现在第一层bool内
must
{
“bool”:{
“must”:[
]
}
}
- should
{
“bool”:{
“should”:[
]
}
}
- must_not
{
“bool”:{
“must”:[
],
“must_not”:[
]
}
}
- 第一层必须是一个bool查询:用来确定不同索引(相当于数据库里的表)之间的合并算法:must(交集)、should(并集)、must_not(差集)
{
“bool”:{
“must”:[
{
“bool”:{
}
},
{
“bool”:{
}
}
],
“must_not”:[
{
“bool”:{
}
},
{
“bool”:{
}
}
]
}
}
- 第二层(关系词对应的json数组内)必须是一个带group索引分组信息bool查询(用来判断从哪个索引找数据):
{
“bool”:{
“group”:”011”,
“must”:[
]
}
}
第三层(关系词对应的json数组内)往后没有特殊限制,可以包含所有的条件查询:
所有的标签都必须是二层的group下的标签
同一个group下不同时间窗口的标签也不能在一起(搜索词除外),如果想筛选同一个group下的不同区间的标签,需要在相应的关系词内添加一个带group的bool查询,看下面的例子
筛选对10000032222店铺的3天浏览大于 10次、加购大于1次,7天浏览大于50次、加购大于2次的人,应该这么实现(其实这种应用场景并不常见):
{
“bool”:{
“must”:[
{
“bool”:{
“group”:”011”,
“must”:[
{
“term”:{// 店铺标签代码
“TAG_501”:{
“value”:”10000032222”
}
}
},
{
“range”:{// 用户对店铺三日浏览量
“TAG_503”:{
“gt”:10
}
}
},
{
“range”:{// 用户对店铺三日加购量
// 同一时间窗口可以在一个group下
“TAG_507”:{
“gt”:1
}
}
}
]
}
},
{
“bool”:{
“group”:”011”,
“must”:[
{
“term”:{// 店铺标签代码
“TAG_501”:{
“value”:”1000003263”
}
}
},
{
“range”:{// 用户对店铺七日浏览量
“TAG_504”:{
“gt”:50
}
}
},
{
“range”:{// 用户对店铺七日成交量
// 同一时间窗口可以在一个group下
“TAG_515”:{
“gt”:0
}
}
}
]
}
}
]
}
}
请求参数condition示例
支持的索引:001至014共14个索引,请详查介绍
一个典型的交集查询
001索引中找:
已婚 AND (16-25岁 OR 46-55岁) AND ( 促销敏感度类型为L1-1 OR 用户大促偏好为高度敏感 ) 的用户群
011索引中找:
对店铺3天浏览大于10次的用户群
并对两个索引的结果进行交集计算
{// 第一层必须为bool查询,用来确定不同结构索引之间的合并策略
“bool”:{
// must=交集, should=并集,must_not=差集
“must”:[
{ // 第二层必须为bool查询,且需要带group信息来确定数据来源
“bool”:{
“group”:”001”,
“must”:[
{
“term”:{
“TAG_001”:{
“value”:”TAG_001_02”
}
}
},
{
“terms”:{
“TAG_021”:[
“TAG_021_02”,
“TAG_021_05”
]
}
},
{
“bool”:{
“should”:[
{
“term”:{
“TAG_025”:{
“value”:”TAG_025_01”
}
}
},
{
“term”:{
“TAG_028”:{
“value”:”TAG_028_04”
}
}
}
]
}
}
]
}
},
{
“bool”:{
“group”:”011”,
“must”:[
{
“term”:{
“TAG_501”:{
“value”:”10000032222”
}
}
},
{
“range”:{
“TAG_503”:{
“gt”:10
}
}
}
]
}
}
]
}
}
示例
请求参数:
{
“data_type”:”1”,
“crowd_name”:”测试人群对象名称”,
“crowd_desc”:”测试人群对象描述”,
“master_id”:”ac33ff50-a8fe-46db-86be-b62bdb8de7bb”,
“crowd_type”:”1”,
“package_type”:2,
“condition”:”{\”bool\”:{\”must\”:[{\”bool\”:{\”group\”:\”011\”,\”must\”:[{\”range\”:{\”TAG_513\”:{\”gte\”:1}}},{\”term\”:{\”TAG_501\”:{\”value\”:1000002847}}}]}}]}}”
}
响应参数:
{
“code”:”0”,
“msg”:”success”,
“data”:{
“search_id”:”055682112bda7b20479b962ab529a484”
}
}
编辑人群对象
请求
请求地址:/crowd/edit/v2
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
search_id | String | 是 | 人群对象ID |
condition | String | 是 | 筛选条件,JSON格式条件,继承elasticsearch查询预发 |
crowd_desc | String | 否 | 人群对象描述 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:0=成功 -1=失败 |
示例
请求参数:
{
“search_id”:”055682112bda7b20479b962ab529a484”,
“crowd_name”:”测试人群对象名称”,
“crowd_desc”:”测试人群对象描述”,
“condition”:”{“bool”:{“must”:[{“bool”:{“group”:”011”,”must”:[{“range”:{“TAG_513”:{“gte”:1}}},{“term”:{“TAG_501”:{“value”:1000002847}}}]}}]}}”
}
响应参数:
{
“code”:”0”,
“msg”:”success”,
“data”:{
“status”:”0”
}
}
删除人群对象
请求
请求地址:/crowd/del
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
search_id | String | 是 | 人群对象ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:0=成功 -1=失败 |
示例
请求参数:
{
“search_id”:”055682112bda7b20479b962ab529a484”
}
响应参数:
{
“code”:”0”,
“msg”:”success”,
“data”:{
“status”:”0”
}
}
获取人群对象详情
请求
请求地址:/crowd/info
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
search_id | String | 是 | 人群对象ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
search_id | String | 人群对象ID |
data_type | String | 结果包类型 |
crowd_type | int | 人群对象类型,具体参考附录1 |
condition | String | 筛选条件 |
crowd_name | String | 人群对象名称 |
crowd_desc | String | 人群对象描述 |
master_id | String | 品牌商ID |
package_type | int | 人群类型:1=公域 2=私域 |
示例
请求参数:
{
“search_id”:”d5f06320f8253e7b95f3aa5726882f85”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“condition”:”{“bool”:{“must”:[{“bool”:{“group”:”003”,”must”:[{“bool”:{“must”:[{“range”:{“TAG_321”:{“gte”:1}}},{“terms”:{“TAG_310”:[“100000652875”,”100000652897”]}}]}},{“term”:{“TAG_309”:{“value”:1000003263}}}]}}]}}”,
“search_id”:”d5f06320f8253e7b95f3aa5726882f85”,
“data_type”:”1”,
“crowd_type”:1,
“crowd_name”:”测试人群对象名称”,
“crowd_desc”:”测试人群对象描述”,
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”,
“package_type”:1
}
}
获取人群对象列表
说明
分页查询
请求
请求地址:/crowd/list
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
crowd_name | String | 否 | 人群对象名称,支持模糊搜索 |
crowd_type | int | 否 | 人群对象类型,仅支持1/3/4,具体值参考附录 |
page_num | int | 否 | 当前页,默认值1 |
page_size | int | 否 | 每页条数,默认值10 |
package_type | int | 否 | 人群类型:1=公域人群,2=私域人群 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
page_num | int | 当前页 |
page_size | int | 每页条数 |
order_by | String | 排序条件 |
total | long | 总记录条数 |
pages | int | 总页数 |
result | List\ | 人群对象记录 |
Object
名称 | 类型 | 描述 |
---|---|---|
search_id | String | 人群对象ID |
date_type | String | 结果包类型 |
crowd_type | int | 人群对象类型 |
condition | String | 筛选条件 |
crowd_name | String | 人群对象名称 |
crowd_desc | String | 人群对象描述 |
master_id | String | 品牌商ID |
create_time | String | 创建时间 |
package_type | int | 人群类型:1=公域 2=私域 |
示例
请求参数:
{
“master_id”:”ac33ff50-a8fe-46db-86be-b62bdb8de7b6”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“total”:791,
“pages”:80,
“page_num”:1,
“page_size”:10,
“order_by”:null,
“result”:[
{
“condition”:”{“bool”:{“must”:[{“bool”:{“must”:[{“term”:{“TAG_310”:{“value”:”eqwew”}}},{“bool”:{“should”:[{“term”:{“TAG_316”:{“value”:10}}},{“term”:{“TAG_316”:{“value”:0}}}]}}],”group”:”003”}}]}}”,
“search_id”:”30ec48323819424808463615aeffdfc1”,
“data_type”:”1”,
“crowd_type”:1,
“crowd_name”:null,
“crowd_desc”:”sku06”,
“master_id”:”ac33ff50-a8fe-46db-86be-b62bdb8de7b6”,
“create_time”:”2019-07-12 21:19:25”,
“package_type”:1
}
]
}
}
人群对象实例化
请求
请求地址:/crowd/init
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
search_id | String | 是 | 人群对象ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
search_id | String | 人群对象ID |
package_id | String | 人群对象实例ID |
示例
请求参数:
{
“search_id”:”d5f06320f8253e7b95f3aa5726882f85”
}
响应参数:
{
“code”:”0”,
“msg”:”success”,
“data”:{
“search_id”:”d5f06320f8253e7b95f3aa5726882f85”,
“package_id”:”8197a201-cff3-4251-99bc-0c0f67205316”
}
}
人群对象实例相关
获取人群对象实例详情
说明
该接口计划将传参方式从path_variable改成query_string
请求
请求地址:/crowd/instance/status/{package_id}
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
package_id | String | 是 | 人群对象实例ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 人群对象实例状态:0=生成中 1=生成失败 2=生成成功 |
package_size | String | 包大小,人群包中人群的数量【精确值】,生成中、生成失败,为0 |
package_size_view | String | 包大小模糊值,生成中、生成失败,为0 |
package_type | int | 人群类型:1=公域人群 2=私域人群 |
示例
请求:
GET /crowd/instance/status/b8dac175-630b-4cf0-9b2f-d83bafb3f1a5
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“status”:”2”,
“package_size”:”44647”,
“package_size_view”:”44647”,
“package_type”:1
}
}
人群对象实例另存为
说明
根据人群对象实例id,复制原人群对象和人群对象实例,生成新的人群对象和人群对象实例。
请求
请求地址:/crowd/instance/saveas
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
package_id | String | 是 | 人群对象实例ID |
crowd_name | String | 是 | 人群对象名称 |
crowd_desc | String | 是 | 人群对象描述 |
master_id | String | 是 | 品牌商ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
search_id | String | 人群对象ID |
示例
请求参数:
{
“package_id”:”8197a201-cff3-4251-99bc-0c0f67205316”,
“crowd_name”:”测试人群对象名称”,
“crowd_desc”:”测试人群对象描述”,
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”
}
响应参数:
{
“code”:”0”,
“msg”:”success”,
“data”:{
“search_id”:”23c9207cbed53771463565a5bf45f791”
}
}
人群计算
说明
该接口为自动化营销平台核心接口,可对对实例化生成的多个包进行计算,根据业务,可实现三种方式的计算:
求并集(多个人群包合并到一起)
求交集(多个人群包中重复的人)
求差集(多个人群包中不重复的人)
请求
请求地址:/crowd/instance/calc
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
data_type | String | 是 | 结果包类型,固定传1 |
condition | String | 是 | 筛选条件,JSON格式条件串,集成elasticsearch查询语法,参数必须是人群对象实例ID。 |
crowd_name | String | 是 | 人群对象名称 |
crowd_desc | String | 是 | 人群对象描述 |
master_id | String | 是 | 品牌商ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
search_id | String | 人群对象ID |
package_id | String | 人群对象实例ID |
package_status | String | 人群对象实例化状态:0=正在计算 1=生成失败 2=生成成功 |
请求参数condition示例
- must交集(A and B)
{
“bool”:{
“must”:[
{
“term”:{
“package_id”:{
“value”:”94e462df-e0d2-4ea0-896b-baca7fbd8276”
}
}
},
{
“term”:{
“package_id”:{
“value”:”ba7836e1-feb1-438f-adfe-5b0c5507a2a4”
}
}
}
]
}
}
- should并集(A or B or C)
{
“bool”:{
“should”:[
{
“term”:{
“package_id”:{
“value”:”e3e1663c-cfb6-4875-8a98-cb10ca05f2e7”
}
}
},
{
“term”:{
“package_id”:{
“value”:”a1ecbdc6-1e48-4bbd-b139-d3210a47a6d7”
}
}
},
{
“term”:{
“package_id”:{
“value”:”4cb7bdc0-d77d-4676-a4e2-a9f594ce94c6”
}
}
}
]
}
}
- must_not差集((A or B) not in (a and b))
{
“bool”:{
“should”:[
{
“term”:{
“package_id”:{
“value”:”7dec9b67-6189-4992-a075-c40919de6faf”
}
}
}
],
“must_not”:[
{
“term”:{
“package_id”:{
“value”:”42779b68-8498-470d-85d0-467f40eeff6a”
}
}
}
]
}
}
示例
请求参数:
{
“data_type”:”1”,
“crowd_name”:”测试人群运算名称”,
“crowd_desc”:”测试人群运算名称”,
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”,
“condition”:”{“bool”:{“should”:[{“term”:{“package_id”:{“value”:”e3e1663c-cfb6-4875-8a98-cb10ca05f2e7”}}},{“term”:{“package_id”:{“value”:”8197a201-cff3-4251-99bc-0c0f67205316”}}},{“term”:{“package_id”:{“value”:”4cb7bdc0-d77d-4676-a4e2-a9f594ce94c6”}}}]}}”
}
响应参数:
{
“code”:”0”,
“msg”:”success”,
“data”:{
“search_id”:”24206fba85a1e09b29a24370f29957ce”,
“package_id”:”5c9ec30f-4507-4bd1-a15a-2e89828c5e74”,
“package_status”:”0”
}
}
人群抽取
说明
指定比例或者具体的数量,将一个人群对象实例拆分成多个人群对象和人群对象实例。按比例抽取,比例之和不能超过1。按数量抽取,数量之和不能超过人群对象实例中人的总数。
请求
请求地址:/crowd/instance/split
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 | ||||
---|---|---|---|---|---|---|---|
package_id | String | 是 | 人群对象实例ID | ||||
ratio | List\ |
是 | 抽取比例,如:[自定义名1\ | 0.4,自定义名2\ | 0.6] 或:[自定义名1\ | 1000,自定义名2\ | 2000] |
type | String | 是 | 抽取类型:0=百分比 1=人数 |
响应参数
名称 | 类型 | 描述 | |
---|---|---|---|
package_id | String | 人群对象实例ID | |
package_size | String | 人群对象实例的人数(包大小) | |
package_name | String | 人群对象实例名称,抽取比例的名称,比如“自定义名1\ | 0.4” |
示例
请求参数:
{
“package_id”:”b8dac175-630b-4cf0-9b2f-d83bafb3f1a5”,
“ratio”:[
“测试抽取1|0.1”,
“测试抽取2|0.1”
],
“type”:”0”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:[
{
“package_size”:”4464”,
“package_name”:”测试抽取1|0.1”,
“package_id”:”111a85b1-e732-4997-8127-bdfe446ad68d”
},
{
“package_size”:”4464”,
“package_name”:”测试抽取2|0.1”,
“package_id”:”272ba9b6-9031-4016-956a-80a0b315235a”
}
]
}
响应节点筛选
说明
适用于通过线上方式进行短信触达或者优惠券触达的包,根据筛选类型(可传多个类型),查询出符合筛选类型的人群,生成新的人群对象和人群对象实例。
请求
请求地址:/crowd/instance/filter
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
package_id | String | 是 | 人群对象实例ID |
filter_types | List\ |
是 | 筛选类型:1=受限制 2=未知状态 3=发送失败 4=发送成功 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
package_id | String | 人群对象实例ID |
filter_type | String | 筛选类型 |
示例
请求参数:
{
“package_id”:”b8dac175-630b-4cf0-9b2f-d83bafb3f1a5”,
“filter_type”:[
“1”,
“2”
]
}
响应参数:
{
“code”:”0”,
“msg”:” success “,
“data”:[
{
“package_id”:”810ce39a-8131-48de-9bd8-deda61e38dc3”,
“filter_type”:”2”
},
{
“package_id”:”810ce39a-8131-48de-9bd8-deda61e38dc2”,
“filter_type”:”1”
}
]
}
触发人群营销
说明
支持公、私域短信触达、公、私域优惠券触达。
请求
请求地址:/crowd/instance/reach
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
package_id | String | 是 | 人群对象实例ID |
type | String | 是 | 触达类型 |
params | Object | 是 | 参数集合 |
Object【type=SMSPUBLIC 公域短信】
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
template_id | String | 是 | 短信模板ID |
template_params | String | 是 | 短信模板参数,JSON String |
send_time | Date | 否 | 发送时间,格式:yyyy-MM-dd HH:mm:ss |
Object【type=SMSPRIVATE 私域短信】
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
template_id | String | 是 | 短信模板ID |
template_params | String | 是 | 短信模板参数,JSON String |
signature_id | String | 是 | 签名ID |
send_time | Date | 否 | 发送时间,格式:yyyy-MM-dd HH:mm:ss |
Object【type=COUPONPUBLIC 公域优惠券】
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
template_id | String | 是 | 短信模板ID |
template_params | String | 是 | 短信模板参数,JSON String |
batch_id | String | 是 | 优惠券ID |
send_time | Date | 否 | 发送时间,格式:yyyy-MM-dd HH:mm:ss |
Object【type=COUPONPRIVATE 私域优惠券】
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
template_id | String | 是 | 短信模板ID |
template_params | String | 是 | 短信模板参数,JSON String |
signature_id | String | 是 | 签名ID |
batch_id | String | 是 | 优惠券ID |
send_time | Date | 否 | 发送时间,格式:yyyy-MM-dd HH:mm:ss |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:0=成功 其它=失败 |
示例
请求参数:
{
“package_id”:”07fecfbb-5c47-4d47-ab1d-3a2f197b8738”,
“type”:”SMSPRIVATE”,
“params”:{
“template_id”:”4365”,
“template_params”:”{“nick”:”kocor”,”time”:”2019”,”url”:”http://jd.com”}”,
“signature_id”:”1111”,
“batch_id”:”2222”
}
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“status”:”0”
}
}
短信相关
长链接转换成短链接
说明
短信触达中,如果包含URL,为了节省短信数量,可以将长链转换为短链。
短链系统要求,如果域名后面直接加请求参数,需要在”?”之前加上”/”,比如:
https://www.jd.com/index.html?a.txt
请求
请求地址:/shorturl/create
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
url | String | 是 | 长链地址,querystring中必须包含utm_source和utm_campaign,埋点信息作为统计转换的依据。并且utm_campaign必须包含2个下划线。 utm_souce=这个由ISV侧和京东云侧协商制定 utm_campaign=包ID店铺ID_SKU |
响应参数
名称 | 类型 | 描述 |
---|---|---|
short_url | String | 生成的短链url |
示例
请求参数:
响应参数:
{
“result”:”0”,
“msg”:” success “,
“data”:{
“short_url”:”3.cn/HaZCkiz”
}
}
获取短信模板列表
说明
获取品牌商的公域和私域的模板列表。
请求
请求地址:/sms/templates
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
type | int | 是 | 类型:1=公域 2=私域 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
template_id | String | 模板ID |
template_name | String | 模板名称 |
template_content | String | 模板内容,包含占位符 |
template_params | String | 模板内容占位符key名称,所有用户收到的短信内容都是一样的。 |
示例
请求参数:
{
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”,
“type”:1
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:[
{
“template_id”:”4366”,
“template_name”:”戴森活动模板01”,
“template_content”:”亲爱的{nick},现诚邀您参加新品发布{time},请点击{url}参加此活动,回复TDQR退订”,
“template_params”:”[“nick”,”time”,”url”]”
},
{
“template_id”:”4367”,
“template_name”:”戴森活动模板02”,
“template_content”:”亲爱的{nick},现诚邀您参加新品发布{time},请点击{url}参加此活动,回复TDQR退订”,
“template_params”:”[“nick”,”time”,”url”]”
},
{
“template_id”:”2121”,
“template_name”:”gaowp模版”,
“template_content”:”gaowp::”,
“template_params”:”[]”
}
]
}
获取短信签名列表
说明
获取品牌商的私域的签名列表。目前,公域签名只有一个“【京东】”,私域的人群包进行触达时,不需要传签名id。因此该接口只能获取私域签名列表。
请求
请求地址:/sms/signature
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
type | int | 是 | 类型:1=公域 2=私域,固定传2 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
signature_id | String | 签名ID |
signature_name | String | 签名名称 |
type | String | 类型:1=公域 2=私域 |
示例
请求参数:
GET /sms/signature?master_id=63d1f0a3-0b2b-4da3-a35f-007ae0672a10&type=2
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:[
{
“type”:2,
“signature_id”:”1c5466bb7e685bb2edb5d5854d6e5953”,
“signature_name”:”【测试签名】”
},
{
“type”:2,
“signature_id”:”13e”,
“signature_name”:”【戴森测试】”
}
]
}
获取品牌商短信余额
请求
请求地址:/sms/balance
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
public_balance | long | 公域短信余额 |
private_balance | long | 私域短信余额 |
示例
请求参数:
GET /sms/balance?master_id=63d1f0a3-0b2b-4da3-a35f-007ae0672a10
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“public_balance”:65282,
“private_balance”:97097
}
}
获取品牌商短信充值记录列表
说明
分页查询
请求
请求地址:/sms/recharge
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
start_date | Date | 否 | 开始时间,格式:yyyy-MM-dd HH:mm:ss |
end_date | Date | 否 | 结束时间,格式:yyyy-MM-dd HH:mm:ss |
page_num | int | 否 | 页数,默认1 |
page_size | int | 否 | 每页条数,默认10 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
page_num | int | 当前页数 |
page_size | int | 每页条数 |
order_by | String | 排序 |
total | long | 总记录条数 |
pages | int | 总页数 |
result | List\ | 充值记录列表 |
Object
名称 | 类型 | 描述 |
---|---|---|
order_id | String | 订单编号 |
number | long | 充值数量 |
type | int | 类型:1=公域 2=私域 |
status | int | 状态:1=成功 |
create_time | Date | 充值时间 |
示例
请求参数:
GET /sms/recharge?master_id=63d1f0a3-0b2b-4da3-a35f-007ae0672a10
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“total”:3,
“pages”:1,
“page_num”:1,
“page_size”:10,
“order_by”:null,
“result”:[
{
“number”:1000,
“type”:2,
“status”:1,
“order_id”:”1c5466bb7e685bb2edb5d5854d6e5953”,
“create_time”:”2019-05-16 16:34:26”
},
{
“number”:2,
“type”:1,
“status”:1,
“order_id”:”12312312”,
“create_time”:”2019-05-22 19:58:55”
}
]
}
}
获取品牌商短信消费记录列表
说明
分页查询
请求
请求地址:/sms/consume
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
start_date | Date | 否 | 开始时间,格式:yyyy-MM-dd HH:mm:ss |
end_date | Date | 否 | 结束时间,格式:yyyy-MM-dd HH:mm:ss |
page_num | int | 否 | 页数,默认1 |
page_size | int | 否 | 每页条数,默认10 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
page_num | int | 当前页数 |
page_size | int | 每页条数 |
order_by | String | 排序 |
total | long | 总记录条数 |
pages | int | 总页数 |
result | List\ | 消费记录列表 |
Object
名称 | 类型 | 描述 |
---|---|---|
consume_id | String | 消费编号 |
number | long | 消费数量 |
type | int | 类型:1=公域 2=私域 |
direction | int | 方向:1=消费 2=退还 |
create_time | Date | 充值时间 |
示例
请求参数:
GET /sms/consume?master_id=63d1f0a3-0b2b-4da3-a35f-007ae0672a10&type=2
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“total”:2,
“pages”:1,
“page_num”:1,
“page_size”:10,
“order_by”:null,
“result”:[
{
“number”:50,
“type”:1,
“direction”:1,
“consume_id”:”1c5466bb7e685bb2edb5d5854d6e5953”,
“create_time”:”2019-05-17 16:05:17”
},
{
“number”:8,
“type”:2,
“direction”:1,
“consume_id”:”5a1777175642ae3bc73e9a1cec14d784”,
“create_time”:”2019-05-30 21:52:06”
}
]
}
}
统计人群包短信发送结果
说明
目前仅能统计通过线上渠道方式发送的短信的结果
请求
请求地址:/sms/result
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
package_id | String | 是 | 包ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
success | int | 发送成功的数量 |
failed | int | 发送失败的数量 |
restrict | in | 受限制的数量 |
unknown | int | 未知状态的数量 |
示例
请求参数:
{
“package_id”:”b8dac175-630b-4cf0-9b2f-d83bafb3f1a5”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“success”:100,
“failed”:10,
“restrict”:10,
“unknown”:10
}
}
活动相关
提交待审核活动
请求
请求地址:/activity/create
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
activity_id | String | 是 | 活动ID |
activity_name | String | 是 | 活动名称 |
activity_desc | String | 否 | 活动描述 |
preview_url | String | 否 | 免登后,真正的活动预览地址 |
start_type | String | 是 | 启动方式:1=单次执行 2=周期性执行 |
start_type_remark | String | 否 | 启动方式备注,启动方式为周期性执行时有值。 例: 周期:每1周执行一次;开始时间:2019-04-22 20:20:00;结束:执行5次结束。 |
activity_reach_type | String | 是 | 活动触达方式: SMS=短信(包括人群触达方式中的短信和优惠券) OTHER=其它方式 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:0=成功 非0=失败 |
示例
请求参数:
{
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”,
“activity_id”:”11111”,
“activity_name”:”测试活动名称”,
“activity_desc”:”测试活动描述”,
“preview_url”:”http://localhost:8080/preview_url”,
“start_type”:2,
“start_type_remark “:”周期:每1周执行一次;开始时间:2019-04-22
20:20:00;结束:执行5次结束。”,
“activity_reach_type “:”SMS”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“status”:”0”
}
}
通知ISV活动审核结果【ISV提供】
请求
请求地址:/JDCloud/activity/update
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
activity_id | String | 是 | 活动ID |
approve_status | String | 是 | 活动审核状态:1=通过 2=驳回 |
audit_remark | String | 否 | 活动描述 |
auditor | String | 是 | 审核人 |
master_id | String | 是 | 品牌商ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:1=成功 0=失败 |
示例
请求参数:
{
“activity_id”:”11111”,
“approve_status”:”1”,
“audit_remark”:”审核通过”,
“auditor”:”jiangkun17”,
“master_id”:”63d1f0a3-0b2b-4da3-a35f-007ae0672a10”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“status”:”1”
}
}
免登跳转活动详情【ISV提供】
请求
请求地址:/JDCloud/master/verify
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
preview_url | String | 是 | 活动详情地址 |
响应参数
无,成功后直接跳转响应活动详情地址
报表相关
创建人群营销报表
说明
适用于两种人群包:
营销报表适用于通过短信、优惠券触达的人群包。
非触达的人群包
对于触达的人群包,无需ISV创建,我们程序定时任务将自动创建。
对于非触达的包,需要ISV调用该接口进行创建。
请求
请求地址:/report/create
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
package_id | String | 是 | 人群对象实例ID |
master_id | String | 是 | 品牌商ID |
partner_id | String | 是 | 合作伙伴ID【由京东云侧提供】 |
report_date | Date | 否 | 统计报表开始时间,格式:yyyy-MM-dd HH:mm:ss |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:0=成功 非0=失败 |
示例
请求参数:
{
“package_id”:”810ce39a-8131-48de-9bd8-deda61e38dc1”,
“master_id”:”222222”,
“partner_id”:”zhike”,
“report_date”:”2019-06-19 00:00:00”
}
响应参数:
{
“code”:0,
“msg”:”success”,
“data”:{
“status”:”0”
}
}
获取人群营销报表
说明
全量返回指定日期的所有营销报表(短信触达、优惠券触达),每天中午12点开始可以同步前一天的报表。
请求
请求地址:/report
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
partner_id | String | 是 | 合作伙伴ID【由京东云侧提供】 |
report_date | Date | 是 | 报表日期,格式:yyyy-MM-dd |
report_type | String | 否 | 报表类型:click=点击 exposure=曝光 all=所有,默认为exposure |
响应参数
名称 | 类型 | 描述 |
---|---|---|
partner_id | String | 合作伙伴ID |
report_date | Date | 报表日期,格式:yyyy-MM-dd |
report_data | List\ | 报表数据 |
Object
名称 | 类型 | 描述 |
---|---|---|
package_id | String | 包id |
shop_id | Integer | 店铺id |
reach_type | String | 触达类型: NULL=未触达 SMSPUBLIC=公域短信触达 SMSPRIVATE=私域短信触达 COUPONPUBLIC=公域优惠券触达 COUPONPRIVATE=私域优惠券触达 |
pv | Integer | 落地页的次数(每日增量) 如果report_type是click 请忽略此指标 |
uv | Integer | 落地页的人数(每日增量) 如果report_type是click 请忽略此指标 |
cart_num | Integer | 加购人数(每日增量) |
sku_pv_num | Integer | 商品详情页PV(每日增量) |
sku_uv_num | Integer | 商品详情页UV(每日增量) |
shop_pv_num | Integer | 店铺首页PV(每日增量) |
shop_uv_num | Integer | 店铺首页UV(每日增量) |
follow_sku_num | Integer | 关注商品人数(每日增量) |
follow_shop_num | Integer | 关注店铺人数(每日增量) |
ord_pins | Integer | 下单人数(每日增量) |
ord_amount | Double | 下单金额(每日增量) |
ord_num | Integer | 下单订单数(每日增量) |
ord_qtty | Integer | 下单件数(每日增量) |
pay_pins | Integer | 付款人数(每日增量) |
pay_amount | Double | 付款金额(每日增量) |
pay_num | Integer | 付款订单数(每日增量) |
pay_qtty | Integer | 付款件数(每日增量) |
people_sent_num | Integer | 选包总量(活动全量) |
delivered_num | Integer | 触达人数(包括优惠券和短信,活动全量) |
coupon_pins | Integer | 领券人数(每日增量) |
coupon_use_pins | Integer | 用券人数(每日增量) |
coupon_orders | Integer | 优惠券引入订单量(每日增量) |
coupon_amount | Double | 优惠券引入金额 |
browse_sku_top5 | String | 浏览件数top5 格式:排名skuId件数*排名skuId件数*…… |
cart_add_top5 | String | 加购件数top5 格式:排名skuId件数*排名skuId件数*…… |
follow_product_top5 | String | 关注件数top5 格式:排名skuId件数*排名skuId件数*…… |
ord_qtty_top5 | String | 下单件数top5 格式:排名skuId件数*排名skuId件数*…… |
ord_amount_top5 | String | 下单金额top5 格式:排名skuId金额*排名skuId金额*…… |
pay_qtty_top5 | String | 付款件数top5 格式:排名skuId件数*排名skuId件数*…… |
pay_amount_top5 | String | 付款金额top5 格式:排名skuId金额*排名skuId金额* |
op_time | String | 营销监控时间(当前统计时间,天) |
report_type | String | 报表类型:click=点击 exposure=曝光 |
示例
请求参数:
{
"report_date":"2019-03-10",
"master_id":"111111111111111111",
"partner_id":"zhike"
}
响应参数:
{
"code":0,
"msg":" success ",
"data":{
"partner_id":"zhike",
"shop_id":"1000097",
"report_date":"2019-03-10",
"report_data":[
{
"pv":1,
"uv":1,
"package_id":"package_id",
"shop_id":"1000003263",
"reach_type":"SMSPRIVATE",
"cart_num":1,
"sku_pv_num":1,
"sku_uv_num":1,
"shop_pv_num":1,
"shop_uv_num":1,
"follow_sku_num":1,
"follow_shop_num":1,
"ord_pins":1,
"ord_amount":2,
"ord_num":1,
"ord_qtty":1,
"pay_pins":1,
"pay_amount":1,
"pay_num":1,
"pay_qtty":1,
"people_sent_num":1,
"delivered_num":1,
"coupon_pins":1,
"coupon_use_pins":1,
"coupon_orders":1,
"coupon_amount":1,
"browse_sku_top5":"1_100003730605_918*2_100004121021_26*3_100006275844_22*4_100006275852_21*5_3368118_12"
"cart_add_top5":"1_100003730605_522*2_100006275852_67*3_100006275844_52*4_100004121021_29*5_100003730609_25"
"follow_product_top5":"1_100003730605_34*2_100006275844_2*3_100003730609_2*4_100002189622_2*5_4070763_1"
"ord_qtty_top5":"1_4070763_145*2_4838712_84*4_100003730605_54*5_100006275852_24*3_100003498910_81"
"ord_amount_top5":"1_4070763_419854.2*2_4838712_204361.6*3_100003730605_163860.0*4_100004325504_102530.0*5_100006275852_71760.0"
"pay_qtty_top5":"1_4070763_114*2_4838712_63*4_100003730605_33*5_100006275852_13*3_100003498910_47"
"pay_amount_top5":"1_4070763_324963.2*2_4838712_149071.6*3_100003730605_100170.0*4_100004325504_59700.0*5_100006275852_38870.0"
"op_time":"2019-03-20",
**"report_type"**:**"click"**
}
]
}
}
重新拉取指定日期的营销报表
说明
如果某天报表数据有误,可以重新拉取。
请求
请求地址:/report/pull
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
partner_id | String | 是 | 合作伙伴ID【由京东云侧提供】 |
report_date | Date | 否 | 报表日期,格式:yyyy-MM-dd |
响应参数
名称 | 类型 | 描述 |
---|---|---|
status | String | 状态:0=成功 非0=失败 |
示例
请求参数:
{
"report_date":"2019-04-28",
"partner_id":"zhike"
}
响应参数:
{
"code":0,
"msg":"success",
"data":{
"status":"0"
}
}
微信活动
获取公众号模板消息列表
说明
通过品牌商id获取公众号模板消息列表,无分页
请求
请求地址:/activity/wx/getAllTemplate
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
响应参数
List\
名称 | 类型 | 描述 |
---|---|---|
templateId | String | 模板ID |
title | String | 模板标题 |
primaryIndustry | String | 模板所属行业的一级行业 |
deputyIndustry | String | 模板所属行业的二级行业 |
content | String | 模板内容 |
example | String | 模板示例 |
示例
请求参数:
GET /activity/wx/getAllTemplate?master_id=111111111111111111
响应参数:
{
"code":0,
"msg":"success",
"data":[
{
"templateId":"6WZmKqoFhS8894SYGQltQzOhNKehdMd6O5R5BRSwi1g",
"title":"订阅模板消息",
"primaryIndustry":"",
"deputyIndustry":"",
"content":"",
"example":""
},
{
"templateId":"iHxQJL1oep3kb2EVX94-T4zQeVVihfdNGXapx4tS0oU",
"title":"活动参与成功通知",
"primaryIndustry":"IT科技",
"deputyIndustry":"互联网|电子商务",
"content":" 活动名:
活动时间: ",
"example":"恭喜您成功报名活动! 活动名:七夕情人节
活动时间:2017年8月28日 感谢您的参与!"
}
]
}
获取公众号图文列表
说明
通过品牌商id获取公众号图文消息列表,有分页
请求
请求地址:/activity/wx/batchGetNews
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
offset | int | 否 | 从全部素材的该偏移位置开始返回,0表示从第一个素材 返回,默认0 |
count | int | 否 | 返回素材的数量,取值在1到20之间,默认20 |
响应参数
totalCount | int | 该类型的素材的总数 |
---|---|---|
itemCount | int | 本次调用获取的素材的数量 |
items | List\ |
WxMpMaterialNewsItemVO
名称 | 类型 | 描述 |
---|---|---|
mediaId | String | 素材ID |
updateTime | Date | 这篇图文消息素材的最后更新时间 |
content | WxMpMaterialNewsVO |
WxMpMaterialNewsVO
名称 | 类型 | 描述 |
---|---|---|
createdTime | Date | 图文创建时间 |
updatedTime | Date | 图文更新时间 |
articles | List\ |
WxMpMaterialNewsArticleVO
名称 | 类型 | 描述 |
---|---|---|
thumbMediaId | String | 图文消息的封面图片素材id(必须是永久mediaID) |
thumbUrl | String | 图文消息的封面url |
author | String | 图文消息的作者 |
title | String | 图文消息的标题 |
contentSourceUrl | String | 在图文消息页面点击“阅读原文”后的页面链接 |
content | String | (必填) 图文消息页面的内容,支持HTML标签 |
digest | String | 图文消息的描述 |
showCoverPic | boolean | 是否显示封面,true为显示,false为不显示 |
url | String | 点击图文消息跳转链接 |
needOpenComment | boolean | 是否打开评论,0不打开,1打开 |
onlyFansCanComment | boolean | 否粉丝才可评论,0所有人可评论,1粉丝才可评论 |
示例
请求参数:
GET /activity/wx/getAllTemplate?master_id=111111111111111111& page_num=1& page_size=10
响应参数:
{ 1111111111\
"code":0,
"msg":"success",
"data":{
"totalCount":1,
"itemCount":1,
"items":[
{
"mediaId":"vo5a1f0PLcgSZoTDJ0dkWK6SLVy6f8FLN6406bBuRtQ",
"updateTime":"2019-07-09 18:03:01",
"content":{
"createdTime":"2019-07-08 16:47:16",
"updatedTime":"2019-07-09 18:03:01",
"articles":[
{
"thumbMediaId":"vo5a1f0PLcgSZoTDJ0dkWJiXRCAkC2mK4JFToGFGFoI",
"thumbUrl":"http://mmbiz.qpic.cn/mmbiz_jpg/qg42M9IOnGMCLtO3mmKd8ibhCv3FCJ3W8k4OLnrHpqXEJqHRj4XyqiaiarTRkW9ZbIUTeY1RmwRq8oZ5syDxtcRpg/0?wx_fmt=jpeg",
"author":"jzone",
"title":"京东云测试",
"contentSourceUrl":"",
"content":"\
\</p>"
"digest":"1111111111",
"showCoverPic":false,
"url":"http://mp.weixin.qq.com/s?__biz=MzI3Nzg4MzEyNg==&mid=100000100&idx=1&sn=14d3068f63bc96db423be8fb4c2599eb&chksm=6b5e30fd5c29b9ebf32113f3b3df15915c71d5bfdc3b4a62cdcb44b05dbfbbfa4606171666b8#rd",
"needOpenComment":false,
"onlyFansCanComment":false
}
]
}
}
]
}
}
创建微信活动
说明
通过品牌商id创建微信活动,发送模板消息或者图文消息。
请求
请求地址:/activity/wx/create
请求方法:POST
Content-Type:application/json
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
business_id | String | 是 | 业务ID(活动ID)例如: d5b8130ede7148d294b63518973834c8 |
send_time | Date | 是 | 活动投放时间yyyy-MM-dd HH:mm:ss |
create_time | Date | 是 | 创建活动时间yyyy-MM-dd HH:mm:ss |
begin_time | Date | 是 | 活动开始时间yyyy-MM-dd HH:mm:ss |
end_time | Date | 是 | 活动结束时间yyyy-MM-dd HH:mm:ss |
pack_type | Int | 是 | 人群包类型 1,2,5 |
* FOLLOWER_ALL(1, "全部人群"), | |||
* CUSTOMER(2, "自定义人群包"), | |||
* UPLOAD_OPENID(3, "导入openId包"), | |||
* FOLLOWER_PIN(4, "匹配人群"), | |||
* FOLLOWER_NULL(5, "未匹配人群"); | |||
package_id | String | 否 | 人群包id |
pack_desc | String | 否 | 人群包描述[非必须] |
pack_name | String | 否 | 人群包名称[非必须] |
activity_type | Int | 是 | 活动类型[必须] * TEMPLATE(3, "模版消息"), * MEDIA(4, "图文消息"); |
mediaInfo | Object | 否 | 图文信息[非必须] |
templateInfo | Object | 否 | 模板信息[非必须] |
urlMappingList | List\< ActivityUrlMapping > | 否 | 原始链接与短链映射列表[非必须] |
MediaInfo 图文消息
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
mediaId | String | 是 | 图文素材ID(必传) |
mediaTitle | String | 是 | 素材标题(必传) |
TemplateInfo 模板消息
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
templateId | String | 是 | 模版ID(必传) |
data | List\ |
是 | 模版消息体(必传) |
url | String | 否 | 模版消息跳转链接(非必传) |
miniAppId | String | 否 | 模版消息跳转小程序配置信息(非必传) |
miniPathPage | String | 否 | 模版消息跳转小程序配置信息(非必传) |
TemplateDataInfo
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
name | String | 是 | 模版key[必传] |
value | String | 是 | key对应的值[必传] |
color | String | 否 | 字体颜色[非必传] #173177 |
ActivityUrlMapping
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
url | String | 是 | 原始链接,例如:https://www.jd.com/ |
shortUrl | String | 是 | 原始链接转化后的短链,例如:3.cn/aBu9yoA |
响应参数
名称 | 类型 | 描述 |
---|---|---|
activityId | Long | 微信活动ID |
示例
请求参数:
{
"business_id":"3243d1ff24c6471783f91081b2ee249b",
"send_time":"2019-7-18 17:13:00",
"create_time":"2019-7-18 17:13:00",
"begin_time":"2019-7-18 17:13:00",
"end_time":"2019-7-19 17:13:00",
"pack_type":5,
"pack_path":"http://ecrm-zhike-dev.oss.cn-north-1.jcloudcs.com/2019/07/09/d5a9c35e-8d57-4f14-8f56-2bca1c818e8d?Expires=1578191019&AccessKey=2CF656569DA70F6D438D316EE2BBB494&Signature=qI9vOUSnMNL2HvcvQxUBNngsNk0%3D",
"pack_desc":"ECRM测试包描述",
"pack_ame":"ECRM测试包名称",
"activity_type":3,
"mediaInfo":{
"mediaId":"vo5a1f0PLcgSZoTDJ0dkWK6SLVy6f8FLN6406bBuRtQ",
"mediaTitle":"京东云ECRM上线了"
},
"templateInfo":{
"templateId":"iHxQJL1oep3kb2EVX94-T4zQeVVihfdNGXapx4tS0oU",
"data":[
{
"name":"first",
"value":"京东云ECRM通知",
"color":"#173177"
},
{
"name":"keyword1",
"value":"京东云促销",
"color":"#173177"
},
{
"name":"keyword2",
"value":"2019年7月9日",
"color":"#173177"
},
{
"name":"remark",
"value":"诚邀您参与",
"color":"#173177"
}
],
"url":"http://www.jd.com",
"miniAppId":null,
"miniPathPage":null
}
}
响应参数:
{
"code":0,
"data":2783,
"success":true
}
查询活动详情
说明
通过品牌商id和微信活动ID获取微信活动详情
请求
请求地址:/activity/wx/activityInfo
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
activity_id | Long | 是 | 微信活动ID(创建微信活动返回的ID) |
响应参数
名称 | 类型 | 描述 |
---|---|---|
activity_id | Long | 活动ID |
activity_content | 活动内容 | |
business_id | String | 对应创建活动时传入的业务ID |
activity_type | String | 活动类型[必须] * TEMPLATE(3, "模版消息"), * MEDIA(4, "图文消息"); |
mediaInfo | Object | 同创建活动参数 |
templateInfo | Object | 同创建活动参数 |
pack_type | Integer | 人群包类型 125 |
* FOLLOWER_ALL(1, "全部人群"), | ||
* CUSTOMER(2, "自定义人群包"), | ||
* UPLOAD_OPENID(3, "导入openId包"), | ||
* FOLLOWER_PIN(4, "匹配人群"), | ||
* FOLLOWER_NULL(5, "未匹配人群"); | ||
pack_path | String | 人群包地址 |
pack_desc | String | 人群包描述 |
pack_name | String | 人群包名字 |
pre_num | Long | 预计发送人数 |
act_num | Long | 实际发送人数 |
begin_time | Date | 活动开始时间 |
end_time | Date | 活动结束时间 |
send_time | Date | 活动触达时间 |
activity_status | Integer | 活动状态 CREATE(0, "正在获取映射关系"), LAUNCHED(1, "已投放"), LAUNCH_NEED(2, "待投放"), LAUNCH_REJECTED(3, "已驳回"), LAUNCH_NEED_ARRIVE(4, "待触达"), LAUNCH_ARRIVING(5, "触达中"), SEND_FAIL(6, "发送失败"); |
remark | String | 活动取消备注 |
created | Date | 活动创建时间 |
示例
请求参数:
GET /activity/wx/activityInfo?master_id=111111111111111111& activity_id=2786
响应参数:
{
"code":0,
"msg":"success",
"data":{
"mediaInfo":null,
"templateInfo":{
"templateId":"iHxQJL1oep3kb2EVX94-T4zQeVVihfdNGXapx4tS0oU",
"data":[
{
"name":"keyword1",
"value":"京东云促销",
"color":null
},
{
"name":"keyword2",
"value":"2019年7月9日",
"color":null
},
{
"name":"remark",
"value":"诚邀您参与",
"color":null
},
{
"name":"first",
"value":"京东云ECRM通知",
"color":null
}
],
"url":"https://plogin.m.jd.com/user/login.action?appid=795&returnurl=https%3A%2F%2Fthunder.jd.com%2Fjzone-h5%2Fblank%2Findex.html%3FtoPage%3Dhttp%253A%252F%252Fwww.jd.com%26_i%3D10%26activityId%3D2786",
"miniAppId":null,
"miniPathPage":null
},
"remark":"",
"created":"2019-07-18 17:39:54",
"activity_id":2786,
"activity_name":null,
"activity_content":"isv活动",
"business_id":"3243d1ff24c6471783f91081b2ee249b",
"activity_type":3,
"pack_type":5,
"pack_path":"http://storage.jd.local/devil2/234f3d53bb724f4b9a35b9fefd101670.txt?Expires=1576376077&AccessKey=oKcZrz9pj0heC7Zb&Signature=WGuZ7dWkOhsB0KrgkaopgkHOnLE%3D",
"pack_desc":"公众号中未匹配京东账号的粉丝总和",
"pack_name":"未匹配用户",
"pre_num":154,
"act_num":136,
"begin_time":"2019-07-18 17:13:00",
"end_time":"2019-07-19 17:13:00",
"send_time":"2019-07-18 17:13:00",
"activity_status":1
}
}
取消微信活动
说明
通过品牌商id和微信活动ID取消微信活动
请求
请求地址:/activity/wx/reject
请求方法:POST
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
activity_id | Long | 是 | 微信活动ID(创建微信活动返回的ID) |
remark | String | 是 | 取消备注 50字符内 |
响应参数
名称 | 类型 | 描述 |
---|---|---|
data | boolean | 是否成功 |
示例
请求参数:
{
"remark":"测试",
"master_id":111111,
"activity_id":2700
}
响应参数:
{
"code":0,
"msg":"success",
"data":true
}
转化落地页
说明
通过品牌商id和活动页地址转化落地页
请求
请求地址:/activity/wx/convertUrl
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
url | String | 是 | 活动页地址,只能转化京东域内地址,例如:http://www.jd.com |
响应参数
名称 | 类型 | 描述 |
---|---|---|
data | String | 转化后的地址 |
示例
请求参数:
GET /activity/wx/convertUrl?master_id=111111&url=http://www.jd.com
响应参数:
{
"code":0,
"msg":"success",
"data":"sq.jd.com/YbI0Pxr"
}
查询公众号基础信息
说明
通过品牌商id和查询公众号基础信息
请求
请求地址:/activity/wx/weChatInfo
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
master_id | String | 是 | 品牌商ID |
响应参数
名称 | 类型 | 描述 |
---|---|---|
appId | String | 公众号appId |
appName | String | 公众号名称 |
pinFollowerNum | String | 公众号中匹配京东账号的粉丝总和 |
notPinFollowerNum | String | 公众号中未匹配京东账号的粉丝总和 |
allFollowerNum | String | 公众号全部粉丝 |
示例
请求参数:
GET /activity/wx/weChatInfo?master_id=111111
响应参数:
{
"code":0,
"msg":"success",
"data":{
"appId":"wx488592b4b17a80a9",
"appName":"耘野农夫",
"pinFollowerNum":0,
"notPinFollowerNum":163,
"allFollowerNum":163
}
}
公告、系统状态
获取公告列表
说明
获取公告列表,无分页
请求
请求地址:/notice/list
请求方法:GET
请求参数
无
响应参数
名称 | 类型 | 描述 |
---|---|---|
notice_code | String | 公告编码 UUID |
title | String | 公告标题 |
content | String | 公告内容 |
notice_type | String | 公告类型:SYS_UPGRADE=系统升级公告 OTHER=其他 |
notice_status | String | 公告状态:0=无效 1=有效 |
start_time | Date | 系统升级公告-开始时间,格式:yyyy-MM-dd HH:mm:ss |
end_time | Date | 系统升级公告-结束时间,格式:yyyy-MM-dd HH:mm:ss |
expire_time | Date | 公告过期时间 |
示例
请求参数:
GET /notice/list
响应参数:
{
"code":0,
"msg":"success",
"data":[
{
"notice_code":"63d09938-b447-4870-bd94-6b3a583645c1",
"title":"系统升级公告",
"content":"系统升级,请稍后登录",
"notice_type":"SYS_UPGRADE",
"notice_status":"1"
"start_time":"2019-07-30 00:00:00",
"end_time":"2019-07-30 02:00:00",
"expire_time":""
},
]
}
获取系统状态
说明
获取系统状态,仅返回启动的状态。如果接口无响应,则说明系统在升级。
请求
请求地址:/system/status
请求方法:GET
请求参数
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
system_code | String | 是 | 系统编码:ECRM_API |
响应参数
名称 | 类型 | 描述 |
---|---|---|
system_code | String | 系统编码:ECRM_API |
status | String | 系统状态:1=启动 |
示例
请求参数:
GET /system/status?system_code=ECRM_API
响应参数:
{
"code":0,
"msg":"success",
"data":{
"system_code":"ECRM_API",
"status":"1"
}
}
附录
人群对象类型枚举值
人群对象的crowd_type值
值 | 说明 |
---|---|
1 | 人群提取 |
2 | 人群计算 |
3 | 人群另存 |
4 | 人群上传 |
5 | 按比例人群抽取 |
6 | 按人数人群抽取 |
7 | 响应节点筛选 |
8 | PIN转DeviceId |