Send distinct messages to each push ID by customizing messages with template placeholders. Unlike template push, each push ID receives unique content.
Scheduled and loop pushes are not supported when the push target is a mobile analytics audience or a custom tag audience.
Before using this API, ensure you have completed the following:
Create a target template in the message push console with placeholders to enable personalized messages. For more information, see Create a Template.
Add SDK dependencies. For details, see SDK Preparation.
Request parameters
Parameter name | Type | Required | Example | Description |
classification | String | No | 1 | Used to pass the message type of the vivo push channel:
If not filled, the default is 1. |
taskName | String | Yes | Multiple test | Push task name. |
appId | String | Yes | ONEX570DA89211721 | mPaaS App ID |
workspaceId | String | Yes | test | mPaaS workspace |
deliveryType | Long | Yes | 3 | Target ID type, the values are as follows:
Note The maximum number of targets for user dimension and device dimension is 100. |
templateName | String | Yes | Test template | Template name, created in the console. |
targetMsgs | List | Yes | targetMsgs object list | Target object list. For detailed parameters, see targetMsgs object description. |
expiredSeconds | Long | Yes | 300 | Message validity period, in seconds. |
extendedParams | String | No | {“key1”:”value1”} | Unified extended parameters, in Map format. |
notifyType | String | No | Indicates the message channel type:
| |
strategyType | Integer | No | 1 | Push strategy type: If not filled, the default is 0. |
StrategyContent | String | No | {\”fixedTime\”:1630303126000,\”startTime\”:1625673600000,\”endTime\”:1630303126000,\”circleType\”:1,\”circleValue\”:[1, 7],\”time\”:\”13:45:11\”} | Push strategy details (JSON string). |
thirdChannelCategory | Map | No | thirdChannelCategory: { "hms": "9", //Huawei FINANCE type message "vivo": "1" //vivo IM type message } | Used to pass vendor message classification, for details, see Vendor message classification. |
notifyLevel | Map | No | notifyLevel: {"oppo":"2"//OPPO notification bar + lock screen} | Vendor message notification level, such as the OPPO message level is as follows:
|
miChannelId | String | No | "123321" | Xiaomi vendor push channel channelId |
activityEvent | String | No | Real-time activity event, optional update/end:
| |
activityContentState | JSONObject | No | Real-time activity message | |
dismissalDate | long | No | Real-time activity message expiration time (second-level timestamp), optional field. If not passed, the default expiration time of the iOS system is 12h. |
Regarding the activityEvent parameter:
The expiration time set by
dismissalDateis effective whenactivityEventis an end event.The expiration time set by
dismissalDateis not effective whenactivityEventis an update event.If an end event is sent without a
dismissalDate, the iOS system defaults to ending the real-time activity after 4 hours.
targetMsgs object description
Parameter name | Type | Required | Example | Description |
target | String | Yes | userid1024 | Target ID, filled according to the deliveryType type. |
msgKey | String | Yes | 1578807462788 | Business message ID, used for message troubleshooting. Defined by the user and cannot be repeated. |
templateKeyValue | String | No | {“money”:”200”,”name”:”Zhang San”} | Template parameters, in Map format, corresponding to the template specified by |
extendedParams | String | No | {“key1”:”value1”} | Extended parameters, in map format, for different extended parameters of each message. |
StrategyContent field description
Convert the JSON format to a string before transmission.
Parameter name | Type | Required | Example | Description |
fixedTime | long | No | 1630303126000 | Scheduled push timestamp (unit: milliseconds, accurate to seconds). When the push strategy type is scheduled ( |
startTime | long | No | 1640966400000 | Loop cycle start timestamp (unit: milliseconds, accurate to days). When the push strategy type is loop ( |
endTime | long | No | 1672416000000 | Loop cycle end timestamp (unit: milliseconds, accurate to days). The loop end time cannot exceed 180 days after the current day. When the push strategy type is loop ( |
circleType | int | No | 3 | Loop type:
When the push strategy type is loop ( |
circleValue | int[] | No | [1,3] | Loop value:
When the push strategy type is loop ( |
time | String | No | 09:45:11 | Loop push time (hour, minute, second, format is HH:mm:ss). When the push strategy type is loop ( |
The default maximum number of unexecuted scheduled or loop push tasks is 100.
The loop cycle runs from 0:00 on the start day to 24:00 on the end day.
The loop start and end times cannot be earlier than 0:00 on the current day, and the end time cannot be before the start time.
Response parameters
Parameter name | Type | Example | Description |
RequestId | String | B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 | Request ID |
ResultCode | String | OK | Request result code |
ResultMessage | String | param is invalid | Request error description |
PushResult | JSON | Request result | |
Success | boolean | true | Request status. The |
ResultMsg | String | param is invalid | Request error content. The |
Data | String | 903bf653c1b5442b9ba07684767bf9c2 | Scheduled push task ID. When |
Code examples
Ensure your AccessKey has the AliyunMPAASFullAccess permission. For details, refer to Resource Access Management Account Application-Level Access Control.
Java code example
To see how to retrieve AccessKeyId and AccessKeySecret in the code example below, click here.
DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
// Create a DefaultAcsClient instance and initialize
// Alibaba Cloud account AccessKey has access to all APIs, which is very risky. It is strongly recommended to create and use a RAM user for API access or daily operations. Please log in to the RAM console to create a RAM user
// Here, the AccessKey and AccessKeySecret are stored in environment variables as an example. You can also save them in the configuration file based on your business needs
// It is strongly recommended not to save the AccessKey and AccessKeySecret in the code, as there is a risk of key leakage
// It is recommended to complete the environment variable configuration first.
String accessKeyId = System.getenv("MPAAS_AK_ENV");
String accessKeySecret = System.getenv("MPAAS_SK_ENV");
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou", // Region 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("Multiple test");
request.setTemplateName("Test template");
//Hello #name#, congratulations on winning #money# yuan
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", "Zhang San");
templatekv.put("money", "200");
targetMsg.setTemplateKeyValue(JSON.toJSONString(templatekv));
//The number of targets should not exceed 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()); // Push task ID or scheduled push task ID
} catch (ClientException e) {
e.printStackTrace();
}Python code example
# -*- coding: utf8 -*-
from aliyunsdkcore.client import AcsClient
from aliyunsdkmpaas.request.v20190821 import PushMultipleRequest
import json
import time
// Alibaba Cloud account AccessKey has access to all APIs, which is very risky. It is strongly recommended to create and use a RAM user for API access or daily operations. Please log in to the RAM console to create a RAM user
// Here, the AccessKey and AccessKeySecret are stored in environment variables as an example. You can also save them in the configuration file based on your business needs
// It is strongly recommended not to save the AccessKey and AccessKeySecret in the code, as there is a risk of key leakage
// It is recommended to complete the environment variable configuration first
# 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 test task")
request.set_ExpiredSeconds(600)
msgkey = str(time.time())
targets = [
{
"Target": "user1024",
"MsgKey": msgkey,
"TemplateKeyValue": {
"name": "Zhang San",
"money": "200"
}
}
]
request.set_TargetMsgs(targets)
# Print response
response = client.do_action_with_exception(request)
print responseNode.js code example
const sdk = require('@alicloud/mpaas20190821');
const { default: Client, PushMultipleRequest,PushMultipleRequestTargetMsg } = sdk;
// Create a client
// Alibaba Cloud account AccessKey has access to all APIs, which is very risky. It is strongly recommended to create and use a RAM user for API access or daily operations. Please log in to the RAM console to create a RAM user
// Here, the AccessKey and AccessKeySecret are stored in environment variables as an example. You can also save them in the configuration file based on your business needs
// It is strongly recommended not to save the AccessKey and AccessKeySecret in the code, as there is a risk of key leakage
// It is recommended to complete the environment variable configuration first
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'
});
// Initialize request
const request = new PushMultipleRequest();
request.appId = "ONEX570DA89211721";
request.workspaceId = "test";
request.templateName= "template1024";
const templatekv = {
name: 'Zhang San',
money:'300'
};
//request.templateKeyValue = JSON.stringify(templatekv);
request.deliveryType = 3;
request.taskName = "Node test task";
request.expiredSeconds=600;
const extendedParam = {
test: 'Custom extended parameter'
};
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];
// Call API
try {
client.pushMultiple(request).then(res => {
console.log('SUCCESS', res);
}).catch(e => {
console.log('FAIL', e);
});
} catch(e) {
console.log('ERROR', e);
}PHP code example
<?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")
// Whether to enable debug mode
->debug(true)
->withAppId("ONEX570DA89211721")
->withWorkspaceId("test")
->withTemplateName("template1024")
->withDeliveryType(3)
->withTaskName("PHP test multiple task")
->withExpiredSeconds(600)
->withTargetMsg(
[
[
"Target" => "userid1024",
"MsgKey" => "" . time(),
"TemplateKeyValue" => json_encode([
"name" => "Zhang San",
"money" => "200",
])
]
]
)
->request();
}
}