对各个推送 ID 推送不同消息。通过替换模板占位符的方式,创建针对某一推送 ID 的个性化消息。与模板推送的区别在于,每一个推送 ID 可以收到内容不同的消息。
当推送目标为移动分析人群或自定义标签人群时,不支持定时和循环推送。
在调用本接口之前,确保已完成以下操作:
请求参数
参数名称 | 类型 | 是否必填 | 示例 | 描述 |
classification | String | 否 | 1 | 用于传递 vivo 推送通道的消息类型:
不填则默认为 1。 |
taskName | String | 是 | 批量测试 | 推送任务名称。 |
appId | String | 是 | ONEX570DA89211721 | mPaaS App ID |
workspaceId | String | 是 | test | mPaaS 工作空间 |
deliveryType | Long | 是 | 3 | 目标 ID 类型,数值选择如下:
说明 用户维度和设备维度的目标最多可以传 100 个。 |
templateName | String | 是 | 测试模板 | 模板名称,在控制台创建模板。 |
targetMsgs | List | 是 | targetMsgs 对象列表 | 目标对象列表,参数详见下方的 targetMsgs 对象说明。 |
expiredSeconds | Long | 是 | 300 | 消息有效期,单位为秒。 |
extendedParams | String | 否 | {“key1”:”value1”} | 统一扩展参数,为 Map 形式。 |
notifyType | String | 否 | 表示消息通道类型:
| |
strategyType | Integer | 否 | 1 | 推送策略类型: 不填则默认为 0。 |
StrategyContent | String | 否 | {\”fixedTime\”:1630303126000,\”startTime\”:1625673600000,\”endTime\”:1630303126000,\”circleType\”:1,\”circleValue\”:[1, 7],\”time\”:\”13:45:11\”} | 推送策略详情(JSON 字符串)。 |
transparentMessagePayload | Map<String, JSONObject> | 否 | - | 厂商透传消息体。
透传消息体的格式如下:
|
transparentMessageUrgency | String | 否 | - | 厂商透传消息优先级(transparentMessagePayload 有值时有效)。 目前仅华为、荣耀以及鸿蒙支持,有 HIGH/NORMAL 可选。 针对华为、荣耀而言:
针对鸿蒙而言:
|
thirdChannelCategory | Map | 否 | thirdChannelCategory: { "hms": "9", //华为 FINANCE 财务类型消息 "vivo": "1" //vivo IM 类型消息 } | 用于传递厂商消息分类,详情请参见 厂商消息分类。 |
notifyLevel | Map | 否 | notifyLevel: {"oppo":"2"//OPPO通知栏+锁屏} | 厂商消息提醒等级,如 OPPO 消息等级如下所示:
|
miChannelId | String | 否 | "123321" | 小米厂商推送渠道的 channelId |
activityEvent | String | 否 | 实时活动事件,可选 update/end:
| |
activityContentState | JSONObject | 否 | 实时活动消息的 | |
dismissalDate | long | 否 | 实时活动消息过期时间(秒级时间戳),可选字段,不传则按 iOS 系统默认失效时间 12h。 |
关于 activityEvent
参数:
当
activityEvent
为 end 事件时,dismissalDate
配置的过期时间才会生效。当
activityEvent
为 update 事件时,dismissalDate
配置的过期时间不会生效。若传送 end 事件但不传
dismissalDate
,iOS 系统默认 4 小时后结束实时活动。
targetMsgs 对象说明
参数名称 | 类型 | 是否必填 | 示例 | 描述 |
target | String | 是 | userid1024 | 目标 ID,根据 deliveryType 类型填写。 |
msgKey | String | 是 | 1578807462788 | 业务消息 ID,用于消息的排查。由用户定义,不可重复。 |
templateKeyValue | String | 否 | {“money”:”200”,”name”:”张三”} | 模板参数,为 Map 形式,和 |
extendedParams | String | 否 | {“key1”:”value1”} | 扩展参数,为 map 形式,针对每条消息的不同扩展参数。 |
StrategyContent 字段说明
JSON 格式转化为 String 传值。
参数名称 | 类型 | 是否必填 | 示例 | 描述 |
fixedTime | long | 否 | 1630303126000 | 定时推送时间戳(单位:毫秒,精确到秒)。推送策略类型为定时( |
startTime | long | 否 | 1640966400000 | 循环周期开始时间戳(单位:毫秒,精确到天)。推送策略类型为循环( |
endTime | long | 否 | 1672416000000 | 循环周期结束时间戳(单位:毫秒,精确到天),循环结束时间不得超过当天后的 180 天。推送策略类型为循环( |
circleType | int | 否 | 3 | 循环类型:
推送策略类型为循环( |
circleValue | int[] | 否 | [1,3] | 循环值:
推送策略类型为循环( |
time | String | 否 | 09:45:11 | 循环推送时间(时分秒,格式为 HH:mm:ss) 。推送策略类型为循环( |
未执行的定时或循环推送任务总数上限默认为 100 条。
循环周期为开始时间的 0 点到结束时间的 24 点。
循环开始时间和结束时间均不可早于当天 0 点,且结束时间不得早于开始时间。
返回参数
参数名称 | 类型 | 示例 | 描述 |
RequestId | String | B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 | 请求 ID |
ResultCode | String | OK | 请求结果码 |
ResultMessage | String | param is invalid | 请求错误描述 |
PushResult | JSON | 请求结果 | |
Success | boolean | true | 请求状态。 |
ResultMsg | String | param is invalid | 请求错误内容。 |
Data | String | 903bf653c1b5442b9ba07684767bf9c2 | 定时推送任务 ID。 |
代码示例
请确保您的 AccessKey 拥有 AliyunMPAASFullAccess 权限,详情请参考 对 RAM 账号进行应用级别的访问控制。
Java 代码示例
单击此处 查看下方代码示例中 AccessKeyId 与 AccessKeySecret 的获取方式。
DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
// 创建 DefaultAcsClient 实例并初始化
// 阿里云账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 用户进行 API 访问或日常运维,请登录 RAM 控制台创建 RAM 用户
// 此处以把 AccessKey 和 AccessKeySecret 保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里
// 强烈建议不要把 AccessKey 和 AccessKeySecret 保存到代码里,会存在密钥泄漏风险
// 建议先完成环境变量配置。
String accessKeyId = System.getenv("MPAAS_AK_ENV");
String accessKeySecret = System.getenv("MPAAS_SK_ENV");
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou", // 地域 ID
accessKeyId,
accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
// Create an API request and set parameters
PushMultipleRequest request = new PushMultipleRequest();
request.setAppId("ONEX570DA89211721");
request.setWorkspaceId("test");
request.setDeliveryType(3L);
request.setTaskName("批量测试");
request.setTemplateName("测试模板");
//你好#name#,恭喜中奖#money#元
List<PushMultipleRequest.TargetMsg> targetMsgs = new ArrayList<PushMultipleRequest.TargetMsg>();
PushMultipleRequest.TargetMsg targetMsg = new PushMultipleRequest.TargetMsg();
targetMsg.setTarget("userid1024");
targetMsg.setMsgKey(String.valueOf(System.currentTimeMillis()));
Map<String, String> templatekv = new HashMap<String, String>();
templatekv.put("name", "张三");
templatekv.put("money", "200");
targetMsg.setTemplateKeyValue(JSON.toJSONString(templatekv));
//目标数量不要超过 100 个
targetMsgs.add(targetMsg);
request.setTargetMsgs(targetMsgs);
request.setExpiredSeconds(600L);
request.setStrategyType(2);
request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");
PushMultipleResponse response;
try {
response = client.getAcsResponse(request);
System.out.println(response.getResultCode());
System.out.println(response.getResultMessage());
System.out.println(response.getPushResult().getData()); // 推送任务 ID 或定时推送任务 ID
} catch (ClientException e) {
e.printStackTrace();
}
Python 代码示例
# -*- coding: utf8 -*-
from aliyunsdkcore.client import AcsClient
from aliyunsdkmpaas.request.v20190821 import PushMultipleRequest
import json
import time
// 阿里云账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 用户进行 API 访问或日常运维,请登录 RAM 控制台创建 RAM 用户
// 此处以把 AccessKey 和 AccessKeySecret 保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里
// 强烈建议不要把 AccessKey 和 AccessKeySecret 保存到代码里,会存在密钥泄漏风险
// 建议先完成环境变量配置
# Initialize AcsClient instance
String accessKeyId = System.getenv("MPAAS_AK_ENV");
String accessKeySecret = System.getenv("MPAAS_SK_ENV");
client = AcsClient(
accessKeyId,
accessKeySecret,
"cn-hangzhou"
);
# Initialize a request and set parameters
request = PushMultipleRequest.PushMultipleRequest()
request.set_endpoint("mpaas.cn-hangzhou.aliyuncs.com")
request.set_AppId("ONEX570DA89211721")
request.set_WorkspaceId("test")
request.set_TemplateName("template1024")
request.set_DeliveryType(3)
request.set_TaskName("python测试任务")
request.set_ExpiredSeconds(600)
msgkey = str(time.time())
targets = [
{
"Target": "user1024",
"MsgKey": msgkey,
"TemplateKeyValue": {
"name": "张三",
"money": "200"
}
}
]
request.set_TargetMsgs(targets)
# Print response
response = client.do_action_with_exception(request)
print response
Node.js 代码示例
const sdk = require('@alicloud/mpaas20190821');
const { default: Client, PushMultipleRequest,PushMultipleRequestTargetMsg } = sdk;
// 创建客户端
// 阿里云账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 用户进行 API 访问或日常运维,请登录 RAM 控制台创建 RAM 用户
// 此处以把 AccessKey 和 AccessKeySecret 保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里
// 强烈建议不要把 AccessKey 和 AccessKeySecret 保存到代码里,会存在密钥泄漏风险
// 建议先完成环境变量配置
String accessKeyId = System.getenv("MPAAS_AK_ENV");
String accessKeySecret = System.getenv("MPAAS_SK_ENV");
const client = new Client({
accessKeyId,
accessKeySecret,
endpoint: 'mpaas.cn-hangzhou.aliyuncs.com',
apiVersion: '2019-08-21'
});
// 初始化 request
const request = new PushMultipleRequest();
request.appId = "ONEX570DA89211721";
request.workspaceId = "test";
request.templateName= "template1024";
const templatekv = {
name: '张三',
money:'300'
};
//request.templateKeyValue = JSON.stringify(templatekv);
request.deliveryType = 3;
request.taskName = "Node 测试任务";
request.expiredSeconds=600;
const extendedParam = {
test: '自定义扩展参数'
};
request.extendedParams = JSON.stringify(extendedParam);
const targetMsgkey = new PushMultipleRequestTargetMsg();
targetMsgkey.target = "userid1024";
targetMsgkey.msgKey = String(new Date().valueOf());
targetMsgkey.templateKeyValue = JSON.stringify(templatekv);;
request.targetMsg = [targetMsgkey];
// 调用 API
try {
client.pushMultiple(request).then(res => {
console.log('SUCCESS', res);
}).catch(e => {
console.log('FAIL', e);
});
} catch(e) {
console.log('ERROR', e);
}
PHP 代码示例
<?php
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\MPaaS\MPaaS;
AlibabaCloud::accessKeyClient('accessKeyId', 'accessKeySecret')
->regionId('cn-hangzhou')
->asDefaultClient();
class Demo {
public function run() {
try {
$this->multiPush();
} catch (\Exception $e) {
}
}
public function multiPush() {
$request = MPaaS::v20190821()->pushMultiple();
$result = $request->host("mpaas.cn-hangzhou.aliyuncs.com")
// 是否开启 debug 模式
->debug(true)
->withAppId("ONEX570DA89211721")
->withWorkspaceId("test")
->withTemplateName("template1024")
->withDeliveryType(3)
->withTaskName("PHP测试批量任务")
->withExpiredSeconds(600)
->withTargetMsg(
[
[
"Target" => "userid1024",
"MsgKey" => "" . time(),
"TemplateKeyValue" => json_encode([
"name" => "张三",
"money" => "200",
])
]
]
)
->request();
}
}