消息推送 API

概述

本文档为后台对接 TMF 推送服务相关说明,TMF 推送服务按用户范围分个性化推送和全量推送,按到达客户端后的呈现方法分为通知栏推送和透传消息推送,具体各种推送使用方法见下文详细说明。

个性化推送 API

功能介绍

针对指定设备或者用户进行通知栏消息的推送或者消息透传。

请求地址

注意注意:地址中的IP 和端口是实际环境中的JsonProxy服务使用的IP和端口或URL。

http://172.16.0.34:30016/data/1827/forward

请求方式

POST

请求字段

字段 类型 是否可选 说明
cmdId int 指令 ID,6238 - 通知栏消息推送,6362 - 透传消息
productId int 用户所属产品的 ID,即应用标识 Pid。 请在控制台 > 我的应用里查看
taskId int 业务自定义,唯一标识一批次的个性化推送
expireTime int 过期时间戳,以秒为单位, 从 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。
注意注意:系统不会推送过期的数据,过期时间戳必须大于当前时间,最大不超过7 天。
cmdData string[] 消息数据,通知栏消息和透传消息内容不同
busiType int 消息推送 23
pushChannel int 推送数据使用的通道, 0 - 系统指定通道,1 - 系统自有通道
guid string TMF 内部 ID(与 uid 2 选 1,两者非空优先 guid)
uid string 账号 ID(与 guid 2 选 1,两者非空优先 guid),即App调用setUserId接口上报的ID
seqNo int 保留字段,请填 0
prior int 通知栏消息优先级,1 - 服务通知 2 - 运营消息,默认为运营消息
android Object 向Android用户推送通知栏消息时的可选扩展字段,具体字段请参见AndroidPushConfig
ios Object 向iOS用户推送通知栏消息时的可选扩展字段,具体字段请参见IosPushConfig
msgType string 消息类型,当且仅当下发通知栏消息时有效,只用于记录日志和数据统计
taskName string 任务名

AndroidPushConfig参数说明

字段 类型 是否可选 说明
channelId string 安卓消息通道ID,适用于小米、OPPO和FCM,默认为空,小米用户必填
category string 消息场景名,适用于华为和VIVO手机用户,默认为空,2023-03-30新增字段,华为和VIVO用户必填

IosPushConfig参数说明

字段 类型 是否可选 说明
interruptionLevel int 中断级别,0 - passive, 1 - active, 2 - time-sensitive, 3 - critical ,默认为1,中断级别的具体含义请见苹果官网说明。

TMF消息优先级与各厂商的消息类型对应关系

  • TMF消息分类

TMF继续保持将消息分类服务通知和运营消息两大类,每一个大类进一步细分二级分类

undefined

  • TMF消息优先级与各厂商的消息类型对应关系
厂商 运营消息 服务通知 服务通知申请方式
VIVO 应用单日可推送运营消息总量:
-具备《互联网新闻信息服务许可证》新闻类:3倍通知开启有效用户数
-其他:-2倍通知开启有效用户数
单用户单日接收运营消息数量上限:
-具备《互联网新闻信息服务许可证》新闻类:5条
-其他:2条
系统消息:
- 应用默认单日可推送系统消息总量为3倍通知开启有效用户数,可邮件申请不限量
- 单用户单日接收系统消息数量上限不限
默认开通。每天可推送的消息总量为3倍通知开启有效用户数, 如果需要增加每天可推送的消息总量,请向厂商申请(邮件申请
OPPO 单用户单日接收公信消息数量上限:
-具备《互联网新闻信息服务许可证》新闻类:5条
-其他:2条
私信
- 总量: 不限制
- 单用户: 不限制
需要向厂商申请开通私信通道 (私信通道申请(新))。
其中:
- ChannelId: high_system
- 通道名称:服务通知
- 在OPPO管理系统标记将通道类设置为私信
小米 应用单日可推送公信消息总量限制:
-具备《互联网新闻信息服务许可证》新闻类:3倍通知开启有效用户数;
-其他:2倍通知开启有效用户数


单用户单日接收公信消息数量上限:
-具备《互联网新闻信息服务许可证》新闻类:8条
-其他:单用户单日接收消息数量上限为5条
私信消息(不限制) 需要自己注册公私信消息的channel,channelId由小米分配,不能自己指定。

不申请时默认限制:限定单日推送数据限制为1倍通知开启有效用户数,单用户接收1条
华为 资讯营销类消息:
-具备《互联网新闻信息服务许可证》新闻类:单用户单日接收消息数量上限为5条
-其他:单用户单日接收消息数量上限为2条
服务与通讯(不限制) - 取消智能分类,只支持自分类
- 未接入自分类的应用默认可发送营销消息
- 下发息时必须带category,否则将为认为是营销消息
厂商申请(华为自分类权益
荣耀 资讯营销类消息:
-具备《互联网新闻信息服务许可证》新闻类:单用户单日接收消息数量上限为5条
-其他:单用户单日接收消息数量上限为2条
服务与通讯(不限制) 目前,所有消息默认通过消息自分类方式进行分类处理,荣耀推送服务将充分信任您提供的分类结果,并且按您提供的分类结果展示对应信息。
FCM 普通消息(不限制) 高优先级消息(不限制) 默认开通,如需自定义通道,可以带上channelID参数。
APNS 中断级别中的active等级 中断级别中的time-sensitive等级 默认开通
  • 二级分类与国内各Android厂商的分类对应关系如下表:
厂商通道 服务通知的二级分类对应厂商的二级分类 运营消息的二级分类对应厂商的二级分类
华为 服务与通讯类消息的二级分类(category) 资讯营销类消息的二级分类(category)
荣耀 服务与通讯类消息的二级分类 资讯营销类消息的二级分类
小米 私信通道(channel) 公信通道(channel)
VIVO 系统消息场景(category) 运营消息场景(category)
OPPO 私信通道(channel) 公信通道(channel)

注意

  • 客户根据自己的业务需要和厂商规范,做好消息分类管理:

    • 为每个APP划分类:将消息分为服务通知和运营消息两大类和二级分类;
    • 如果没有特殊要求,建议申请一个通用的服务通知二级分类和一个通用的运营消息二级分类;
  • TMF个性化推送API支持业务在调用时填写具体的消息分类(prior、channel和 category);

  • TMF控制台配置的批量消息推送任务只推送TMF运营消息,只使用通用的运营消息分类:

    • 在小米开发平台申请通用的运营消息channel,用来在控制台等入口向小米用户推送运营消息;
    • 在华为开发平台申请消息自分类权益。
    • 在OPPO开发平台为运营消息申请channelID为tmf_push_channel的channel,用来在控制台等入口向OPPO用户推送运营消息,channelID为high_system的channel,用来在控制台等入口向OPPO用户推送系统消息,且需要升级推送SDK。
    • 使用控制台推送运营消息时,其他国内Android厂商可以不用向厂商申请运营消息权限。
  • 客户调用个性化推送API时,填写具体的消息分类参数(prior,channel和category字段)。

请求示例

通知栏推送

推送通知栏消息时cmdData数组的元素如下:

序号 字段 类型 是否可选 说明
1 title string 通知栏标题
2 content string 通知栏内容
3 jump string json格式的跳转参数,格式:"{\"type\":jumpType,\"url\":\"jumpUrl\"}",跳转参数的具体字段说明请见下面的“跳转参数说明”,如果不需要,请填"",仅在Android平台上有效
4 extKV string json格式的扩展参数,参数中的Key和Value字段必须为string类型,格式:{\"Key1\":\"Value1\“,\"Key2\":\"Value2\""},如果不需要,请填""
5 sound string 提示声音文件名,仅在iOS平台有效,如果是非iOS平台用户或不需要,请填""
6 badge string APP显示的角标值,仅在iOS平台有效,如果是非iOS平台用户或不需要,请填""

跳转参数说明:

字段 类型 是否可选 说明
type int 跳转类型,取值:1- 应用; 2 - url; 3 - 自定义
url String 跳转地址
{
  "req": {
    "cmdId": 6238,
    "guid": "test",
    "productId": 8903,
    "taskId": 123,
    "expireTime": 1561978029,
    "cmdData": [
      "abcdefg", //标题
      "dadaf", //内容
      "{\"type\":1,\"url\":\"www.test.com\"}", // type :1应用; 2 url; 3自定义
      "{\"youkey\":\"values\"}", //附加参数kv
        "sound", //sound文件名,仅iOS使用
        "badge" //badge,badge取值说明:空 - 服务端不下发badge,0 - 清除App的badge,具体数值 - App的badge将设置成该值 ,仅iOS使用
    ],
    "busiType": 23,
    "uid": "test",
    "seqNo": 0,
    "pushChannel": 0,
    "msgType":"运营消息",
    "taskName":"xx任务"
  }
}

消息透传

推送透传消息时cmdData数组中的元素如下:

序号 字段 类型 是否可选 说明
1 data string 自定义数据
{
  "req": {
    "cmdId": 6362,
    "guid": "test",
    "productId": 8903,
    "taskId": 123,
    "expireTime": 1561978029,
    "cmdData": [
      "data" //要透传的数据
    ],
    "busiType": 23,
    "uid": "test",
    "seqNo": 0,
    "pushChannel": 0
  }
}

响应字段

字段 类型 是否可选 说明
ret int 网关返回码
data Data 响应数据

网关返回码 ret

ret取值 说明
0 成功
1001 失败
1002 参数错误
1003 非法接口地址
1004 不是 Json 数据
1005 非法响应
1006 服务过载
1007 没有调用接口的权限
1101 身份校验失败

Data

字段 类型 是否可选 说明
resp Resp 具体数据

Resp

字段 类型 是否可选 说明
ret int 数据返回码

data.resp.ret

ret取值 说明
0 成功
10001 数据已过期,参数中的 expireTime 比当前时间早
10002 数据生成失败,可能原因有:
- 系统中没有 cmdId 标识的数据模板
- 通知栏消息参数错误:至少要有标题和内容参数、跳转参数和扩展参数格式错误(不是正确的 Json 数据)
- iOS VOIP 消息参数错误:只能有一个 Json 格式的参数
10003 推送失败,可能的原因有:
- 消息已经推送,不允许向用一个用户重复推送(通过 id、seqNo 和 busiType标识一条消息)
- 推送通知栏消息时,App 没有上报推送Token
- 系统错误,请重试
10004 KV 参数获取失败,通知栏消息的扩展参数格式错误(不是正确的Json格式)
10005 跳转参数获取失败,通知栏消息的跳转参数格式错误(不是正确的Json格式)
10006 获取 guid 失败, 由于 App 未上报 uid 或已解绑 uid,通过 uid 找不到对应的guid
10007 获取 profile 失败,非法的 guid,通过 guid 找不到用户信息
10008 系统错误,序列化数据失败
10009 不允许推送,可能的原因有:
- 当向iOS用户推送消息时,TMF.QuickIssueServer配置中关闭了iOS消息推送
- 当向iOS用户推送 VOIP消息时,TMF.QuickIssueServer配置中关闭了VOIP消息推送

响应示例

{
  "ret": 0,
  "data": {
    "resp": {
      "ret": 0
    }
  }
}

推送 API

功能介绍

针对指定指定用户群体进行通知栏消息的推送或者消息透传。

请求地址

注意注意: 地址中的IP 和端口是实际环境中的JsonProxy服务使用的IP和端口或URL。

http://172.16.0.34:30016/data/1828/forward

请求方式

POST

请求字段

字段 类型 是否可选 说明
cmdId int 指令 ID,6238 - 通知栏消息推送,6362 - 透传消息
productId int 用户所属产品的 ID,即应用标识Pid。 请在控制台 > 我的应用里查看
platform string 授受用户所属的手机平台,取值范围:Android/iOS
taskName string 推送任务名
expireTime int 过期时间戳,以秒为单位, 从 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。
注意注意:系统不会推送过期的数据,过期时间戳必须大于当前时间,最大不超过7 天。
cmdData string[] 消息数据,通知栏消息和透传消息内容不同
busiType int 弃用
audience Audience[] 推送条件
isTest int 是否为测试单,取值范围:1 - 测试,0 - 正式(当 audience 不为空时,则有这个字段;当为测试单时,推送条件只支持 guid/imei/uid

Audience

字段 类型 是否可选 说明
type string 推送对象类型,取值范围:all/guid/uid/imei/model/area/buildno/customTag
content string 推送内容,当有多个时,用英文 ; 号分隔。若 type 为 customTag 时,格式为:基于数组的 JSON 字符串,字段有:table - 固定为 tag ,column - 标签类型 id,value - 标签值(若涉及 URL,请自行对 URL 进行转义),operation - ==/!=
fileUrl string 推送对象文件URL,文件的每一个行都是一个推送对象
说明:
1. 推送对象文件名只能由数字、英文字母和_组成
2.在调用此api之前,调者用必须先将推送对象文件上传到文件服务器以获取下载URL,如COS/内部文件系统等,并确保在TMF控制台所在的服务器上使用推送对象文件URL能正常下载推送对象文件
3.当推送对象类型为 guid、uid、 imei、model、area、buildno时有效
fileMd5 string 推送对象文件的 MD5(当有 fileUrl 字段时,需要有该字段)
relation string 交并集关系,取值范围:0 - 交集,1 - 并集(当 type 为 customTag 时,则有该字段)

请求示例

通知栏推送

推送通知栏消息时cmdData数组的元素如下:

序号 字段 类型 是否可选 说明
1 title string 通知栏标题
2 content string 通知栏内容
3 jump string json格式的跳转参数,格式:"{\"type\":jumpType,\"url\":\"jumpUrl\"}",跳转参数的具体字段说明请见下面的“跳转参数说明”,如果不需要,请填"",仅在Android平台上有效
4 extKV string json格式的扩展参数,参数中的Key和Value字段必须为string类型,格式:{\"Key1\":\"Value1\“,\"Key2\":\"Value2\""},如果不需要,请填""

跳转参数说明:

字段 类型 是否可选 说明
type int 跳转类型,取值:1- 应用;2 - url;3 - 自定义
url String 跳转地址
{
  "req": {
    "cmdId": 6238,
    "productId": 8903,
    "platform": "Android",
    "taskName": "taskName",
    "expireTime": 1561978029,
    "cmdData": [
      "abcdefg",
      "dadaf",
      "{\"type\":1,\"url\":\"www.test.com\"}",
      "{\"youkey\":\"values\"}"
    ],
    "isTest": 0,
    "audience": [
      {
        "type": "imei",
        "content": "",
        "fileUrl": "http://172.16.0.34:30010/private/2020031116155929020_1",
        "fileMd5": "c26598d376a2c1261abacb2834cb3cbe"
      },
      {
        "type": "model",
        "content": "华为",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "area",
        "content": "gz;sz",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "buildno",
        "content": "buildno1",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "uid",
        "content": "qianghou",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "all",
        "content": "999999",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "customTag",
        "relation": "1",
        "content": "[{\"table\":\"tag\",\"column\":\"12002\",\"operation\":\"==\",\"value\":\"1\"}, {\"table\":\"tag\",\"column\":\"12005\",\"operation\":\"!=\",\"value\":\"tag2_value1\"}]",
        "fileUrl": "",
        "fileMd5": ""
      }
    ]
  }
}

消息透传

推送透传消息时cmdData数组中的元素如下:

序号 字段 类型 是否可选 说明
1 data string 自定义数据
{
  "req": {
    "cmdId": 6362,
    "productId": 8903,
    "platform": "Android",
    "taskName": "taskName",
    "expireTime": 1561978029,
    "cmdData": ["data"],
    "isTest": 0,
    "audience": [
      {
        "type": "imei",
        "content": "",
        "fileUrl": "http://172.16.0.34:30010/private/2020031116155929020_1",
        "fileMd5": "c26598d376a2c1261abacb2834cb3cbe"
      },
      {
        "type": "model",
        "content": "华为",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "area",
        "content": "gz;sz",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "buildno",
        "content": "buildno1",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "uid",
        "content": "qianghou",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "all",
        "content": "999999",
        "fileUrl": "",
        "fileMd5": ""
      },
      {
        "type": "customTag",
        "relation": "1",
        "content": "[{\"table\":\"tag\",\"column\":\"12002\",\"operation\":\"==\",\"value\":\"1\"}, {\"table\":\"tag\",\"column\":\"12005\",\"operation\":\"!=\",\"value\":\"tag2_value1\"}]",
        "fileUrl": "",
        "fileMd5": ""
      }
    ]
  }
}

响应字段

字段 类型 是否可选 说明
ret int 网关返回码
data Data 响应数据

网关返回码 ret

ret取值 说明
0 成功
1001 失败
1002 参数错误
1003 非法接口地址
1004 不是Json数据
1005 非法响应
1006 服务过载
1007 没有调用接口的权限
1101 身份校验失败

Data

字段 类型 是否可选 说明
resp Resp 具体数据

Resp

字段 类型 是否可选 说明
ret int 数据返回码
taskId long 任务单 ID
msg string 数据返回描述

data.resp.ret

ret取值 说明
0 成功
10101 系统错误
10102 参数错误
10103 参数有误,productId 参数必须为正整数
10104 参数有误,platform 参数必须为 Android 或者 iOS
10105 参数有误,cmdId 参数必须为正整数
10106 参数有误,expireTime 参数(单位为秒)不可为空
10107 参数有误,expireTime 参数不能小于当前时间
10108 参数有误,cmdData 参数不可为空
10109 参数有误,audience 参数不可为空
10110 参数有误,taskType 参数传入有误
10111 参数有误,无法找到 cmdId 参数对应的信息,请检查
10112 推送条件有误,解析 audience 失败,缺少推送条件
10113 送条件有误,为了安全起见,测试单只允许推送条件为:guid、imei、uid
10114 推送条件有误,为了安全起见,灰度单只允许推送条件为:guid、imei、uid、buidno、model、area
10115 参数 audience 格式有误,content、fileUrl 不可为空
10116 推送条件(type:具体值)有误,ID 类推送条件(guid/imei/area/buildno/uid/model)的 content 分别最大支持1000个
10117 推送条件(type:具体值)有误,从 fileUrl:具体值下载文件失败,错误信息:(具体报错信息)
10118 推送条件(type:具体值)有误,ID 类推送条件(guid/imei/area/buildno/uid/model)支持文件 URL 的方式,但是一次推送只支持一种推送条件用fileUrl,且下载的文件<=100m
10119 推送条件(type:具体值)有误,从fileUrl:具体值下载的文件大小不能超过100M
10120 推送条件(type:具体值)有误,从 fileUrl:具体值获取到的文件 md5 与参数 fileMd5 不一致
10121 推送条件(type:具体值)有误,从 fileUrl:具体值获取到的内容为空,请检查(一行一个)
10122 推送条件(type:具体值)有误,relation 参数非法,参考值:0 - 交集,1 - 并集
10123 推送条件(type:具体值)有误,content 必须为正确的 json 格式,请参照用例
10124 推送条件(type:具体值)有误,解析到的 content 不可为空
10125 推送条件(type:具体值)有误,tag 值必须为 tag
10126 推送条件(type:具体值)有误,operation 值只支持==,!=
10127 推送条件(type:具体值)有误,非法 type 值,无法识别
10128 推送条件有误,添加“自定义标签”维度时,请同时增加“全量”维度
10129 推送条件有误,自定义标签数不能超过20个
10130 推送条件有误,type 不可重复
10131 推送内容有误,无法解析指令信息
10132 保存任务失败,(具体报错信息)

响应示例

{
  "ret": 0,
  "data": {
    "resp": {
      "ret": 0,
      "taskId": 1234567890,
      "msg": "推送成功。可登录控制台在“消息推送 > 历史明细“查看推送记录"
    }
  }
}

推送结果查询 API

功能介绍

对推送单进行状态控制

请求地址

注意注意:地址中的IP 和端口是实际环境中的JsonProxy服务使用的IP和端口或URL。

http://172.16.0.34:30016/data/1960/forward

请求方式

POST

请求字段

字段 类型 是否可选 说明
taskId string 推送单 ID

请求示例

{
    "req":{
        "taskId":"2020033113075669466"
    }
}

响应字段

字段 类型 是否可选 说明
ret int 网关返回码
data Data 响应数据

网关返回码 ret

ret取值 说明
0 成功
1001 失败
1002 参数错误
1003 非法接口地址
1004 不是 Json 数据
1005 非法响应
1006 服务过载
1007 没有调用接口的权限
1101 身份校验失败

Data

字段 类型 是否可选 说明
resp Resp 具体数据

Resp

字段 类型 是否可选 说明
ret int 数据返回码
msg string 数据返回码具体含义
taskStatus object 推送任务结果数据
publishAmount int 服务端发起推送数量
reportAmount int 客户端收到推送数量

data.resp.ret

ret取值 说明
0 查询成功。可登录控制台在 消息推送 > 历史明细 > 实时统计查看详细信息
10101 系统错误
10201 参数有误,taskId 不可为空
10301 参数有误,无法获取推送任务单信息

响应示例

{
    "ret":0,
    "data":{
        "resp":{
            "ret":0,
            "msg":"查询成功。可登录控制台在 “消息推送 > 历史明细 > 实时统计“ 查看详细。 ",
            "taskStatus":{
                "publishAmount":0,
                "reportAmount":0
            }
        }
    }
}

推送状态控制 API

功能介绍

查询指定推送单号的简要推送结果。

请求地址

注意注意: 地址中的IP 和端口是实际环境中的JsonProxy服务使用的IP和端口或URL。

http://172.16.0.34:30016/data/1961/forward

请求方式

POST

请求字段

字段 类型 是否可选 说明
taskId string 推送单 ID
user string 调用用户名
action string 需要设置的推送单状态
remark string 备注
action 说明
Submit 提交审批
Terminate 结束
Reject 驳回审批
Recall 撤回
Approve 审批通过
Suspend 挂起
Resume 恢复(挂起的逆操作)
ImmediatelyPush 直接投放
SaveDraft 存草稿

请求示例

{
    "req":{
        "taskId":"2020011715420835906",
        "user":"system",
        "action":"Submit",
        "remark":"test"
    }
}

响应字段

字段 类型 是否可选 说明
ret int 网关返回码
data Data 响应数据

网关返回码 ret

ret取值 说明
0 成功
1001 失败
1002 参数错误
1003 非法接口地址
1004 不是 Json 数据
1005 非法响应
1006 服务过载
1007 没有调用接口的权限
1101 身份校验失败

Data

字段 类型 是否可选 说明
resp Resp 具体数据

Resp

字段 类型 是否可选 说明
ret int 数据返回码
msg string 数据返回码具体含义

data.resp.ret

ret取值 说明
0 可登录控制台在消息推送 > 历史明细查看详细信息
10101 系统错误
10201 参数有误,taskId 不可为空
10202 参数有误,action 参数不可为空
10203 参数有误,user 参数不可为空
10204 参数有误,无法获取推送任务单信息

响应示例

{
    "ret":0,
    "data":{
        "resp":{
            "ret":10101,
            "msg":"系统错误,2020011715420835906任务状态为投放结束不能提交"
        }
    }
}
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""