上云无忧 > 文档中心 > 环信IM即时通讯(服务端) - 在线状态(Presence)订阅
IM即时通讯
环信IM即时通讯(服务端) - 在线状态(Presence)订阅

文档简介:
在线状态(Presence)表示用户的当前状态信息。除了环信 IM 内置的在线和离线状态,你还可以添加自定义在线状态,例如忙碌、马上回来、离开、接听电话、外出就餐等。本文展示如何调用环信即时通讯 RESTful API 实现用户在线状态(Presence)订阅,包括设置用户在线状态信息、批量订阅和获取在线状态、取消订阅以及查询订阅列表。
*此产品及展示信息均由环信官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

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

提示

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

#前提条件

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

  • 已在环信即时通讯云控制台 开通配置环信即时通讯 IM 服务。
  • 已从服务端获取 app token,详见 使用 App Token 鉴权。
  • 了解环信 IM API 的调用频率限制,详见 接口频率限制。

#公共参数

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

#请求参数

参数 类型 是否必需 描述
host String 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 获取环信即时通讯 IM 的信息。
org_name String 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 获取环信即时通讯 IM 的信息。
app_name String 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 获取环信即时通讯 IM 的信息。
username String 用户在即时通讯服务器上的唯一 ID。

#认证方式

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

Authorization: Bearer YourAppToken

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

#设置用户在线状态信息

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

#HTTP 请求

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

#路径参数

参数 类型 是否必需 描述
resource String 服务器分配给每个设备资源的唯一标识符,格式为 {device type}_{resource ID},其中设备类型 device type 可以是 android、ios 或 web,资源 ID resource ID 由 SDK 分配。例如,android_123423453246。
status String 用户定义的在线状态:
- 0:离线;
- 1:在线;
- 其他值:自定义在线状态。

其他参数及描述详见 公共参数。

#请求 header

参数 类型 是否必需 描述
Content-Type String 内容类型:application/json。
Authorization String App 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 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__wBPGgDWGAeO86wl2lH
GeTnU030fpWuEDR015Vk6ULWGYGKccA' \ -H 'Content-Type: application/json' \ -d '{"ext":"123"}' 

#响应示例

{"result":"ok"} 

#批量订阅在线状态

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

#HTTP 请求

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

#路径参数

参数 类型 是否必需 描述
expiry String 订阅时长,单位为秒,最大值为 2,592,000,即 30 天。

其他参数及描述详见 公共参数。

#请求 header

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

#请求 body

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

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

#HTTP 响应

#响应 body

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

字段 类型 描述
result JSON Array 是否成功批量订阅了多个用户的在线状态。若成功,则返回被订阅用户的在线状态信息,失败则返回相应的错误原因。
result.uid String 被订阅用户在即时通讯服务器的唯一 ID。
result.last_time Long 被订阅用户的最近在线时间,Unix 时间戳,单位为秒。服务端会在被订阅的用户登录和登出时记录该时间。
result.expiry Long 订阅过期的 Unix 时间戳,单位为秒。
result.ext String 被订阅用户的在线状态扩展信息。
result.status JSON 被订阅用户在多端的状态:
- 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/{username}/presence

#路径参数

参数及描述详见 公共参数。

#请求 header

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

#请求 body

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

参数 类型 是否必需 描述
usernames JSON Array 需要获取其在线状态的用户列表,例如 ["user1", "user2"],最多可传 100 个用户 ID。

#HTTP 响应

#响应 body

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

参数 类型 描述
result JSON Array 是否成功批量获取用户的在线状态信息。若成功获取,返回被订阅用户的在线状态信息,失败则返回相应的错误原因。
result.uid String 用户在即时通讯服务器的唯一 ID。
result.last_time Long 用户的最近在线时间,Unix 时间戳,单位为秒。
result.ext String 用户的在线状态扩展信息。
result.status JSON 用户在多个设备上的在线状态:
- 0: 离线。
- 1: 在线。
- 其他值:用户自定义的在线状态。

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

#示例

#请求示例

curl -X POST 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence' \ -H 'Authorization:
 Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86w
l2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \ -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"} } ] } 

#取消订阅多个用户的在线状态

取消订阅多个用户的在线状态。

#HTTP 请求

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

#路径参数

参数及描述详见 公共参数。

#请求 header

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

#请求 body

参数 类型 是否必需 描述
users JSON Array 要取消订阅在线状态的用户 ID 数组,例如 ["user1", "user2"],最多可传 100 个用户 ID。

#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__wBPGgDWGAeO86wl2l
HGeTnU030fpWuEDR015Vk6ULWGYGKccA' \ -H 'Content-Type: application/json' \ -d '["c1"]' 

#响应示例

{"result":"ok"} 

#查询订阅列表

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

#HTTP 请求

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

#路径参数

参数及描述详见 公共参数。

#查询参数

参数 类型 是否必需 描述
pageNum Int 要查询的页码。该参数的值须大于等于 1。若不传,默认值为 1。
pageSize Int 每页显示的订阅用户数量。取值范围为 [1,500],若不传默认值为 1。

#请求 header

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

#HTTP 响应

#响应 body

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

参数 类型 描述
result JSON 是否成功获取了订阅列表。若操作成功,返回被订阅用户的在线状态信息。若操作失败,返回相应的错误原因。
result.totalnum Int 当前订阅的用户总数。
result.sublist JSON Array 订阅列表。列表中的每个对象均包含被订阅的用户的 ID 字段 uid 以及订阅过期字段 expiry。
result.sublist.uid String 被订阅用户在即时通讯服务器的唯一 ID。
result.sublist.expiry Int 订阅的过期时间戳,单位为秒。

如果返回的 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"} ] } }
相似文档
  • 消息表情回复(“Reaction”)指用户在单聊和群聊场景中对单条消息回复表情,可丰富用户聊天时的互动方式。 本页介绍如何使用即时通讯 IM RESTful API 实现 Reaction 功能。 前提条件: 要调用环信即时通讯 RESTful API,请确保满足以下要求: 已在环信即时通讯云控制台 开通配置环信即时通讯 IM 服务。 已从服务端获取 app token,详见 使用 App Token 鉴权。 了解环信 IM RESTful API 的调用频率限制,详见 接口频率限制。
  • 功能概述: Server SDK 是对环信 IM REST API 的封装,这样做是为了节省服务器端开发者对接环信 API 的时间,只需要配置自己的 App Key 相关信息即可使用。 Server SDK 提供了用户、消息、群组、聊天室等资源的操作管理能力。
  • 介绍: PHP SDK 是对环信 IM REST API 的封装,旨在节省服务器端开发者对接环信 API 的时间,只需要配置自己的 App Key 相关信息即可使用。 功能: PHP SDK 提供了用户、消息、群组、聊天室等资源的操作管理能力。 依赖: PHP 5.3+
  • 本文介绍 REST 接口调用后的返回结果响应码。可根据返回数据中的 error 字段判断具体错误。 响应码:200(成功)。 响应码:4xx(请求错误)。这些状态代码表示请求可能出错,妨碍了服务器的处理。 响应码:5xx(服务器错误)。这些状态代码表示服务器在尝试处理请求时发生内部错误。
  • 回调功能,即环信 IM 服务器会在事件发生之前或之后,向你的应用服务器发送请求,你可以根据业务需求来干预事件的后续处理流程(发送前回调),或据此进行必要的数据同步(发送后回调)。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部