在线状态订阅 RESTful API

更新时间:2022-06-22

本文展示如何调用环信即时通讯 RESTful API 实现用户在线状态订阅,包括设置用户在线状态信息、批量订阅和获取在线状态、取消订阅以及查询订阅列表。调用以下方法前,请先参考 使用限制 了解即时通讯 RESTful API 的调用频率限制。

使用该特性前,你需要联系商务开通。

以下表格列举了即时通讯 RESTful API 的公共请求参数和响应参数:

请求参数

参数 类型 描述 是否必填
host String 你在环信即时通讯云控制台注册项目时所在的集群服务器地址。
org_name String 即时通讯服务分配给每个企业(组织)的唯一标识。你可以通过控制台获取该字段。
app_name String 你在环信即时通讯云控制台注册项目时填入的应用名称。
uid String 用户在即时通讯服务器上的唯一 ID。

响应参数

参数 描述
data 实际取到的数据详情。
username 用户 ID。
groupname 群组名。
timestamp 请求响应的时间,Unix 时间戳,单位为 ms。

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

Authorization: Bearer ${YourAppToken}

为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 建议使用 App Token 的鉴权方式,详见 使用 Token 鉴权

根据用户的唯一 ID 设置在线状态信息。

HTTP 请求

POST https://{host}/{org_name}/{app_name}/users/{uid}/presence/{resource}/{status}

路径参数

参数 类型 描述 是否必填
resource String 设备来源,格式为设备类型 + resource ID,例如,android_123423453246。
status String 端状态码。该参数的取值如下:
- 0:离线;
- 1:在线;
- 其他值:自定义在线状态。

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

请求 header

参数 类型 描述 是否必填
Content-Type String 内容类型:application/json
Authorization String Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 app token 的值。

请求体 body

请求包体为 JSON Object 类型,包含以下字段:

参数 类型 描述 是否必填
ext String 在线状态扩展信息。建议不超过 64 字节。

HTTP 响应

响应 body

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

字段 类型 说明
result String 操作结果。设置成功返回 ’ok’,否则返回相应的错误原因。

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

示例

请求示例

curl -X POST 'a1-test.easemob.com:8089/5101220107132865/test/users/c1/presence/android/0' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '{"ext":"123"}'

响应示例

{"result":"ok"}%

你一次可订阅多个用户的在线状态。

HTTP 请求

POST https://{host}/{org_name}/{app_name}/users/{uid}/presence/{expiry}

路径参数

参数 类型 描述 是否必填
expiry String 订阅时长,单位为秒,最长为 30 天。

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

请求 header

参数 类型 描述 是否必填
Content-Type String 内容类型:application/json
Authorization String Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。

请求 body

请求包体为 JSON Object 类型,包含以下字段:

字段 类型 描述 是否必填
usernames JSON ARRAY 订阅对象的用户名数组,例如 [“user1”, “user2”]。该数组最多可包含 100 个用户名。

HTTP 响应

响应 body

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

字段 类型 描述
result JSON Array 订阅对象的在线状态信息,以数组形式返回。若订阅失败,返回相应的错误原因。
uid String 用户在即时通讯服务器的唯一 ID。
last_time Number 用户最近在线时间。服务端会在被订阅的用户登录和登出时记录该时间。
expiry Number 订阅的过期时间戳。
ext String 用户在线状态扩展信息,建议不超过 64 字节。
status JSON Array 用户多端的状态。该参数的取值如下:
- 0:离线;
- 1:在线;
- 其他值:用户可设置其他值自定义在线状态。

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

示例

请求示例

curl -X POST 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence/1000' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '{"usernames":["c2","c3"]}'

响应示例

{"result":[{"uid":"","last_time":"1644466063","expiry":"1645500371","ext":"123","status":{"android":"1","android_6b5610ac-4e11-4661-82b3-dee17bc7b2cc":"0"}},{"uid":"c3","last_time":"1645183991","expiry":"1645500371","ext":"","status":{"android":"0","android_6b5610ac-4e11-4661-82b3-dee17bc7b2cc":"0"}}]}%

你一次可获取多个用户的在线状态信息。

HTTP 请求

POST https://{host}/{org_name}/{app_name}/users/{uid}/presence

路径参数

参数及说明详见公共参数

请求 header

参数 类型 描述 是否必填
Content-Type String 内容类型:application/json
Authorization String Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。

请求 body

请求包体为 JSON Object 类型,仅支持以下字段:

参数 类型 是否必需 说明
usernames Array 必需 订阅对象的用户名数组,例如 [“user1”, “user2”]。该数组最多可包含 100 个用户名。

HTTP 响应

响应 body

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

参数 类型 说明
result JSON Array 订阅对象的在线状态信息,以数组形式返回。若订阅失败,返回相应的错误原因。
uid String 用户在即时通讯服务器的唯一 ID。
last_time Number 用户最近在线时间。
ext String 用户在线状态的扩展信息,建议不超过 64 字节。
status JSON Array 用户多端的状态。

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

示例

请求示例

curl -X POST 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '{"usernames":["c2","c3"]}'

响应示例

{
"result":[
  {
  "uid":"c2",
  "last_time":"1644466063",
  "ext":"",
  "status":{
       "android":"0"}
    },
  {
   "uid":"c3",
   "last_time":"1644475330",
   "ext":"",
   "status":{
       "android":"0",
       "android":"0"}
    }]
 }

你可以取消订阅用户的在线状态。

DELETE https://{host}/{org_name}/{app_name}/users/{uid}/presence

路径参数

参数及说明详见公共参数

请求 header

参数 类型 描述 是否必填
Content-Type String 内容类型:application/json
Authorization String Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。

请求 body

参数 类型 描述 是否必填
users Array 订阅对象的用户名数组,例如 [“user1”, “user2”]。该数组最多可包含 100 个用户名。

HTTP 响应

响应 body

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

参数 类型 说明
result String 取消成功返回“ok”;取消失败返回相应的错误原因。

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

示例

请求示例

curl -X DELETE 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '["c1"]'

响应示例

{"result":"ok"}%

查询当前用户已订阅在线状态的用户列表。

HTTP 请求

GET https://{host}/{org_name}/{app_name}/users/{uid}/presence/sublist?pageNum=1&pageSize=100

路径参数

参数 类型 描述 是否必填
pageNum int 要查询的页码。该参数的值须大于等于 1。
pageSize int 每页显示的订阅用户数量。 该参数的值不得超 500。

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

请求 header

参数 类型 是否必需 描述
Content-Type String 必需 内容类型:application/json
Authorization String 必需 Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。

HTTP 响应

响应 body

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

参数 类型 说明
result Object 订阅对象在线状态信息,以数组形式返回。若查询失败,返回相应的错误原因。
totalnum String 当前订阅的用户总数。
sublist Object 订阅对象的信息,以数组形式返回。
uid String 用户在即时通讯服务器的唯一 ID。
expiry String 订阅的过期时间戳。

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

示例

请求示例

curl -X GET 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence/sublist?pageNum=1&pageSize=100' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' 

响应示例

{
 "result":{
   "totalnum":"2",
   "sublist":[
      {
       "uid":"lxml2",
       "expiry":"1645822322"},
      {
       "uid":"lxml1",
       "expiry":"1645822322"}
     ]
   }
 }