模板推送指针对单个目标 ID 的消息推送,消息通过模板创建。多个 ID 可以使用同一个模板。
在调用本接口之前,确保已完成以下操作:
请求参数
参数名称 | 类型 | 是否必填 | 示例 | 描述 |
classification | String | 否 | 1 | 用于传递 vivo 推送通道的消息类型:
不填则默认为 1。 |
taskName | String | 是 | 模板测试 | 推送任务名称。 |
appId | String | 是 | ONEX570DA89211721 | mPaaS App ID |
workspaceId | String | 是 | test | mPaaS 工作空间 |
deliveryType | Long | 是 | 3 | 目标 ID 类型,数值选择如下:
|
targetMsgkey | String | 是 | {“user1024”:”1578807462788”} | 推送目标,为 Map 形式:
说明 推送目标不可以超过 10 个,即 |
expiredSeconds | Long | 是 | 300 | 消息有效期,单位为秒。 |
templateName | String | 是 | 测试模板 | 模板名称,在控制台创建模板。 |
templateKeyValue | String | 否 | {“money”:”200”,”name”:”张三”} | 模板参数,为 map 格式,和 |
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 可选。 针对华为、荣耀而言:
针对鸿蒙而言:
|
smsStrategy | int | 否 | 2 | 短信策略:
|
smsSignName | String | 否 | mPaaS 测试 | 短信签名 |
smsTemplateCode | String | 否 | SMS_216070269 | 短信模板 ID |
smsTemplateParam | String | 否 | {\"code\": 123456} | 短信模板变量对应的实际值,JSON 格式。 |
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。 |
关于 smsStrategy
参数:
如果
smsStrategy
的值不为 0,则smsSignName
、smsTemplateCode
和smsTemplateParam
必填。
关于 activityEvent
参数:
当
activityEvent
为 end 事件时,dismissalDate
配置的过期时间才会生效。当
activityEvent
为 update 事件时,dismissalDate
配置的过期时间不会生效。若传
end
事件但不传dismissalDate
,iOS 系统默认 4 小时后结束实时活动。
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访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例以将AccessKey ID和AccessKey Secret保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里。
// 建议先完成环境变量配置
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
PushTemplateRequest request = new PushTemplateRequest();
request.setAppId("ONEX570DA89211721");
request.setWorkspaceId("test");
request.setTemplateName("测试模板");
//你好#name#,恭喜中奖#money#元
Map<String,String> templatekv = new HashMap<String, String>();
templatekv.put("name","张三");
templatekv.put("money","200");
request.setTemplateKeyValue(JSON.toJSONString(templatekv));
request.setExpiredSeconds(600L);
request.setTaskName("模板测试");
request.setDeliveryType(3L);
Map<String,String> target = new HashMap<String, String>();
String msgKey = String.valueOf(System.currentTimeMillis());
target.put("userid1024",msgKey);
request.setTargetMsgkey(JSON.toJSONString(target));
request.setStrategyType(2);
request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");
PushTemplateResponse response;
try {
response = client.getAcsResponse(request);
System.out.println(response.getResultCode());
System.out.println(response.getResultMessage());
} catch (ClientException e) {
e.printStackTrace();
}
Python 代码示例
from aliyunsdkcore.client import AcsClient
from aliyunsdkmpaas.request.v20190821 import PushTemplateRequest
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 = PushTemplateRequest.PushTemplateRequest()
request.set_endpoint("mpaas.cn-hangzhou.aliyuncs.com")
request.set_AppId("ONEX570DA89211721")
request.set_WorkspaceId("test")
request.set_TemplateName("template1024")
templatekv = {"name":"张三","money":"200"}
request.set_TemplateKeyValue(json.dumps(templatekv))
request.set_DeliveryType(3)
request.set_TaskName("python模板测试任务")
request.set_ExpiredSeconds(600)
target = {"userid1024":str(time.time())}
request.set_TargetMsgkey(json.dumps(target))
# Print response
response = client.do_action_with_exception(request)
print response
Node.js 代码示例
const sdk = require('@alicloud/mpaas20190821');
const { default: Client, PushTemplateRequest } = 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 PushTemplateRequest();
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 target = {
"userid1024": String(new Date().valueOf())
};
request.targetMsgkey = JSON.stringify(target);
// 调用 API
try {
client.pushTemplate(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->templatePush();
} catch (\Exception $e) {
}
}
public function templatePush() {
$request = MPaaS::v20190821()->pushTemplate();
$result = $request->host("mpaas.cn-hangzhou.aliyuncs.com")
// 是否开启 debug 模式
->debug(true)
->withAppId("ONEX570DA89211721")
->withWorkspaceId("test")
->withTemplateName("template1024")
->withTemplateKeyValue(json_encode(["name" => "张三", "money" => "200"]))
->withDeliveryType(3)
->withTaskName("PHP 测试任务")
->withExpiredSeconds(600)
->withTargetMsgkey(
json_encode(["userid1024" => "".time() ])
)
->request();
}
}