批量订阅在线状态

大约 4 分钟

批量订阅在线状态

在线状态(Presence)表示用户的当前状态信息。除了环信 IM 内置的在线和离线状态,你还可以添加自定义在线状态,例如忙碌、马上回来、离开、接听电话、外出就餐等。本文展示如何调用环信即时通讯 RESTful API 实现用户在线状态(Presence)订阅,包括设置用户在线状态信息、批量订阅和获取在线状态、取消订阅以及查询订阅列表。

关于用户的在线、离线和自定义状态的定义,详见 用户在线状态管理

功能说明

  • 一次订阅多个用户的在线状态。
  • 订阅用户状态后,若被订阅的用户的在线状态更新,订阅者会收到状态变更通知,例如,用户 A 订阅了用户 B 的在线状态,若用户 B 的状态变更,A 会收到状态变更通知。
  • 每次最多可订阅 100 个用户的在线状态。
  • 每个用户最多可订阅 3000 个用户的在线状态。
  • 每个用户最多可被 3000 个用户订阅。
  • 订阅时长最长为 30 天,过期需重新订阅。如果未过期的情况下重复订阅,新设置的有效期会覆盖之前的有效期。

功能开通

使用 Presence 功能前,你需要在 环信控制台open in new window 开通。详见 环信控制台文档

调用频率上限

100 次/秒/App Key

请求 URL

POST https://{host}/{org_name}/{app_name}/users/{username}/presence/{expiry}
参数类型是否必需描述
usernameString为哪个用户订阅在线状态。
expiryString订阅时长,单位为秒,最大值为 2,592,000,即 30 天。

关于请求 URL 中的参数说明,详见 请求 URL 参数介绍

请求示例

curl -X POST 'https://XXXX/XXXX/XXXX/users/wzy/presence/1000' \
-H 'Authorization: Bearer <YourAppToken>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{"usernames":["c2","c3"]}'

请求 header 参数

关于 Content-TypeAcceptAuthorization 字段的说明,详见 请求 header 参数说明

请求 body 参数

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

字段类型是否必需描述
usernamesArray被订阅用户的用户 ID 数组,例如 ["user1", "user2"]。该数组最多可包含 100 个用户 ID。

响应示例

{
"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"}
    }]
}

响应 body 字段

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

字段类型描述
resultJSON Array是否成功批量订阅了多个用户的在线状态。若成功,则返回被订阅用户的在线状态信息,失败则返回相应的错误原因。
- uidString被订阅用户在即时通讯服务器的唯一 ID。
- last_timeLong被订阅用户的最近在线时间,Unix 时间戳,单位为秒。服务端会在被订阅的用户登录和登出时记录该时间。
- expiryLong订阅过期的 Unix 时间戳,单位为秒。
- extString被订阅用户的在线状态扩展信息。
- statusJSON被订阅用户在多端的状态:
- 0:离线;
- 1:在线;
- 其他值:用户可设置其他值自定义在线状态。

错误码

如果返回的 HTTP 状态码非 200,表示请求失败,可能提示以下错误码:

HTTP 状态码错误类型错误提示可能原因处理建议
400illegal_argumentusernames is empty被订阅用户的用户 ID 数组为空。保证被订阅用户的用户 ID 数组非空值。
400illegal_argumenttoo many sub presence被订阅用户的用户列表超过了 100 个用户 ID 限制。控制被订阅用户的用户列表不要超过 100 个用户 ID 限制。
400illegal_argumentyou can't sub yourself被订阅用户的用户列表中包含了自己(被订阅用户列表中包含了请求 URL 路径中的 username)。将自己从被订阅用户的用户列表中移除。
400service open exceptionthe app not open presence没有开通 Presence 服务。联系商务开通 Presence 服务。
401unauthorizedUnable to authenticate (OAuth)token 不合法,可能过期或 token 错误。使用新的 token 访问。

关于其他错误,你可以参考 响应状态码 了解可能的原因。

上次编辑于: