发送聊天室消息

大约 29 分钟

发送聊天室消息

环信即时通讯 IM 支持在服务端实现聊天室场景中全类型消息的发送与接收,包括文本消息、图片消息、语音消息、视频消息、文件消息、透传消息和自定义消息。

功能说明

发送方式

聊天室场景下,发送各类型的消息调用需调用同一 RESTful API,不同类型的消息只是请求体中的 body 字段内容存在差异,发送方式与单聊类似。

消息类型

发送方式

备注

文本/透传消息

调用发送消息方法,在请求 body 中传入消息内容。

1.发送消息时,可选的 `from` 字段用于指定发送方。

2. 消息支持扩展属性 `ext`,可添加自定义信息。同时,推送通知也支持自定义扩展字段,详见 APNs 自定义显示和 Android 推送字段说明。

图片/语音/视频/文件消息

1. 调用文件上传方法上传图片、语音、视频或其他类型文件,并从响应 body 中获取文件 UUID。

2. 调用发送消息方法,在请求 body 中传入该 UUID。

 

特别说明

  • 接口调用过程中,请求体和扩展字段的总长度不能超过 5 KB。
  • 该接口不校验传入的发送方用户 ID 和作为接收方的聊天室 ID。如果你传入的发送方用户 ID 和聊天室 ID 不存在,服务器并不会提示,仍照常发送消息。
  • 聊天室中发消息时,不会同步给发送方。
  • 你可以设置哪些用户拉漫游消息时拉不到该消息(roam_ignore_users 参数)。
  • 通过 RESTful 接口发送的消息默认不写入会话列表,若需要此类消息写入会话列表,需在环信控制台开通。
  • 调用该接口会触发发送后回调事件,请查看 回调事件文档。

聊天室消息优先级

对于聊天室消息,环信即时通讯提供消息分级功能,支持高、普通和低三种优先级,高优先级的消息会优先送达。你可以在创建消息时对指定消息类型或指定成员的消息设置为高优先级,确保这些消息优先送达。这种方式可以确保在聊天室内消息并发量较大或消息发送频率过高的情况下,服务器首先丢弃低优先级消息,将资源留给高优先级消息,确保重要消息(如打赏、公告等)优先送达,以此提升重要消息的可靠性。请注意,该功能并不保证高优先级消息必达。在聊天室内消息并发量过大的情况下,为保证用户实时互动的流畅性,即使是高优先级消息仍然会被丢弃。

聊天室消息丢弃逻辑

对于单个聊天室,每秒发送的消息数量默认超过 20 条,则会触发消息丢弃逻辑,即首先丢弃低优先级的消息,优先保留高优先级的消息。若带有优先级的消息超过了 20 条/秒,则按照消息发送时间顺序处理,丢弃后发送的消息。

前提条件

要调用环信即时通讯 REST API,请确保满足以下要求:

公共参数

请求参数

参数类型是否必需描述
hostString是访问 RESTful API 的域名或服务器信息。
-公有云集成为 环信即时通讯控制台的 即时通讯->服务概览页面下的 域名配置- Rest Api。
-私有化集成为部署后 服务器地址:端口。
org_nameString是每个公司(组织)分配的唯一标识。详见 环信即时通讯控制台的 应用概览->应用详情页面下的 应用信息-Orgname。
app_nameString是创建应用时填入的应用名称。详见 环信即时通讯控制台的 应用概览->应用详情页面下的 应用信息-Appname。

响应参数

参数类型描述
actionString请求方法。
organizationString环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 org_name 相同。
applicationString应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。
applicationNameString你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 app_name 相同。
uriString请求 URL。
pathString请求路径,属于请求 URL 的一部分,开发者无需关注。
timestampLongHTTP 响应的 Unix 时间戳,单位为毫秒。
durationInt从发送 HTTP 请求到响应的时长,单位为毫秒。

认证方式

环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 Authorization 字段:

Authorization: Bearer YourAppToken

为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。本文涉及的所有消息管理 REST API 都需要使用 App Token 的鉴权方式,详见 使用 App Token 鉴权。

发送文本消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

下表为发送各类消息的通用请求体,为 JSON 对象,是所有消息的外层结构。与单聊消息类似,不同类型的消息的请求体只是 body 字段内容存在差异。

提示

聊天室消息的通用请求体中的参数与发送单聊消息类似,唯一区别在于聊天室中的 to 字段表示消息接收方聊天室 ID 数组并增加了 chatroom_msg_level 参数用于设置消息优先级。

参数类型是否必需描述
fromString否消息发送方的用户 ID。若不传入该字段,服务器默认设置为 admin。

提示

1. 服务器不校验传入的用户 ID 是否存在,因此,如果你传入的用户 ID 不存在,服务器并不会提示,仍照常发送消息。
2. 若传入字段但值为空字符串 (“”),请求失败。

toArray是消息接收方聊天室 ID 数组。每次最多可向 10 个聊天室发送消息。

提示

服务器不校验传入的聊天室 ID 是否存在,因此,如果你传入的聊天室 ID 不存在,服务器并不会提示,仍照常发送消息。

chatroom_msg_levelString否聊天室消息优先级:
- high:高;
- (默认)normal:普通;
- low:低。
typeString是消息类型:
- txt:文本消息;
- img:图片消息;
- audio:语音消息;
- video:视频消息;
- file:文件消息;
- loc:位置消息;
- cmd:透传消息;
- custom:自定义消息。
bodyJSON是消息内容。body 包含的字段见下表说明。
roam_ignore_usersList否设置哪些用户拉漫游消息时拉不到该消息。每次最多可传入 20 个用户 ID。
extJSON否消息支持扩展字段,可添加自定义信息。不能对该参数传入 null。同时,推送通知也支持自定义扩展字段,详见 APNs 自定义显示 和 Android 推送字段说明。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
msgString是消息内容。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token

curl -X POST -i 'https://XXXX/XXXX/XXXX/messages/chatrooms' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YourAppToken>' \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "txt",
  "body": {
    "msg": "testmessages"
  },
  "roam_ignore_users": []
}'

响应示例

消息发送成功的响应示例:

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

消息发送失败的响应示例如下:

{
    "error": "message_send_error",
    "exception": "MessageSendException",
    "timestamp": 1748574587817,
    "duration": 0,
    "error_code": 14007,
    "error_description": "message is too large"
}

发送图片消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

关于通用请求体,详见发送文本消息。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
filenameString否图片名称。建议传入该参数,否则客户端收到图片消息时无法显示图片名称。
secretString否图片的访问密钥,即成功上传图片后,从 文件上传 的响应 body 中获取的 share-secret。如果图片文件上传时设置了文件访问限制(restrict-access),则该字段为必填。
sizeJSON否图片尺寸,单位为像素,包含以下字段:
- height:图片高度;
- width:图片宽度。
urlString是图片 URL 地址:https://{host}/{org_name}/{app_name}/chatfiles/{file_uuid}。其中 file_uuid 为文件 ID,成功上传图片文件后,从 文件上传 的响应 body 中获取。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token

curl -X POST -i 'https://XXXX/XXXX/XXXX/messages/chatrooms' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YourAppToken>' \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "img",
  "body": {
    "filename":"testimg.jpg",
    "secret":"VfXXXXNb_",
    "url":"https://XXXX/XXXX/XXXX/chatfiles/55f12940-XXXX-XXXX-8a5b-ff2336f03252",
    "size":{
      "width":480,
      "height":720
    }
  }
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

发送语音消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

关于通用请求体,详见发送文本消息。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
filenameString否语音文件的名称。建议传入该参数,否则客户端收到语音消息时无法显示语音文件名称。
secretString否语音文件访问密钥,即成功上传语音文件后,从 文件上传 的响应 body 中获取的 share-secret。 如果语音文件上传时设置了文件访问限制(restrict-access),则该字段为必填。
LengthInt否语音时长,单位为秒。
urlString是语音文件 URL 地址:https://{host}/{org_name}/{app_name}/chatfiles/{file_uuid}。file_uuid 为文件 ID,成功上传语音文件后,从 文件上传 的响应 body 中获取。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token

curl -X POST -i 'https://XXXX/XXXX/XXXX/messages/chatrooms' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YourAppToken>' \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "audio",
  "body": {
    "url": "https://XXXX/XXXX/XXXX/chatfiles/1dfc7f50-XXXX-XXXX-8a07-7d75b8fb3d42",
    "filename": "testaudio.amr",
    "length": 10,
    "secret": "HfXXXXCjM"
  }
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

发送视频消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

关于通用请求体,详见发送文本消息。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
filenameString否视频文件名称。建议传入该参数,否则客户端收到视频消息时无法显示视频文件名称。
thumbString否视频缩略图 URL 地址:https://{host}/{org_name}/{app_name}/chatfiles/{file_uuid}。file_uuid 为视频缩略图唯一标识,成功上传缩略图文件后,从 文件上传 的响应 body 中获取。
lengthInt否视频时长,单位为秒。
secretString否视频文件访问密钥,即成功上传视频文件后,从 文件上传 的响应 body 中获取的 share-secret。如果视频文件上传时设置了文件访问限制(restrict-access),则该字段为必填。
file_lengthLong否视频文件大小,单位为字节。
thumb_secretString否视频缩略图访问密钥,即成功上传视频文件后,从 文件上传 的响应 body 中获取的 share-secret。如果缩略图文件上传时设置了文件访问限制(restrict-access),则该字段为必填。
urlString是视频文件 URL 地址:https://{host}/{org_name}/{app_name}/chatfiles/{file_uuid}。其中 file_uuid 为文件 ID,成功上传视频文件后,从 文件上传 的响应 body 中获取。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token
curl -X POST -i 'https://XXXX/XXXX/XXXX/messages/chatrooms' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YourAppToken>' \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "video",
  "body": {
    "thumb" : "https://XXXX/XXXX/XXXX/chatfiles/67279b20-7f69-11e4-8eee-21d3334b3a97",
    "length" : 0,"secret":"VfXXXXNb_",
    "file_length" : 58103,
    "thumb_secret" : "ZyXXXX2I",
    "url" : "https://XXXX/XXXX/XXXX/chatfiles/671dfe30-XXXX-XXXX-ba67-8fef0d502f46"
  }
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

发送文件消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

关于通用请求体,详见发送文本消息。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
filenameString否文件名称。建议传入该参数,否则客户端收到文件消息时无法显示文件名称。
secretString否文件访问密钥,即成功上传文件后,从 文件上传 的响应 body 中获取的 share-secret。如果文件上传时设置了文件访问限制(restrict-access),则该字段为必填。
urlString是文件 URL 地址:https://{host}/{org_name}/{app_name}/chatfiles/{file_uuid}。其中 file_uuid 为文件 ID,成功上传视频文件后,从 文件上传 的响应 body 中获取。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token
curl -X POST -i 'https://XXXX/XXXX/XXXX/messages/chatrooms' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YourAppToken>' \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "file",
  "body": {
    "filename":"test.txt",
    "secret":"1-g0XXXXua",
    "url":"https://XXXX/XXXX/XXXX/chatfiles/d7eXXXX7444"
  }
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

发送位置消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

关于通用请求体,详见发送文本消息。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
latString是位置的纬度,单位为度。
lngString是位置的经度,单位为度。
addrString是位置的文字描述。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token

curl -X POST -i "https://XXXX/XXXX/XXXX/messages/chatrooms"  \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YourAppToken>' \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "loc",
  "body":{
    "lat": "39.966",
    "lng":"116.322",
    "addr":"中国北京市海淀区中关村"
  }
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

发送透传消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

关于通用请求体,详见发送文本消息。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
actionString是命令内容。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token

curl -X POST -i "https://XXXX/XXXX/XXXX/messages/chatrooms" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \ 
-H "Authorization:Bearer <YourAppToken>" \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "cmd",
  "body":{
    "action":"action1"
  }
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

发送自定义消息

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。请填 application/json。
AcceptString是内容类型。请填 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

关于通用请求体,详见发送文本消息。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
customEventString否用户自定义的事件类型。该参数的值必须满足正则表达式 [a-zA-Z0-9-_/\.]{1,32},长度为 1-32 个字符。
customExtsJSON否用户自定义的事件属性,类型必须是 Map<String,String>,最多可以包含 16 个元素。customExts 是可选的,不需要可以不传。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token
curl -X POST -i "https://XXXX/XXXX/XXXX/messages/chatrooms" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H "Authorization:Bearer <YourAppToken>" \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "custom",
  "body": {
    "customEvent": "custom_event",
    "customExts":{
            "ext_key1":"ext_value1"
        }
  }
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

发送定向消息

你可以向聊天室中指定的一个或多个成员发送消息,但单次只能向 一个聊天室 中的 20 个用户 发送定向消息。对于定向消息,只有作为接收方的指定成员才能看到消息,其他聊天室成员则看不到该消息。

提示

  1. 定向消息不写入会话列表,不计入聊天室会话的未读消息数。
  2. 聊天室定向消息的漫游功能默认关闭,使用前需联系商务开通聊天室消息漫游和定向消息漫游功能。
  3. 聊天室中发送的定向消息均同步给发送方。

发送频率:100 次/秒/App Key

以下以文本消息为例介绍如何在聊天室中发送定向消息。

HTTP 请求

POST https://{host}/{org_name}/{app_name}/messages/chatrooms/users

路径参数

参数及说明详见 公共参数。

请求 header

参数类型是否必需描述
Content-TypeString是内容类型。填入 application/json。
AcceptString是内容类型。填入 application/json。
AuthorizationString是App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

请求 body

下表为发送各类消息的通用请求体,为 JSON 对象,是所有消息的外层结构。不同类型的消息的请求体只是 body 字段内容存在差异。

参数类型是否必需描述
fromString否消息发送方的用户 ID。若不传入该字段,服务器默认设置为管理员,即 “admin”;若传入该字段但值为空字符串 (“”),则请求失败。
toArray是消息接收方所属的聊天室 ID。每次最多可传入 1 个聊天室 ID。
chatroom_msg_levelString否聊天室消息优先级:
- high:高;
- (默认)normal:普通;
- low:低。
typeString是消息类型:
- txt:文本消息;
- img:图片消息;
- audio:语音消息;
- video:视频消息;
- file:文件消息;
- loc:位置消息;
- cmd:透传消息;
- custom:自定义消息。
bodyJSON是消息内容。body 包含的字段见下表说明。
extJSON否消息支持扩展字段,可添加自定义信息。不能对该参数传入 null。同时,推送通知也支持自定义扩展字段,详见 APNs 自定义显示 和 Android 推送字段说明。
usersArray是接收消息的聊天室成员的用户 ID 数组。每次最多可传 20 个用户 ID。

请求体中的 body 字段说明详见下表。

参数类型是否必需描述
msgString是消息内容。

对于其他类型的消息,body 字段的说明详见发送各类型的普通群聊消息的请求体中的 body 字段说明。

HTTP 响应

响应 body

如果返回的 HTTP 状态码为 200,表示请求成功,响应 body 包含如下字段:

参数类型描述
dataJSON返回数据详情。该字段的值为包含聊天室 ID 和 发送的消息的 ID 的键值对。
例如 "185145305923585": "1029545553039460728",表示在 ID 为 184524748161025 的聊天室中发送了消息 ID 为 1029545553039460728 的消息。

其他参数及说明详见 公共参数。

如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 响应状态码 了解可能的原因。

示例

请求示例

# 将 <YourAppToken> 替换为你在服务端生成的 App Token

curl -X POST -i 'https://XXXX/XXXX/XXXX/messages/chatrooms' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YourAppToken>' \
-d '{
  "from": "user1",
  "to": ["185145305923585"],
  "type": "txt",
  "body": {
    "msg": "testmessages"
  },
  "users": ["user2", "user3"]
}'

响应示例

{
  "path": "/messages/chatrooms",
  "uri": "https://XXXX/XXXX/XXXX/messages/chatrooms",
  "timestamp": 1657254052191,
  "organization": "XXXX",
  "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
  "action": "post",
  "data": {
    "185145305923585": "1029545553039460728"
  },
  "duration": 0,
  "applicationName": "XXXX"
}

错误码

  1. 调用发送聊天室消息的接口发送各类消息时,如果返回的 HTTP 状态码非 200,表示请求失败,可能提示以下错误码:
HTTP 状态码错误类型错误提示可能原因处理建议
400invalid_request_bodyRequest body is invalid. Please check body is correct.请求体格式不正确。检查请求体内容是否合法(字段类型是否正确)。
400message_send_errorparam from can't be empty请求参数 from 是空字符串。输入正确的请求参数 from。 若不传该字段, 服务器会默认设置为 admin。
400message_send_errorparam to can't be empty请求参数 to 是空数组。输入正确的请求参数 to。
400message_send_errorparam type can't be empty请求参数 type 是空字符串。输入正确的请求参数 type。
400message_send_errorparam body can't be empty请求参数 body 是空 JSON。输入正确的请求参数 body。
400message_send_errorparam ext must be JSONObject请求参数 ext 类型不正确。输入正确的请求参数 ext(JSON 格式)。
400message_send_errorparams to's size can't exceed limit 10请求参数 to 数量超出最大限制 10 个聊天室 ID。输入正确的请求参数 to(数量限制在 10 个聊天室 ID 以内)。
400message_send_errormessage is too large请求体内容中 body 和 ext 字段的内容过大。限制 body 和 ext 字段的内容,不能超过 5 KB。
403message_send_errormessage send reach limit请求 API 频率超出限制。限制 API 请求频率,详见文档描述。
  1. 对于定向消息来说,如果返回的 HTTP 状态码非 200,表示请求失败,可能提示以下错误码:
HTTP 状态码错误类型错误提示可能原因处理建议
400invalid_request_bodyRequest body is invalid. Please check body is correct.请求体格式不正确。检查请求体内容是否合法(字段类型是否正确)。
400message_send_errorparam from can't be empty请求参数 from 是空字符串。输入正确的请求参数 from。若不传该字段, 服务器会默认设置为 admin。
400message_send_errorparam to can't be empty请求参数 to 是空数组。输入正确的请求参数 to。
400message_send_errorparam type can't be empty请求参数 type 是空字符串。输入正确的请求参数 type。
400message_send_errorparam body can't be empty请求参数 body 是空JSON。输入正确的请求参数 body。
400message_send_errorparam ext must be JSONObject请求参数 ext 类型不正确。输入正确的请求参数 ext(JSON 格式)。
400message_send_errorparam users can't be empty请求参数 users 是空数组。输入正确的请求参数 users。
400message_send_errorparams to's size can't exceed limit 10请求参数 to 数量超出最大限制 10。输入正确的请求参数 to。每次最多能传入 10 个聊天室 ID。
400message_send_errormessage is too large请求体内容中 body 和 ext 字段的内容过大。限制 body 和 ext 字段的内容。
403message_send_errormessage send reach limit消息发送频率超出限制(默认 1 秒内只允许发送 100 条聊天室消息)。限制消息发送频率,详见文档说明。
上次编辑于: