发送消息
更新时间: 2024/07/17 17:57:34
云信服务端提供 API,支持发送圈组的消息。调用时,可配置消息所属的服务器和频道、消息类型、消息内容、离线推送文案、是否存云端历史、是否@人、是否对消息进行内容审核、是否抄送、是否配置为对 Thread 中某条消息的回复等。
功能介绍
本 API 主要支持发送的消息类型包括文本消息、图片消息、语音消息、视频消息、文件消息、提示消息、地理位置消息和自定义消息。同时支持如下功能:
功能 |
说明 |
---|---|
存云端历史 | 圈组消息默认存云端历史且支持查询,具体查询方式请参见云端历史消息查询 |
@ 功能 | @ 某些人、@ 频道内所有人、@ 某些身份组,具体见下文带 mention 关键字的参数 |
未读数 | 每个频道上的 消息未读数 默认最多显示为 99+。可在云信控制台配置最大未读数(在云信控制台选择应用,进入IM 即时通讯 > 功能配置 > 圈组 > 子功能配置 > 所有未读消息(包括@)的消息计数即可配置)。
|
离线推送 | 指定离线推送文案和离线推送的 payload。 |
会话消息回复 (Thread) |
指定与 Thread 相关的配置信息,发送一条引用某条消息的回复。Thread 指以一条消息作为根消息的消息回复树状结构。具体相关参数请参见下文请求参数表格中带reply和thread关键字的参数)。更多概念性介绍,请参见会话消息回复(Thread)功能介绍 |
内容审核 | 配置内容审核相关参数,对消息内容进行内容审核。具体参数说明,见下文的useYidun、antispam、antispamCustom、bid、yidunAntiCheating和yidunAntiSpamExt。更多相关介绍,参见圈组内容审核中的背景信息与前提条件 |
消息抄送 | 指定消息是否需要抄送(见下文routeEnable),并可指定需要将消息抄送到的服务器的地址(见下文env参数)。更多相关介绍,参见消息抄送服务概述。 |
下行消息量(云信服务端发送至客户端的消息)为计费特征, 下行消息包含客户端主动拉取的历史消息和在线期间收到的消息。
调用限制
限制类型 |
说明 |
---|---|
调用时机 | 发送消息前请确保已通过服务端 API 或 SDK API 在圈组服务器下创建频道。圈组消息只能在频道内发送。 |
功能开通 | 消息抄送、内容审核和会话消息回复(Thread) 的配置,均需在开通圈组功能后再额外开通才能使用。 |
特殊场景限制 | 如果需要实现会话消息回复(Thread),即引用某条消息进行回复,相关的 8 个可选参数都 必须传入相应的值,不能为空,否则无法回复成功。具体见下文的Thread 配置场景示例 |
URL
httpPOST https://api.netease.im/nimserver/qchat/sendMsg.action HTTP/1.1
Content-Type:application/x-www-form-urlencoded;charset=utf-8
请求参数
-
POST 请求中 Headers 的设置请参考API调用方式。
-
POST 请求中 Body 的设置如下:
参数 |
类型 |
是否必须 |
说明 |
---|---|---|---|
from |
String |
是 |
消息发送者的用户账号(accid) |
serverId |
long |
是 |
服务器 ID |
channelId |
long |
是 |
频道 ID |
type |
int |
是 |
消息类型
|
body |
String |
是 |
消息内容,最大 5,000 字符 |
attach |
String |
否 |
消息附件,最大5,000字符 |
ext |
String |
否 |
扩展字段,最大1,024字符 |
msgIdClient |
String |
否 |
客户端消息ID |
pushContent |
String |
否 |
推送文案,最长 500 个字符。具体参见 推送配置参数详解。 |
pushPayload |
JSON |
否 |
推送对应的 payload,必须是 JSON 格式,不能超过 2048 字符。更多说明请参见 推送 payload 配置 |
option |
JSON |
否 |
发送消息时特殊指定的行为选项, JSON 格式,可用于指定消息的存云端历史,推送等特殊行为; option 中字段不填时表示默认值,option示例: {"push":false,"history":false,"badge":false,"needPushNick":true} 字段说明:
|
mentionedAll |
int |
否 |
是否 @所有人,0 或 1,1 表示 @所有人。 |
mentionedRoleidList |
JSON Array |
否 |
被 @ 的身份组列表,最多@ 10 个身份组。如果 mentionedAll=1,则本参数无效 |
mentionedAccidList |
JSON Array |
否 |
@ 的用户账号(accid)列表,最大 100 个,如果 mentionedAll=1 或 mentionedRoleidList 不为空,则本参数无效 |
env |
String |
否 |
当前消息需要抄送到的环境的名称,对应您在云信控制台中配置的自定义抄送的环境名称(如下图),最大 32 个字符 |
replyMsgFromAccount |
String |
否 |
被回复的消息(假设为消息1)的发送者账号。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
replyMsgTime |
long |
否 |
被回复的消息(假设为消息1)的发送时间。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
replyMsgIdServer |
long |
否 |
被回复的消息(假设为消息1)的服务端消息 ID。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
replyMsgIdClient |
String |
否 |
被回复的消息(假设为消息1)的客户端消息 ID。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
threadMsgFromAccount |
String |
否 |
被回复的消息(假设为消息1)所属 Thread 的根消息的发送者账号。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
threadMsgTime |
long |
否 |
被回复的消息(假设为消息1)所属 Thread 的根消息的发送时间。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
threadMsgIdServer |
long |
否 |
被回复的消息(假设为消息1)所属 Thread 的根消息的服务端消息 ID。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
threadMsgIdClient |
String |
否 |
被回复的消息(假设为消息1)所属 Thread 的根消息的客户端消息 ID。如果需要回复消息1,则该参数必传。场景示例见下文的Thread配置场景示例 |
useYidun |
String |
否 |
0:在开通安全通(即易盾反垃圾)的情况下,不将消息提交给易盾进行内容审核(包括自定义消息) 若不填此字段,即在默认情况下,若应用开通了安全通,则使用安全通来进行内容审核 |
antispam |
String |
否 |
对于开通了安全通(即易盾反垃圾)的应用,本消息是否需要指定经由易盾检测的内容(antispamCustom)。 true或false, 默认false。 只对消息类型为 100 的消息(即自定义消息)生效。 |
antispamCustom |
String |
否 |
自定义的反垃圾检测内容, JSON格式,长度限制同 body 字段,不能超过 5000 字符。在 antispam 参数为 true 时生效。要求antispamCustom格式如下: {"type":1,"data":"custom content"} 字段说明: type: 1:文本,2:图片。 data:文本内容或图片 URL 地址。 |
bid |
String |
否 |
安全通的自定义反垃圾(即内容审核)业务的 ID。自定义反垃圾业务主要用来针对圈组的资料信息进行除了默认反垃圾业务以外的内容审核 |
yidunAntiCheating |
String |
否 |
可选,易盾反垃圾含圈组反作弊专属字段,限制 JSON 格式,长度限制1024,具体请参见文本防刷版开发文档 |
yidunAntiSpamExt |
String |
否 |
可选,易盾反垃圾扩展字段,限制 JSON 格式,长度限制1024,具体请参见易盾的反垃圾含圈组版用户可扩展参数 |
返回参数
参数 |
类型 |
说明 |
---|---|---|
code | int | 状态码,表示请求结果状态,如返回 200 则表示请求成功 |
data | String | 发送出的消息数据 |
其中 data 包含的参数如下:
参数 |
类型 |
说明 |
---|---|---|
time | String | 消息发送时间 |
msgIdClient | String | 客户端的消息 ID |
msgIdServer | String | 云信服务端的消息 ID |
antispam | String | 自定义消息是否经由易盾进行内容审核,false:不审核 |
安全通的内容审核结果相关字段信息,请参见审核结果字段说明。
示例
cURL请求示例
curlcurl -X POST -H "AppKey: go9dnk49bk**0803mgq3" -H "Nonce: 4tggg**t23t" -H "CurTime: 1443592222" -H "CheckSum: 9e9db3b6c9abb2e1962cf3e6f7316fcc55583f86" -H "Content-Type: application/x-www-form-urlencoded" -d 'accid=zhangsan&type=0&serverId=1&channelId=1&body=abc' 'https://api.netease.im/nimserver/qchat/sendMsg.action'
返回示例
HTTP 响应:JSON
json"Content-Type": "application/json; charset=utf-8"
{
"code":200,
"data": {
"time": 112121,
"msgIdClient": "sasas",
"msgIdServer": 123,
"antispam": false
}
}
Thread配置场景示例
以上图所示 Thread 的回复场景为例,
-
假设需要发送消息C1 回复消息 B1,Thread 相关的请求参数配置如下:
参数
类型
是否必填
说明
该场景需传入的值
replyMsgFromAccount
String
是
被回复的消息的发送方的账号
消息B1 的发送者账号
该场景下“被回复的消息”为消息B1replyMsgTime
long
是
被回复的消息的发送时间
消息B1 的发送时间
replyMsgIdServer
long
是
被回复的消息的服务端消息 ID,即云信服务端给出的该消息的 ID
消息B1 的服务端消息 ID
replyMsgIdClient
String
是
被回复的消息的客户端消息 ID,即 SDK 给出的该消息的 ID
消息B1 的客户端消息 ID
threadMsgFromAccount
String
是
根消息的发送方的账号
消息A 的发送者账号
该场景下消息A 为该 Thread 的“根消息”threadMsgTime
long
是
根消息的发送时间
消息A 的发送时间
threadMsgIdServer
long
是
根消息的服务端消息 ID,即云信服务端给出的该消息的 ID
消息A 的服务端消息 ID
threadMsgIdClient
String
是
根消息的客户端消息 ID,即 SDK 给出的该消息的 ID
消息A 的客户端消息 ID
-
假设需要发送消息B1 回复消息 A,Thread 相关的请求参数配置如下:
参数
类型
是否必填
说明
该场景需传入的值
replyMsgFromAccount
String
是
被回复的消息的发送方的账号
消息A 的发送者账号
该场景下“被回复的消息”为消息AreplyMsgTime
long
是
被回复的消息的发送时间
消息A 的发送时间
replyMsgIdServer
long
是
被回复的消息的服务端消息 ID,即云信服务端给出的该消息的 ID
消息A 的服务端消息 ID
replyMsgIdClient
String
是
被回复的消息的客户端消息 ID,即 SDK 给出的该消息的 ID
消息A 的客户端消息 ID
threadMsgFromAccount
String
是
根消息的发送方账号
消息A 的发送者账号
该场景下,消息A 既为“被回复的消息”,也为“根消息”threadMsgTime
long
是
根消息的发送时间
消息A 的发送时间
threadMsgIdServer
long
是
根消息的服务端消息 ID,即云信服务端给出的该消息的 ID
消息A 的服务端消息 ID
threadMsgIdClient
String
是
根消息的客户端消息 ID,即 SDK 给出的该消息的 ID
消息A 的客户端消息 ID
状态码
该接口在 HTTPS Body 中返回请求的状态码,以下仅列出与接口业务相关的状态码。完整状态码请参见状态码。
状态码 | 说明 | 处理建议 |
---|---|---|
200 | 请求成功 | - |
403 | 非法操作或没有权限 |
|
404 | 对象不存在 |
|
414 | 参数错误 | 根据提示信息,检查传入参数的格式和限制条件 |
416 | 调用频率超限 | 降低调用频率 |
431 | HTTP 重复请求 | - |