群发推送

对全网设备推送相同消息,消息通过模板创建。

重要

当推送目标为移动分析人群或自定义标签人群时,不支持定时和循环推送。

在调用本接口之前,确保已完成以下操作:

  • 在消息推送控制台上创建好目标模板,并确保模板中存在占位符,否则将无法实现消息的个性化推送(即对不同推送 ID 推送不同消息)。详细操作参见 创建模板

  • 引入 SDK 依赖,详见 SDK 准备

请求参数

参数名称

类型

是否必填

示例

描述

classification

String

1

用于传递 vivo 推送通道的消息类型:

  • 0 - 运营类消息

  • 1 - 系统类消息

不填则默认为 1。

taskName

String

群发测试任务

推送任务名称。

appId

String

ONEX570DA89211721

mPaaS App ID

workspaceId

String

test

mPaaS 工作空间

deliveryType

Long

1

目标 ID 类型,数值选择:

  • 1 - Android 群发

  • 2 - iOS 群发

  • 7- HarmonyOS 群发

msgkey

String

1578807462788

业务方消息 ID,用户自定义,不可重复。

expiredSeconds

Long

300

消息有效期,单位为秒。

templateName

String

群发模板

模板名称,在控制台创建模板。

templateKeyValue

String

{“content”:”公告内容”}

模板参数,为 Map 格式,和 templateName 指定的模板对应,key 为占位符名称,value 为要替换的值。

pushStatus

Long

0

群发时,推送登录状态:

  • 0 - 绑定的用户(默认)

  • 1 - 所有用户(包括绑定和解绑的用户)

  • 2 - 解绑的用户

bindPeriod

Integer

登录时长,当 pushStatus 值为 0 时必填:

  • 1 - 7 天内绑定的用户

  • 2 - 15 天内绑定的用户

  • 3 - 60 天内绑定的用户

  • 4 - 永久

说明

bindPeriod 参数仅在非金环境中可配置。

unBindPeriod

Long

退出登录时长,当 pushStatus 值为 1 或 2 时必填:

  • 1 - 7 天内解绑的用户

  • 2 - 15 天内解绑的用户

  • 3 - 60 天内解绑的用户

  • 4 - 永久

androidChannel

Integer

安卓消息通道:

  • 1 - MPS 自建通道

  • 2 - 默认通道

strategyType

int

1

推送策略类型:

  • 0 - 立即

  • 1 - 定时

  • 2 - 循环

不填则默认为 0。

StrategyContent

String

{\”fixedTime\”:1630303126000,\”startTime\”:1625673600000,\”endTime\”:1630303126000,\”circleType\”:1,\”circleValue\”:[1, 7],\”time\”:\”13:45:11\”}

推送策略详情(JSON 字符串)。strategyType 不等于 0 时必填。具体参数详见下方的 StrategyContent 字段说明。

transparentMessagePayload

Map<String, JSONObject>

-

厂商透传消息体。

  • 键 key:厂商渠道类型

    • 华为通道为 hms

    • 荣耀通道为 honor

    • 谷歌 firebase 通道为 fcm

    • 鸿蒙通道为 harmonyos

  • value:透传消息体。推送给厂商的透传消息体使用该 value 值

透传消息体的格式如下:

{
	"data": "{\"name\":\"123hms\"}",
	"android": {
		"category": "VOIP",
		"ttl": "600s",
		"urgency": "HIGH"
	},
	"token": [
		"9912981981wqdq2112291fcm001saa222222222ggwerfw gsas2cc3"
	]
}

transparentMessageUrgency

String

-

厂商透传消息优先级(transparentMessagePayload 有值时有效)。

目前仅华为、荣耀以及鸿蒙支持,有 HIGH/NORMAL 可选。

针对华为、荣耀而言:

  • HIGH:表示高优先透传

  • NORMAL:或者不传参表示普通透传

针对鸿蒙而言:

  • HIGH:当前消息是透传消息

  • NORMAL:当前消息是后台消息

thirdChannelCategory

Map

thirdChannelCategory: {

"hms": "9", //华为 FINANCE 财务类型消息

"vivo": "1"

//vivo IM 类型消息

}

用于传递厂商消息分类,详情请参见 厂商消息分类

notifyLevel

Map

notifyLevel: {"oppo":"2"//OPPO通知栏+锁屏}

厂商消息提醒等级,如 OPPO 消息等级如下所示:

  • 1 - 通知栏

  • 2 - 通知栏+锁屏

  • 3 - 通知栏+锁屏+横幅+震动+铃声

miChannelId

String

"123321"

小米厂商推送渠道的 channelId

StrategyContent 字段说明

JSON 格式转化为 String 传值。

参数名称

类型

是否必填

示例

描述

fixedTime

long

1630303126000

定时推送时间戳(单位:毫秒,精确到秒)。推送策略类型为定时(strategyType 值为 1)时,fixedTime 必填。

startTime

long

1640966400000

循环周期开始时间戳(单位:毫秒,精确到天)。推送策略类型为循环(strategyType 值为 2)时,startTime 必填。

endTime

long

1672416000000

循环周期结束时间戳(单位:毫秒,精确到天),循环结束时间不得超过当天后的 180 天。推送策略类型为循环(strategyType 值为 2)时,endTime 必填。

circleType

int

3

循环类型:

  • 1 - 每天

  • 2 - 每周

  • 3 - 每月

推送策略类型为循环(strategyType 值为 2)时,circleType 必填。

circleValue

int[]

[1,3]

循环值:

  • 若循环类型为每天:空

  • 若循环类型为每周:设置每周循环的时间,例如 [1,3] 表示每周 1 和周 3。

  • 若循环类型为每月:设置每月循环推送的时间,例如 [1,3] 表示每月 1 号和 3 号。

推送策略类型为循环(strategyType 值为 2)且循环类型(circleType)非每天时,circleValue 必填。

time

String

09:45:11

循环推送时间(时分秒,格式为 HH:mm:ss) 。推送策略类型为循环(strategyType 值为 2)时,time 必填。

说明
  • 未执行的定时或循环推送任务总数上限默认为 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

请求状态。Success 参数值包含在 PushRresult JSON 字符串中。

ResultMsg

String

param is invalid

请求错误内容。ResultMsg 参数值包含在 PushRresult JSON 字符串中。

Data

String

903bf653c1b5442b9ba07684767bf9c2

定时推送任务 ID。strategyType 不等于 0 时,该字段不为空。

代码示例

请确保您的 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);

        PushBroadcastRequest request = new PushBroadcastRequest();
        request.setAppId("ONEX570DA89211720");
        request.setWorkspaceId("test");
        request.setDeliveryType(2L);
        request.setMsgkey(String.valueOf(System.currentTimeMillis()));
        request.setExpiredSeconds(600L);
        request.setTaskName("群发任务");
        request.setTemplateName("群发测试");
        //这是一个公告:#content#
        Map<String, String> templatekv = new HashMap<String, String>();
        templatekv.put("content", "公告内容");
        request.setTemplateKeyValue(JSON.toJSONString(templatekv));

        request.setStrategyType(2);
        request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");    

        PushBroadcastResponse 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 PushBroadcastRequest
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 = PushBroadcastRequest.PushBroadcastRequest()
request.set_endpoint("mpaas.cn-hangzhou.aliyuncs.com")
request.set_AppId("ONEX570DA89211720")
request.set_WorkspaceId("test")
request.set_TemplateName("broadcastTemplate")
templatekv = {"content":"这个一个公告"}
request.set_TemplateKeyValue(json.dumps(templatekv))
request.set_DeliveryType(1)
request.set_TaskName("python测试群发任务")
request.set_ExpiredSeconds(600)
request.set_Msgkey(str(time.time()))

# Print response
response = client.do_action_with_exception(request)
print response

Node.js 代码示例

const sdk = require('@alicloud/mpaas20190821');

const { default: Client, PushBroadcastRequest } = 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 PushBroadcastRequest();
  request.appId = "ONEX570DA89211720";
  request.workspaceId = "test";
  request.templateName= "broadcastTemplate";
  const templatekv = {
    content: '这是公告哦',
  };
  request.templateKeyValue = JSON.stringify(templatekv);
  request.deliveryType = 1;
  request.taskName = "Node测试任务";
  request.expiredSeconds=600;
  const extendedParam = {
    test: '自定义扩展参数'
  };
  request.extendedParams = JSON.stringify(extendedParam);

  request.msgkey = String(new Date().valueOf())

// 调用 API
try {
  client.pushBroadcast(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->broadcastPush();
        } catch (\Exception $e) {
        }
    }


   public function broadcastPush(){
        $request = MPaaS::v20190821()->pushBroadcast();
        $result = $request->host("mpaas.cn-hangzhou.aliyuncs.com")
            // 是否开启 debug 模式
            ->debug(true)
            ->withAppId("ONEX570DA89211720")
            ->withWorkspaceId("test")
            ->withTemplateName("broadcastTemplate")
            ->withTemplateKeyValue(
                json_encode(["content" => "这是一个公告"])
            )
            ->withDeliveryType(1)
            ->withTaskName("PHP 测试群发任务")
            ->withExpiredSeconds(600)
            ->withMsgkey("". time())
            ->request();
    }
}