消息表情回复 Reaction REST API

大约 11 分钟

消息表情回复 Reaction REST API

消息表情回复(“Reaction”)指用户在单聊和群聊场景中对单条消息回复表情,可丰富用户聊天时的互动方式。对于单个消息,一个消息表情即为一个 Reaction,若不同用户重复添加同一消息表情,Reaction 数量计为 1。每条消息默认可添加 20 个 Reaction,若需提升该上限,需联系环信商务。

本页介绍如何使用即时通讯 IM RESTful API 实现 Reaction 功能。

前提条件

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

公共参数

请求参数

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

认证方式

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

Authorization: Bearer YourAppToken

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

创建/追加 Reaction

在单聊或群聊场景中对单条消息创建或追加 Reaction。

创建 Reaction 指对消息添加第一条 Reaction,后续的 Reaction 添加称为追加。

HTTP 请求

POST https://{host}/{org_name}/{app_name}/reaction/user/{userId}

路径参数

参数类型是否必需描述
userIdString当前用户的用户 ID。

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

请求 header

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

请求 body

参数类型是否必需
描述
msgIdString消息 ID。
messageString表情 ID。长度不能超过 128 个字符,必须与客户端的设置一致。该参数对支持的字符集类型没有限制,若使用特殊字符,获取和删除 Reaction 时需对特殊字符进行 URL 编码。

HTTP 响应

响应 body

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

参数类型描述
requestStatusCodeString操作结果,ok 表示成功创建或追加 Reaction。
timestampLong请求响应的时间,Unix 时间戳,单位为毫秒。
dataJSON添加的 Reaction 的详情。
data.idStringReaction ID。
data.msgIdString添加 Reaction 的消息 ID。
data.msgTypeString消息的会话类型:
- chat:单聊;
- groupchat:群聊。
data.groupIdString群组 ID。该参数在单聊时为 null。
data.reactionString表情 ID,与客户端一致,与创建/追加 Reaction API的请求参数 message 相同。
data.createAtInstantReaction 的创建时间。
data.updateAtInstantReaction 的修改时间。

其他字段及描述详见 公共参数

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

示例

请求示例

curl -g -X POST 'https://localhost:8089/easemob-demo/easeim/reaction/user/e1' -H 'Authorization: Bearer <YourAppToken>' -H 'Content-Type: application/json' --data-raw '{
    "msgId":"997625372793113144",
    "message":"emoji_40"
}'

响应示例

{
  "requestStatusCode": "ok",
  "timestamp": 1645774821181,
  "data": {
    "id": "946481033434607420",
    "msgId": "msg3333",
    "msgType": "chat",
    "groupId": null,
    "reaction": "emoji_40",
    "createdAt": "2022-02-24T10:57:43.138934Z",
    "updatedAt": "2022-02-24T10:57:43.138939Z"
  }
}

错误码

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

HTTP 状态码错误类型错误提示可能原因处理建议
400Bad Requestthis appKey is not open reaction service!Reaction 功能未开通。请在环信即时通讯控制台开通 Reaction 服务。
400Bad RequestThe quantity has exceeded the limit!一条消息上的 Reaction 数量达到上限。每条消息默认可添加 20 个 Reaction。若需提升该上限,需联系环信商务。
400Bad Requestthe user operation is illegal!不是会话双方。只有会话双方才能操作 Reaction。
400Bad Requestthe user is already operation this message同一个用户重复添加相同的 Reaction。同一用户不能重复添加相同的 Reaction。

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

根据消息 ID 获取 Reaction

该方法根据单聊或群聊中的消息 ID 获取单个或多个消息的 Reaction 信息,包括 Reaction ID、使用的表情 ID、以及使用该 Reaction 的用户 ID 及用户人数。获取的 Reaction 的用户列表只展示最早三个添加 Reaction 的用户。

HTTP 请求

GET https://{host}/{org_name}/{app_name}/reaction/user/{userId}?msgIdList={N,M}&msgType={msgType}&groupId={groupId}

路径参数

参数类型是否必需描述
userIdString当前用户的用户 ID。

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

查询参数

参数类型是否必需描述
msgIdListArray需要查询的消息 ID 列表,最多可传 20 个消息 ID。
msgTypeString消息的会话类型:
- chat:单聊;
- groupchat:群聊。
groupIdString群组 ID。如果 msgType 设置为 groupchat,即拉取群中的 Reaction,必须指定群组 ID。

请求 header

参数类型是否必需描述
AuthorizationStringApp 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

HTTP 响应

响应 body

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

参数类型描述
requestStatusCodeString接口相应 code 状态。OK 表示操作成功。
timestampLong请求响应的时间,Unix 时间戳,单位为毫秒。
dataJSON Array单个消息添加的 Reaction 的详情。
data.msgIdStringReaction 对应的消息 ID。
data.reactionListJSON Array单个消息的 Reaction 列表。
data.reactionList.reactionIdStringReaction ID。
data.reactionList.reactionString表情 ID,与客户端一致。该参数与创建/追加 Reaction API的请求参数 message 相同。
data.reactionList.countInt添加该 Reaction 的用户人数。
data.reactionList.stateBool当前请求用户是否添加过该 Reaction:
- true: 是;
- false:否。
data.reactionList.userListArray添加 Reaction 的用户 ID 列表。只返回最早操作 Reaction 的三个用户的 ID。

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

示例

请求示例

curl -g -X GET 'https://localhost:8089/easemob-demo/easeim/reaction/user/{{userId}}?msgIdList=msgId1&msgType=chat' -H 'Authorization: Bearer <YourAppToken>'

响应示例

{
    "requestStatusCode": "ok",
    "timestamp": 1645774821181,
    "data": [
        {
            "msgId": "msg123",
            "reactionList": [
                {
                    "reactionId": "944330310986837168",
                    "reaction": "message123456",
                    "count": 3,
                    "state": false,
                    "userList": [
                        "test123",
                        "test456",
                        "test1"
                    ]
                }
            ]
        },
        {
            "msgId": "msg1234",
            "reactionList": [
                {
                    "reactionId": "945272584050659838",
                    "reaction": "message123456",
                    "count": 1,
                    "state": false,
                    "userList": [
                        "test5"
                    ]
                }
            ]
        }
    ]
}

错误码

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

HTTP 状态码错误类型错误提示可能原因处理建议
400Bad RequestmsgIdList exceeds the maximum number limit单次传入的消息 ID 超过了数量限制。减少单次传入的消息 ID。最多可传 20 个消息 ID。
400Bad RequestgroupId can not be null!群组聊天时(即 msgTypegroupchat),群组 ID 参数(groupId)设置为了 null请传入群组 ID。

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

删除 Reaction

删除当前用户追加的 Reaction。

HTTP 请求

DELETE https://{host}/{org_name}/{app_name}/reaction/user/{userId}?msgId={msgId}&message={message}

路径参数

参数类型是否必需描述
userIdString当前用户的用户 ID。

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

请求 header

参数类型是否必需描述
AuthorizationStringApp 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

查询参数

参数类型是否必需描述
msgIdString消息 ID。
messageString表情 ID。长度不可超过 128 个字符。该参数的值必须与客户端一致。

HTTP 响应

响应 body

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

参数类型描述
requestStatusCodeString操作结果。ok 表示成功删除 Reaction。
timestampLong请求响应的时间,Unix 时间戳,单位为毫秒。

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

示例

请求示例

curl -g -X DELETE 'https://localhost:8089/easemob-demo/easeim/reaction/user/wz?msgId=997625372793113144&message=emoji_40' -H 'Authorization: Bearer <YourAppToken>'

响应示例

{
  "requestStatusCode": "ok",
  "timestamp": 1645774821181
}

错误码

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

HTTP 状态码错误类型错误提示可能原因处理建议
400Bad Requestthe user operation is illegal!传入的用户 ID 没有操作过该 Reaction。传入正确的用户 ID。
400Bad Requestthis appKey is not open reaction service!Reaction 服务未开通。请在环信即时通讯控制台开通 Reaction 服务。

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

根据消息 ID 和表情 ID 获取 Reaction 信息

该方法根据指定的消息的 ID 和表情 ID 获取对应的 Reaction 信息,包括使用了该 Reaction 的用户 ID 及用户人数。

HTTP 请求

GET https://{host}/{org_name}/{app_name}/reaction/user/{userId}/detail?msgId={msgId}&message={message}&limit={limit}&cursor={cursor}

路径参数

参数类型是否必需描述
userIdString当前用户的用户 ID。

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

查询参数

参数类型是否必需描述
msgIdString消息 ID。
messageString表情 ID。长度不可超过 128 个字符。该参数的值必须与客户端一致。
limitInt每页显示添加 Reaction 的用户数量。取值范围为 [1,50],默认值为 50
cursorString查询游标,指定数据查询的起始位置,分页获取时使用。

提示

分页获取时,服务器按用户 Reaction 添加时间的正序返回。若 limitcursor 均不传值,服务器返回最早添加 Reaction 的 50 个用户。

请求 header

参数类型是否必需描述
AuthorizationStringApp 管理员的鉴权 token,格式为 Bearer YourAppToken,其中 Bearer 为固定字符,后面为英文空格和获取到的 app token。

HTTP 响应

响应 body

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

参数类型描述
requestStatusCodeString操作结果,ok 表示成功获取 Reaction 信息。
timestampLong请求响应的时间,Unix 时间戳,单位为毫秒。
dataJSON消息添加的 Reaction 的详情。
data.reactionIdStringReaction ID。
data.reactionString表情 ID,与客户端一致。该参数与创建/追加 Reaction API的请求参数 message 相同。
data.countInt添加该 Reaction 的用户人数。
data.stateBool当前请求用户是否添加过该 Reaction。
- true:是;
- false:否。
data.userListArray按 Reaction 添加时间正序返回的用户 ID 列表。
data.cursorString查询游标,指定下次查询的起始位置。

其他字段及描述详见 公共参数

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

示例

请求示例(第一页)

curl -g -X GET 'https://localhost:8089/easemob-demo/easeim/reaction/user/wz/detail?msgId=997627787730750008&message=emoji_40&limit=50' -H 'Authorization: Bearer <YourAppToken>'

请求示例(第 N 页)

curl -g -X GET 'https://localhost:8089/easemob-demo/easeim/reaction/user/wz/detail?msgId=997627787730750008&message=emoji_40&cursor=944330529971449164&limit=50' -H 'Authorization: Authorization: Bearer <YourAppToken>'

响应示例

{
  "requestStatusCode": "ok",
  "timestamp": 1645776986146,
  "data": {
    "reactionId": "946463470818405943",
    "reaction": "message123456",
    "count": 1,
    "state": true,
    "userList": ["wz1"],
    "cursor": "946463471296555192"
  }
}

错误码

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

HTTP 状态码错误类型错误提示可能原因处理建议
400Bad RequestLimit exceeds the maximum quantity limit传入的 limit 超过单次限制(50)。传入的 limit 值需在 [1,50] 范围内。

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