---
title: 发送系统通知模板消息
---
App 下指定用户可以向其他用户发送系统通知模板消息。单次最多向 100 个用户发送消息。属于落地通知?。
- 支持发送即时通讯服务预定义的消息类型(见[消息类型概述])。消息的类型(`objectName` 字段)决定了消息是否支持离线推送通知,以及客户端在收到该消息后,是否展示在聊天界面、会话列表,是否存入本地数据库。
- 支持发送客户自定义类型的消息。客户端在收到自定义消息后,是否展示在聊天界面、会话列表,是否存入本地数据库取决于客户端注册的自定义消息类型定义。
- 系统通知消息只能通过即时通讯服务端 API 进行发送,会话类型为 SYSTEM。该类型的会话不支持终端用户在收到消息后进行回复。
- 消息的 `content`、`pushContent`、`pushData` 字段可以通过模板控制。
例如,对于一般的 App 业务通知来说,假设发送一条文本消息(`objectName` 为 `RC:TxtMsg`,属于客户端 SDK 会存储的内置消息类型,且可触发离线推送),效果如下:
- 客户端如果在线,会即时收到一条消息,所在会话的 Target ID 为调用接口时传入的 `fromUserId`,会话类型为系统会话(类型为 SYSTEM)。
- 客户端如果离线,消息会触发服务端远程推送,客户端如已集成并启用推送服务,则会收到推送通知。
## 如何配置与使用消息模板
消息模板通过字段内容模板(带标识位),和按接收者提供的标识位定义,实现单次向多个接收者发送不同内容的效果。
### 定义内容模板
发送消息时,可在 `content`、`pushContent`、`pushData` 字段中传入带标识位的字段内容,例如:
```json
"toUserId":["21","22","23"],
"content":"{\"content\":\"{c}{d}\",\"extra\":\"bb\"}",
"pushContent":["hello {c}","hello {c}","hello {c}"],
```
上例中的 `{c}`、`{d}` 为自定义的标识位。
- 当前支持定义模板的字段包括:`content`、`pushContent`、`pushData`。
- 消息内容(`content`)字段仅支持插入一个模板,所有接收者共用该模板。
- 消息推送通知内容(`pushContent`)、推送附加数据( `pushData`)字段类型为数组,必须按照 `toUserId` 中的用户 ID 列表逐个定义模板。即使不在 `pushContent`、`pushData` 中使用模板标识位,或所有接收者接收相同内容,都必须按照 `toUserId` 中的用户 ID 列表逐个定义各自的 `pushContent`、`pushData`。
### 指定模板内容标识位的值
按照收件人列表(`toUserId`)在 `values` 字段提供标识位的定义,即为各个收件人指定需要接收的个性化内容。
```json
"values":[
{
"{c}":"Tom",
"{d}":":2"
},
{
"{c}":"Jerry",
"{d}":":5"},
{
"{c}":"Rose",
"{d}":":10"}
],
```
上面示例中,各接收者在线时收到的消息内容如下:
- 用户 ID 为 21 收到:Tom:2
- 用户 ID 为 22 收到:Jerry:5
- 用户 ID 为 23 收到:Rose:10
如果接收者离线,各自收到的推送通知的内容(`pushContent`)也不同,分别为 `Hello Tom`,`Hello Jerry`,`Hello Rose`。
:::tip
如 `content` 中定义了标识 `{d}` ,则在 `values` 中必须设置 `{d}` 的值,否则 `{d}` 会以文本方式随消息发送给用户。
:::
## 请求方法
**POST**: https://[数据中心域名](../base-url.md)/message/system/publish_template.json
**频率限制**: 每秒钟限 100 次。请注意,如果同时向 100 人发送消息,视为 100 条消息。
**签名规则**: 所有服务端 API 请求均需要进行规则校验,详见 [API 请求签名](../auth.md)。
## 正文参数
HTTP 请求正文数据格式为 `application/json`,包含具有以下结构的 JSON 对象:
| 参数 | 类型 | 必传 | 说明 |
|:-----------------|:---------|:----|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| fromUserId | String | 是 | 发送人用户 ID。
**注意**:发送消息所使用的用户 ID 必须已获取过用户 Token,否则消息一旦触发离线推送,通知内无法正确显示发送者的用户信息。 |
| toUserId | String[] | 是 | 接收用户 ID,提供多个本参数可以实现向多人发送消息,上限为 100 人。 |
| objectName | String | 是 | 接受内置消息类型(见[消息类型概述](../message-about/about-message-types.md))或自定义消息的消息类型值。
**注意**:在自定义消息时,消息类型不可以 "RC:" 开头,以免与系统内置消息类型重名;消息类型长度不可超过 32 个字符。SDK 中必须已注册过该自定义消息,否则 SDK 收到该消息后将无法解析。 |
| values | Array of objects | 是 | 为消息内容(`content`)、推送通知内容(`pushContent`)、推送数据(`pushData`)中的标识位(标识位示例:`{d}`)提供对应的值。 |
| content | String | 是 | 所发送消息的内容,单条消息最大 128k。
例如,文本消息内容 JSON 结构体内部包含 content 字段(此为 JSON 结构体内的 key 值,注意区分),则需要将 `{"content":"Hello world!"}` 序列化后的结果作为此处 `content` 字段的值。