请求的 Base URL 可以在云服务控制台 > 设置 > 应用凭证 > 服务器地址查看。 对于 POST 和 PUT 请求,请求的主体必须是 JSON 格式,而且 HTTP Header 的 Content-Type 需要设置为 application/json。 请求的鉴权是通过 HTTP Header 里面包含的键值对来进行的,详见 存储 REST API 使用指南 中的 请求格式 一节的说明。
application/json
_Conversation 表包含一些内置的关键字段定义了对话的属性、成员等,单聊、群聊、聊天室、服务号均在此表中,详见 即时通讯总览-对话 一节。不过为了避免出现数据不一致问题,我们不推荐调用数据存储相关的 API 直接操作 _Conversation 表中的数据。
_Conversation
当前的 API 版本为 1.2:
1.2
rtm/conversations
rtm/chatrooms
tr
rtm/service-conversations
sys
除此之外,与 client 相关的请求以 rtm/clients 标示。 最后,一些全局性质的 API 直接以 rtm/{function} 标示,如 rtm/all-conversations 可查询所有类型的对话。
rtm/clients
rtm/{function}
rtm/all-conversations
在 _Conversation 表默认 ACL 权限下本接口要求使用 master key。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"name":"My First Conversation", "m": ["BillGates", "SteveJobs"], "unique": true}' \ https://API_BASE_URL/1.2/rtm/conversations
上面的例子会创建一个最简单的对话,包括两个 client ID 为 BillGates 和 SteveJobs 的初始成员。对话创建成功会返回 objectId,即即时通讯中的对话 ID,客户端就可以通过这个 ID 发送消息了。新创建的对话可以在 _Conversation 表内找到。 对话的字段可参考 即时通讯总览-对话 一节。 传入 "unique": true 参数可以保证对话的唯一性。
"unique": true
返回
{ "unique":true, "updatedAt":"2020-05-26T06:42:31.492Z", "name":"My First Conversation", "objectId":"5eccba570d3a42c5fd4e25c3", "m":["BillGates","SteveJobs"], "createdAt":"2020-05-26T06:42:31.482Z", "uniqueId":"6c7b0e5afcae9aa1139a0afa25833dec" }
需要注意,群聊与单聊的唯一区别是 client 数量,API 层面是一致的。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'where={"name": "first conversation"}' \ --data-urlencode 'skip=1' \ --data-urlencode 'limit=20' \ https://API_BASE_URL/1.2/rtm/conversations
{"results": [ {"name":"test conv1", "m":["tom", "jerry"], "createdAt":"2018-01-17T04:15:33.386Z", "updatedAt":"2018-01-17T04:15:33.386Z", "objectId":"5a5ecde6c3422b738c8779d7"} ]}
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"name":"Updated Conversation"}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}
_Conversation 表除 m 字段均可通过这个接口更新。
{"updatedAt":"2018-01-16T03:40:37.683Z", "objectId":"5a5d7433c3422b31ed845e76"}
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}
{}
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["Tom", "Jerry"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/members
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["Tom", "Jerry"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/members
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/members
{"result": ["client1", "client2"]}
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["Tom", "Jerry"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/mutes
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["Tom", "Jerry"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/mutes
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/mutes
该接口要求使用 master key。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "message": ""}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/messages
注意,由于这个接口的管理性质,当你通过这个接口发送消息时,我们不会检查 from_client 是否有权限给这个对话发送消息,而是统统放行,请谨慎使用这个接口。
如果你在应用中使用了我们内部定义的富媒体消息格式,在发送消息时 message 字段需要遵守相应的格式要求,详见下文 富媒体消息格式 。
返回说明:
默认情况下发送消息 API 使用异步的方式,调用后返回消息 id 和接收消息的服务器时间戳,例如 {"msg-id":"qNkRkFWOeSqP65S9fDyHJw", "timestamp":1495431811151}。
{"msg-id":"qNkRkFWOeSqP65S9fDyHJw", "timestamp":1495431811151}
频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
该接口要求使用 master key。 为了保证获取聊天记录的安全性,可以开启签名认证,具体可以参考 即时通讯开发指南 第三篇的 安全与签名 一节。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/messages
本接口时间参数较多,这里举一示例供大家参考。比如某对话内有三条消息,id 分别为 id1、id2、id3,发消息的时间分别是 t1、t2、t3(t1 < t2 < t3),下面列举出不同参数组合的查询结果(空白表示使用默认值):
返回数据格式,JSON 数组,默认按消息记录从新到旧排序,设置请求参数 reversed 后以相反的方向排序。
reversed
返回:
[ { "timestamp": 1408008498571, "conv-id": "219946ef32e40c515d33ae6975a5c593", "data": "今天天气不错!", "from": "u111872755_9d0461adf9c267ae263b3742c60fa", "msg-id": "vdkGm4dtRNmhQ5gqUTFBiA", "is-conv": true, "is-room": false, "to": "5541c02ce4b0f83f4d44414e", "bin": false, "from-ip": "202.117.15.217" }, ... ]
如需查询某个用户发出的消息,可以调用 GET /rtm/clients/{client_id}/messages 这个接口。 如需查询整个应用的历史消息,可以调用 GET /rtm/messages 这个接口。
GET /rtm/clients/{client_id}/messages
GET /rtm/messages
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "timestamp": 123, "message": ""}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/messages/{message_id}
成功则返回状态码 200 OK。
200 OK
该接口要求使用 master key。需要相应 SDK 的支持,具体可参考之前的修改消息接口。
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "timestamp": 123}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/messages/{message_id}/recall
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'from_client=some-client-id' \ --data-urlencode 'timestamp=123' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/messages/{message_id}
注意,该接口仅删除服务端的消息,对客户端无影响。
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
该接口要求使用 master key。 每个对话最多允许添加 500 个永久性禁言用户。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"clientId": "client", "role": "role"}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/member-infos
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/member-infos/{info-id}
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"clientId": "client", "role": "role"}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/member-infos/{info-id}
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'skip=1' \ --data-urlencode 'limit=20' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/member-infos
{"results": [{"clientId":"client1", "objectId":"5a5d7433c3422b31ed845e76", "role": "Manager"}]}
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_id": "some-client-id", "ttl": 50}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/temporary-silenceds
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'client_id=some-client-id' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/temporary-silenceds
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/permanent-silenceds
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/permanent-silenceds
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'limit=20' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/permanent-silenceds
{"client_ids": ["client1", "client2"]}
加入黑名单的 client 不允许再加入该对话,如果之前在该对话中将被移除。每个对话最多允许添加 500 个黑名单。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/blacklists
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/blacklists
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/conversations/{conv_id}/blacklists
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"name":"My First Chatroom"}' \ https://API_BASE_URL/1.2/rtm/chatrooms
对话的字段可参考 即时通讯总览-对话 一节。
{"objectId":"5a5d7432c3422b31ed845e75", "createdAt":"2018-01-16T03:40:32.814Z"}
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'where={"name": "chatroom"}' \ --data-urlencode 'skip=1' \ --data-urlencode 'limit=20' \ https://API_BASE_URL/1.2/rtm/chatrooms
{"results":[ {"name":"My First Chatroom", "createdAt":"2018-01-17T04:15:33.386Z", "updatedAt":"2018-01-17T04:15:33.386Z", "objectId"=>"5a5ecde6c3422b738c8779d7"} ]}
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"name":"Updated Chatroom"}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/members
{"result": ["clientid1", "clientid2", "clientid3"]}
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/members/online-count
{"result": 3}
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "message": ""}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/messages
注意,由于这个接口的管理性质,当你通过这个接口发送消息时,我们不会检查 from_client 是否有权限给这个聊天室发送消息,而是统统放行,请谨慎使用这个接口。此外,聊天室目前不支持将消息同步发送给在线的 from_client。
如果你在应用中使用了我们内部定义的富媒体消息格式,在发送消息时 message 字段需要遵守相应的格式要求,详见下文 富媒体消息格式。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/messages
如需查询某个用户发出的消息,可以调用 GET /rtm/clients/{client_id}/messages 这个接口。 如需查询整个应用的历史消息,可以调用 GET /rtm/messages 这个接口
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "timestamp": 123, "message": ""}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/messages/{message_id}
该接口要求使用 master key。需要相应 SDK 的支持,具体可参考上面的「修改消息」接口。
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "timestamp": 123}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/messages/{message_id}/recall
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'from_client=some-client-id' \ --data-urlencode 'timestamp=123' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/messages/{message_id}
该接口要求使用 master key。 每个聊天室最多允许添加 10,000 个永久性禁言用户。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"clientId": "client", "role": "role"}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/member-infos
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/member-infos/{info-id}
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"clientId": "client", "role": "role"}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/member-infos/{info-id}
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'skip=1' \ --data-urlencode 'limit=20' \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/member-infos
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_id": "some-client-id", "ttl": 50}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/temporary-silenceds
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'client_id=some-client-id' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/temporary-silenceds
该接口要求使用 master key。 每个聊天室最多允许添加 500 个永久性禁言用户。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/permanent-silenceds
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/permanent-silenceds
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'limit=20' \ https://API_BASE_URL/1.2/rtm/chatrooms/{conv_id}/permanent-silenceds
加入黑名单的 client 不允许再加入该聊天室,如果之前在该聊天室中将被移除。每个聊天室最多允许添加 10,000 个黑名单。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/blacklists
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/blacklists
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/chatrooms/{chatroom_id}/blacklists
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"name":"My First Service-conversation"}' \ https://API_BASE_URL/1.2/rtm/service-conversations
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'where={"name": "service"}' \ --data-urlencode 'skip=1' \ --data-urlencode 'limit=20' \ https://API_BASE_URL/1.2/rtm/service-conversations
{"results":[ {"name":"My First Service-conversation", "createdAt":"2018-01-17T04:15:33.386Z", "updatedAt":"2018-01-17T04:15:33.386Z", "objectId":"5a5ecde6c3422b738c8779d7"} ]}
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"name":"Updated Service-conversation"}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_id":"client_id"}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/subscribers
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/subscribers/{client_id}
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/subscribers
[{"timestamp":1491467841116,"subscriber":"client id 1","conv_id":"55b871"}, {"timestamp":1491467852768,"subscriber":"client id 2","conv_id":"55b872"}, ...]
其中 timestamp 表示用户订阅系统对话的时间,subscriber 是订阅用户的 client id。如果一次没有获取完,需要从结果列表中取最后一个订阅者的 client id,作为 client_id 参数再次调用本接口以获取下一批订阅者列表。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/subscribers/count
{"count": 100}
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "message": ""}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/broadcasts
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "timestamp": 123, "message": ""}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/messages/{message_id}
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "timestamp": 123}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/messages/{message_id}/recall
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "message": ""}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/messages
注意,由于这个接口的管理性质,当你通过这个接口发送消息时,我们不会检查 from_client 是否有权限给这个服务号发送消息,而是统统放行,请谨慎使用这个接口。
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "message": "", "timestamp": 123, "to_clients":["a","b","c"]}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/messages/{message_id}
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "timestamp": 123, "to_clients":["a","b","c"]}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/messages/{message_id}/recall
本接口要求使用 master key,并且只能删除订阅消息或给用户单独发送的消息,无法删除广播消息。 广播消息请调用 DELETE /1.2/rtm/broadcasts/{message_id} 接口删除。
DELETE /1.2/rtm/broadcasts/{message_id}
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'from_client=some-client-id' \ --data-urlencode 'timestamp=123' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/subscribers/{client_id}/messages/{message_id}
该接口要求使用 master key。查询结果包含服务号发送的订阅广播消息也包含单独发送的消息。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/subscribers/{client_id}/messages
参数和返回值与查询历史消息接口相同。
加入黑名单的 client 不允许再加入该服务号,如果之前在该服务号中将被移除。每个服务号最多允许添加 10,000 个黑名单。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/blacklists
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/blacklists
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -d '{"client_ids": ["client1", "client2"]}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/blacklists
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"client_ids": ["Tom", "Jerry"]}' \ https://API_BASE_URL/1.2/rtm/clients/check-online
返回在线的 ID 列表
{"results":["client1"]}
注意,该接口不判断用户是否存在,「用户不存在」视同「用户不在线」。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{appkey}}" \ -G \ --data-urlencode 'conv_id=...' \ https://API_BASE_URL/1.2/rtm/clients/{client_id}/unread-count
{"count":1}
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"reason": "why"}' \ https://API_BASE_URL/1.2/rtm/clients/{client_id}/kick
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -G \ --data-urlencode 'conv_id=...' \ --data-urlencode 'timestamp=...' \ --data-urlencode 'limit=...' \ --data-urlencode 'direction=...' \ https://API_BASE_URL/1.2/rtm/clients/{client_id}/service-conversations
返回目标用户订阅系统对话的列表:
[{"timestamp":1482994126561,"subscriber":"XXX","conv_id":"convId1"}, {"timestamp":1491467945277,"subscriber":"XXX","conv_id":"convId2"}, ...]
其中 timestamp 表示用户订阅系统对话的时间,subscriber 是订阅用户的 client id。如果一次没有获取完,需要从结果列表中取最后一个服务号 ID 和订阅时间,分别作为 conv_id 和 timestamp 参数再次调用本接口以获取下一批订阅的系统对话。
timestamp
subscriber
该接口要求使用 master key。 使用这个接口可以查询某 client_id 在单聊、群聊与聊天室里发的消息。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/clients/{client_id}/messages
参数与返回值可以参考 GET /1.2/rtm/conversations/{conv_id}/messages 接口。
GET /1.2/rtm/conversations/{conv_id}/messages
该接口要求使用 master key。 一个 client 可以把一个 群聊/聊天室/服务号 加入黑名单,这样其他人就无法要求其加入该对话了。 目前不支持 client 把另一个 client 加入黑名单。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"conv_id": ""}' \ https://API_BASE_URL/1.2/rtm/clients/{client_id}/blacklists
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"conv_id": ""}' \ https://API_BASE_URL/1.2/rtm/clients/{client_id}/blacklists
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/clients/{client_id}/blacklists
{"conv_ids":["conv1"], "next":"1"}
本接口可以让使用了 LCUser 的应用方便快捷地实现登录认证。 登录认证默认关闭,可以进入 云服务控制台 > 即时通讯 > 设置 > 即时通讯设置,勾选 登录启用签名认证 进行开启。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{appkey}}" \ -G \ --data-urlencode 'session_token=some-token' \ https://API_BASE_URL/1.2/rtm/clients/sign
{ "signature":"bc884dbb617aab1efc228229210e487330abfc7d", "nonce":"akywke3f28", "client_id":"5fb4ff18d0deed36ea501c8a", "timestamp":1614237989966 }
注意,虽然这是一个 GET 请求,但并不是幂等的,每次调用返回的签名都不相同。
为了方便用户进行细粒度控制,实现自定义功能(如黑名单),本接口提供了一个 hook _rtmClientSign,在验证 sessionToken 后去调用,传入的参数为 LCUser 构成的 JSON 对象:
_rtmClientSign
{ "email": "", "sessionToken": "", "updatedAt": "", // 格式:2017-07-11T07:58:10.149Z "phone": "", "objectId": "", "username": "", "createdAt": "", // 格式:2017-07-11T07:58:10.149Z "emailVerified": true/false, "mobilePhoneVerified": true/false }
可以返回两类结果:
{"result": true} // 允许签名 {"result": false, "error": "error message"} // 拒绝签名
本接口会返回应用当前在线用户总数,以及当天有登录记录的独立用户总数。本接口要求使用 master key。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/stats
{"result":{"online_user_count":10212,"user_count_today":1002324}}
其中 online_user_count 表示当前应用在线用户总数,user_count_today 表示当天有登录记录的独立用户总数。
online_user_count
user_count_today
本接口会返回所有的 单聊群聊/聊天室/服务号。在 _Conversation 表默认 ACL 权限下要求使用 master key。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/all-conversations
{"results":[ {"name":"conversation", "createdAt":"2018-01-17T04:15:33.386Z", "updatedAt":"2018-01-17T04:15:33.386Z", "objectId":"5a5ecde6c3422b738c8779d7"} ]}
该接口可以给该应用所有 client 广播一条消息,每天最多 30 条。本接口要求使用 master key。
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "1a", "message": "{\"_lctype\":-1,\"_lctext\":\"这是一个纯文本消息\",\"_lcattrs\":{\"a\":\"_lcattrs 是用来存储用户自定义的一些键值对\"}}", "conv_id": "..."}' \ https://API_BASE_URL/1.2/rtm/broadcasts
Push 的格式与《推送 REST API 指南》的《消息内容参数》一节中 data 下面的部分一致。如果您需要指定开发证书推送,需要在 push 的 json 中设置 "_profile": "dev",例如:
data
"_profile": "dev"
{ "alert": "消息内容", "category": "通知分类名称", "badge": "Increment", "_profile": "dev" }
广播消息修改仅对当前还未收到该广播消息的设备生效,如果目标设备已经收到了该广播消息则无法修改。请慎重发送广播消息。
curl -X PUT \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_client": "", "message": "", "timestamp": 123}' \ https://API_BASE_URL/1.2/rtm/service-conversations/{conv_id}/messages/{message_id}
调用此 API 将删除已发布的广播消息,仅对还未收到广播消息的设备生效,已收到广播消息的设备无法删除消息。本接口要求使用 master key。
curl -X DELETE \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/broadcasts/{message_id}
调用此 API 可查询目前有效的广播消息。本接口要求使用 master key。
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/broadcasts?conv_id={conv_id}
curl -X GET \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ https://API_BASE_URL/1.2/rtm/messages
富媒体消息的参数格式相对于普通文本来说,仅仅是将 message 参数换成了一个 JSON 字符串。下面给出内置富媒体消息类型序列化为 JSON 的例子。
message
curl -X POST \ -H "X-LC-Id: {{appid}}" \ -H "X-LC-Key: {{masterkey}},master" \ -H "Content-Type: application/json" \ -d '{"from_peer": "1a", "message": "{\"_lctype\":-1,\"_lctext\":\"这是一个纯文本消息\",\"_lcattrs\":{\"a\":\"_lcattrs 是用来存储用户自定义的一些键值对\"}}", "conv_id": "...", "transient": false}' \ https://API_BASE_URL/1.1/rtm/messages
发送文本消息可以按照以上的格式进行,参数说明:
_lctype
_lctext
_lcattrs
_lcfile
url
objId
_File
metaData
以上为所有类型的富媒体消息共有的属性。
{ "_lctype": -2, // 必要参数 "_lctext": "图像的文字说明", "_lcattrs": { "a": "_lcattrs 是用来存储用户自定义的一些键值对", "b": true, "c": 12 }, "_lcfile": { "url": "http://ac-p2bpmgci.clouddn.com/246b8acc-2e12-4a9d-a255-8d17a3059d25", // 必要参数 "objId": "54699d87e4b0a56c64f470a4", // 文件对应的 LCFile.objectId "metaData": { "name": "IMG_20141223.jpeg", // 图像的名称 "format": "png", // 图像的格式 "height": 768, // 单位:像素 "width": 1024, // 单位:像素 "size": 18 // 单位:b } } }
上面是完整的例子,如果只想简单的发送图像 URL:
{ "_lctype": -2, "_lcfile": { "url": "http://ac-p2bpmgci.clouddn.com/246b8acc-2e12-4a9d-a255-8d17a3059d25" } }
{ "_lctype": -3, "_lctext": "这是一个音频消息", "_lcattrs": { "a": "_lcattrs 是用来存储用户自定义的一些键值对" }, "_lcfile": { "url": "http://ac-p2bpmgci.clouddn.com/246b8acc-2e12-4a9d-a255-8d17a3059d25", "objId": "54699d87e4b0a56c64f470a4", //文件对应的 LCFile.objectId "metaData": { "name": "我的滑板鞋.wav", "format": "wav", "duration": 26, // 单位:秒 "size": 2738 // 单位:b } } }
简略版:
{ "_lctype": -3, "_lcfile": { "url": "http://www.somemusic.com/x.mp3" } }
{ "_lctype": -4, "_lctext": "这是一个视频消息", "_lcattrs": { "a": "_lcattrs 是用来存储用户自定义的一些键值对" }, "_lcfile": { "url": "http://ac-p2bpmgci.clouddn.com/99de0f45-171c-4fdd-82b8-1877b29bdd12", "objId": "54699d87e4b0a56c64f470a4", //文件对应的 LCFile.objectId "metaData": { "name": "录制的视频.mov", "format": "avi", "duration": 168, // 单位:秒 "size": 18689 // 单位:b } } }
{ "_lctype": -4, "_lcfile": { "url": "http://www.somevideo.com/Y.flv" } }
{ "_lctype": -6, "_lctext": "这是一个普通文件类型", "_lcattrs": { "a": "_lcattrs 是用来存储用户自定义的一些键值对" }, "_lcfile": { "url": "http://www.somefile.com/jianli.doc", "name": "我的简历.doc", "size": 18689 // 单位:b } }
{ "_lctype": -6, "_lcfile": { "url": "http://www.somefile.com/jianli.doc", "name": "我的简历.doc" } }
{ "_lctype": -5, "_lctext": "这是一个地理位置消息", "_lcattrs": { "a": "_lcattrs 是用来存储用户自定义的一些键值对" }, "_lcloc": { "longitude": 23.2, "latitude": 45.2 } }
{ "_lctype": -5, "_lcloc": { "longitude": 23.2, "latitude": 45.2 } }
本文档中和消息操作有关的 REST API 有请求频率以及总量的限制(即时通讯客户端 SDK 的 API 不受此限制影响),具体如下:
1.1 版本:
/1.1/rtm/messages
/1.1/rtm/patch/message
1.2 版本:
所有接口共享额度。超过额度限制后一分钟内 LeanCloud 会拒绝请求持续返回 429 错误码,一分钟后会重新处理请求。
商用版应用的上限可以在 云服务控制台 > 即时通讯 > 设置 > 服务阈值 > 普通消息 API 调用频率上限 修改。 按照每日调用频率峰值实行阶梯收费,如下表所示:
国际版
每日调用频率峰值可以在 控制台 > 即时通讯 > 统计 > REST API QPM 峰值 中查看。
/1.1/rtm/broadcast/subscriber
所有接口共享额度。超过频率限制后 1 分钟内云端会拒绝请求持续返回 429 错误码,一分钟后会重新处理请求;超过总量限制后当天会拒绝之后的所有请求并返回 429 错误码。
/1.1/rtm/broadcast
所有接口共享以上额度。超过频率限制后 1 分钟内云端会拒绝请求持续返回 429 错误码,一分钟后会重新处理请求;超过总量限制后当天会拒绝之后的所有请求并返回 429 错误码。
即时通讯 REST API 使用指南
概览
请求的 Base URL 可以在云服务控制台 > 设置 > 应用凭证 > 服务器地址查看。 对于 POST 和 PUT 请求,请求的主体必须是 JSON 格式,而且 HTTP Header 的 Content-Type 需要设置为
application/json
。 请求的鉴权是通过 HTTP Header 里面包含的键值对来进行的,详见 存储 REST API 使用指南 中的 请求格式 一节的说明。_Conversation
表包含一些内置的关键字段定义了对话的属性、成员等,单聊、群聊、聊天室、服务号均在此表中,详见 即时通讯总览-对话 一节。不过为了避免出现数据不一致问题,我们不推荐调用数据存储相关的 API 直接操作_Conversation
表中的数据。当前的 API 版本为
1.2
:rtm/conversations
标示rtm/chatrooms
标示,在_Conversation
表内用字段tr
为 true 标示。rtm/service-conversations
标示,在_Conversation
表内用字段sys
为 true 标示。除此之外,与 client 相关的请求以
rtm/clients
标示。 最后,一些全局性质的 API 直接以rtm/{function}
标示,如rtm/all-conversations
可查询所有类型的对话。单聊、群聊
创建对话
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。上面的例子会创建一个最简单的对话,包括两个 client ID 为 BillGates 和 SteveJobs 的初始成员。对话创建成功会返回 objectId,即即时通讯中的对话 ID,客户端就可以通过这个 ID 发送消息了。新创建的对话可以在
_Conversation
表内找到。 对话的字段可参考 即时通讯总览-对话 一节。 传入"unique": true
参数可以保证对话的唯一性。返回
需要注意,群聊与单聊的唯一区别是 client 数量,API 层面是一致的。
查询对话
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
更新对话
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。_Conversation
表除 m 字段均可通过这个接口更新。返回
删除对话
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
增加成员
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
移除成员
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
查询成员
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
增加静音用户
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
移除静音用户
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
查询静音用户
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
单聊、群聊-发消息
该接口要求使用 master key。
注意,由于这个接口的管理性质,当你通过这个接口发送消息时,我们不会检查 from_client 是否有权限给这个对话发送消息,而是统统放行,请谨慎使用这个接口。
如果你在应用中使用了我们内部定义的富媒体消息格式,在发送消息时 message 字段需要遵守相应的格式要求,详见下文 富媒体消息格式 。
返回说明:
默认情况下发送消息 API 使用异步的方式,调用后返回消息 id 和接收消息的服务器时间戳,例如
{"msg-id":"qNkRkFWOeSqP65S9fDyHJw", "timestamp":1495431811151}
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
查询历史消息
该接口要求使用 master key。 为了保证获取聊天记录的安全性,可以开启签名认证,具体可以参考 即时通讯开发指南 第三篇的 安全与签名 一节。
本接口时间参数较多,这里举一示例供大家参考。比如某对话内有三条消息,id 分别为 id1、id2、id3,发消息的时间分别是 t1、t2、t3(t1 < t2 < t3),下面列举出不同参数组合的查询结果(空白表示使用默认值):
返回数据格式,JSON 数组,默认按消息记录从新到旧排序,设置请求参数
reversed
后以相反的方向排序。返回:
如需查询某个用户发出的消息,可以调用
GET /rtm/clients/{client_id}/messages
这个接口。 如需查询整个应用的历史消息,可以调用GET /rtm/messages
这个接口。单聊、群聊-修改消息
该接口要求使用 master key。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
单聊、群聊-撤回消息
该接口要求使用 master key。需要相应 SDK 的支持,具体可参考之前的修改消息接口。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
删除消息
该接口要求使用 master key。
注意,该接口仅删除服务端的消息,对客户端无影响。
返回:
对话权限
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
增加权限
该接口要求使用 master key。 每个对话最多允许添加 500 个永久性禁言用户。
返回
删除权限
该接口要求使用 master key。
返回
更新权限
该接口要求使用 master key。
返回
查询权限
该接口要求使用 master key。
返回
临时禁言和永久禁言
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
增加临时性禁言用户
该接口要求使用 master key。
返回
移除临时性禁言用户
该接口要求使用 master key。
返回
增加永久性禁言用户
该接口要求使用 master key。 每个对话最多允许添加 500 个永久性禁言用户。
返回
移除永久性禁言用户
该接口要求使用 master key。
返回
查询永久性禁言列表
该接口要求使用 master key。
返回
黑名单
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
增加对话黑名单
该接口要求使用 master key。
加入黑名单的 client 不允许再加入该对话,如果之前在该对话中将被移除。每个对话最多允许添加 500 个黑名单。
返回
移除对话黑名单
该接口要求使用 master key。
返回
查询对话黑名单
该接口要求使用 master key。
返回
聊天室
创建聊天室
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。对话的字段可参考 即时通讯总览-对话 一节。
返回
查询聊天室
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
更新聊天室
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
删除聊天室
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
随机获取在线成员
该接口要求使用 master key。
返回
查询在线成员数
该接口要求使用 master key。
返回
聊天室-发消息
该接口要求使用 master key。
注意,由于这个接口的管理性质,当你通过这个接口发送消息时,我们不会检查 from_client 是否有权限给这个聊天室发送消息,而是统统放行,请谨慎使用这个接口。此外,聊天室目前不支持将消息同步发送给在线的 from_client。
如果你在应用中使用了我们内部定义的富媒体消息格式,在发送消息时 message 字段需要遵守相应的格式要求,详见下文 富媒体消息格式。
返回说明:
默认情况下发送消息 API 使用异步的方式,调用后返回消息 id 和接收消息的服务器时间戳,例如
{"msg-id":"qNkRkFWOeSqP65S9fDyHJw", "timestamp":1495431811151}
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
查询历史消息
该接口要求使用 master key。 为了保证获取聊天记录的安全性,可以开启签名认证,具体可以参考 即时通讯开发指南 第三篇的 安全与签名 一节。
本接口时间参数较多,这里举一示例供大家参考。比如某对话内有三条消息,id 分别为 id1、id2、id3,发消息的时间分别是 t1、t2、t3(t1 < t2 < t3),下面列举出不同参数组合的查询结果(空白表示使用默认值):
返回数据格式,JSON 数组,默认按消息记录从新到旧排序,设置请求参数
reversed
后以相反的方向排序。返回:
如需查询某个用户发出的消息,可以调用
GET /rtm/clients/{client_id}/messages
这个接口。 如需查询整个应用的历史消息,可以调用GET /rtm/messages
这个接口聊天室-修改消息
该接口要求使用 master key。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
聊天室-撤回消息
该接口要求使用 master key。需要相应 SDK 的支持,具体可参考上面的「修改消息」接口。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
删除消息
该接口要求使用 master key。
注意,该接口仅删除服务端的消息,对客户端无影响。
返回:
对话权限
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
增加权限
该接口要求使用 master key。 每个聊天室最多允许添加 10,000 个永久性禁言用户。
返回
删除权限
该接口要求使用 master key。
返回
更新权限
该接口要求使用 master key。
返回
查询权限
该接口要求使用 master key。
返回
临时禁言和永久禁言
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
增加临时性禁言用户
该接口要求使用 master key。
返回
移除临时性禁言用户
该接口要求使用 master key。
返回
增加永久性禁言用户
该接口要求使用 master key。 每个聊天室最多允许添加 500 个永久性禁言用户。
返回
移除永久性禁言用户
该接口要求使用 master key。
返回
查询永久性禁言列表
该接口要求使用 master key。
返回
黑名单
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
增加聊天室黑名单
该接口要求使用 master key。
加入黑名单的 client 不允许再加入该聊天室,如果之前在该聊天室中将被移除。每个聊天室最多允许添加 10,000 个黑名单。
返回
移除聊天室黑名单
该接口要求使用 master key。
返回
查询聊天室黑名单
该接口要求使用 master key。
返回
服务号
创建服务号
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。对话的字段可参考 即时通讯总览-对话 一节。
返回
查询服务号
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
更新服务号
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
删除服务号
在
_Conversation
表默认 ACL 权限下本接口要求使用 master key。返回
订阅服务号
返回
取消订阅
返回
遍历查询订阅者
该接口要求使用 master key。
返回
其中 timestamp 表示用户订阅系统对话的时间,subscriber 是订阅用户的 client id。如果一次没有获取完,需要从结果列表中取最后一个订阅者的 client id,作为 client_id 参数再次调用本接口以获取下一批订阅者列表。
查询订阅者数
该接口要求使用 master key。
返回
给所有订阅者发消息
该接口要求使用 master key。
返回:
频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
修改给所有订阅者发送的消息
该接口要求使用 master key。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
撤回给所有订阅者发送的消息
该接口要求使用 master key。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
给任意用户单独发消息
该接口要求使用 master key。
注意,由于这个接口的管理性质,当你通过这个接口发送消息时,我们不会检查 from_client 是否有权限给这个服务号发送消息,而是统统放行,请谨慎使用这个接口。
如果你在应用中使用了我们内部定义的富媒体消息格式,在发送消息时 message 字段需要遵守相应的格式要求,详见下文 富媒体消息格式。
理论上开发者可以随意发送任意格式,只要大小不超过 5 KB 限制即可。)
返回说明:
默认情况下发送消息 API 使用异步的方式,调用后返回消息 id 和接收消息的服务器时间戳,例如
{"msg-id":"qNkRkFWOeSqP65S9fDyHJw", "timestamp":1495431811151}
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
修改给用户单独发送的消息
该接口要求使用 master key。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
撤回给用户单独发送的消息
该接口要求使用 master key。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
删除给用户单独发送的消息
本接口要求使用 master key,并且只能删除订阅消息或给用户单独发送的消息,无法删除广播消息。 广播消息请调用
DELETE /1.2/rtm/broadcasts/{message_id}
接口删除。注意,该接口仅删除服务端的消息,对客户端无影响。
返回:
查询服务号给某用户发的消息
该接口要求使用 master key。查询结果包含服务号发送的订阅广播消息也包含单独发送的消息。
参数和返回值与查询历史消息接口相同。
黑名单
该功能介绍可参考 即时通讯开发指南 第三篇的 权限管理与黑名单 一节。
增加服务号黑名单
该接口要求使用 master key。
加入黑名单的 client 不允许再加入该服务号,如果之前在该服务号中将被移除。每个服务号最多允许添加 10,000 个黑名单。
返回
移除服务号黑名单
该接口要求使用 master key。
返回
查询服务号黑名单
该接口要求使用 master key。
返回
用户
查询在线成员
该接口要求使用 master key。
返回在线的 ID 列表
注意,该接口不判断用户是否存在,「用户不存在」视同「用户不在线」。
查询未读消息数
返回
强制下线
该接口要求使用 master key。
返回
查询订阅的服务号
该接口要求使用 master key。
返回目标用户订阅系统对话的列表:
其中
timestamp
表示用户订阅系统对话的时间,subscriber
是订阅用户的 client id。如果一次没有获取完,需要从结果列表中取最后一个服务号 ID 和订阅时间,分别作为 conv_id 和 timestamp 参数再次调用本接口以获取下一批订阅的系统对话。查询用户发送消息
该接口要求使用 master key。 使用这个接口可以查询某 client_id 在单聊、群聊与聊天室里发的消息。
参数与返回值可以参考
GET /1.2/rtm/conversations/{conv_id}/messages
接口。增加黑名单
该接口要求使用 master key。 一个 client 可以把一个 群聊/聊天室/服务号 加入黑名单,这样其他人就无法要求其加入该对话了。 目前不支持 client 把另一个 client 加入黑名单。
返回
移除黑名单
返回
查询黑名单
返回
获取登录签名
本接口可以让使用了 LCUser 的应用方便快捷地实现登录认证。 登录认证默认关闭,可以进入 云服务控制台 > 即时通讯 > 设置 > 即时通讯设置,勾选 登录启用签名认证 进行开启。
返回
注意,虽然这是一个 GET 请求,但并不是幂等的,每次调用返回的签名都不相同。
为了方便用户进行细粒度控制,实现自定义功能(如黑名单),本接口提供了一个 hook
_rtmClientSign
,在验证 sessionToken 后去调用,传入的参数为 LCUser 构成的 JSON 对象:可以返回两类结果:
全局 API
查询用户数
本接口会返回应用当前在线用户总数,以及当天有登录记录的独立用户总数。本接口要求使用 master key。
返回
其中
online_user_count
表示当前应用在线用户总数,user_count_today
表示当天有登录记录的独立用户总数。查询所有对话
本接口会返回所有的 单聊群聊/聊天室/服务号。在
_Conversation
表默认 ACL 权限下要求使用 master key。返回
全局广播
该接口可以给该应用所有 client 广播一条消息,每天最多 30 条。本接口要求使用 master key。
Push 的格式与《推送 REST API 指南》的《消息内容参数》一节中
data
下面的部分一致。如果您需要指定开发证书推送,需要在 push 的 json 中设置"_profile": "dev"
,例如:频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
修改广播消息
该接口要求使用 master key。
广播消息修改仅对当前还未收到该广播消息的设备生效,如果目标设备已经收到了该广播消息则无法修改。请慎重发送广播消息。
成功则返回状态码
200 OK
。频率限制:
此接口受频率限制,详见后文《接口请求频率限制》一节。
删除广播消息
调用此 API 将删除已发布的广播消息,仅对还未收到广播消息的设备生效,已收到广播消息的设备无法删除消息。本接口要求使用 master key。
成功则返回状态码
200 OK
。查询广播消息
调用此 API 可查询目前有效的广播消息。本接口要求使用 master key。
查询应用内所有历史消息
该接口要求使用 master key。
参数与返回值可以参考
GET /1.2/rtm/conversations/{conv_id}/messages
接口。富媒体消息格式
富媒体消息的参数格式相对于普通文本来说,仅仅是将
message
参数换成了一个 JSON 字符串。下面给出内置富媒体消息类型序列化为 JSON 的例子。文本消息
发送文本消息可以按照以上的格式进行,参数说明:
_lctype
_lctext
_lcattrs
_lcfile
_lcfile
就包含了它的文件实体的相关信息。url
objId
_File
表里面的 objectIdmetaData
以上为所有类型的富媒体消息共有的属性。
图像消息
上面是完整的例子,如果只想简单的发送图像 URL:
音频消息
简略版:
视频消息
简略版:
通用文件消息
简略版:
地理位置消息
简略版:
接口请求频率限制
本文档中和消息操作有关的 REST API 有请求频率以及总量的限制(即时通讯客户端 SDK 的 API 不受此限制影响),具体如下:
普通消息
1.1 版本:
/1.1/rtm/messages
)/1.1/rtm/patch/message
)1.2 版本:
限制
所有接口共享额度。超过额度限制后一分钟内 LeanCloud 会拒绝请求持续返回 429 错误码,一分钟后会重新处理请求。
商用版应用的上限可以在 云服务控制台 > 即时通讯 > 设置 > 服务阈值 > 普通消息 API 调用频率上限 修改。 按照每日调用频率峰值实行阶梯收费,如下表所示:
国际版
每日调用频率峰值可以在 控制台 > 即时通讯 > 统计 > REST API QPM 峰值 中查看。
订阅消息
1.1 版本:
/1.1/rtm/broadcast/subscriber
)1.2 版本:
限制
所有接口共享额度。超过频率限制后 1 分钟内云端会拒绝请求持续返回 429 错误码,一分钟后会重新处理请求;超过总量限制后当天会拒绝之后的所有请求并返回 429 错误码。
广播消息
1.1 版本:
/1.1/rtm/broadcast
)1.2 版本:
限制
所有接口共享以上额度。超过频率限制后 1 分钟内云端会拒绝请求持续返回 429 错误码,一分钟后会重新处理请求;超过总量限制后当天会拒绝之后的所有请求并返回 429 错误码。