====== 消息表情回复 Reaction REST API ====== 更新时间:2022-06-06 消息表情回复(下文统称 “Reaction” )支持用户在单聊和群聊场景中对单条消息回复表情,从而增加用户聊天时的互动方式。本文主要介绍 Reaction 相关 REST API 接口。 ===== 公共参数 ===== ==== 请求参数 ==== ^参数 ^类型 ^是否必需 ^描述 ^ |''%%host%%'' |String |必需 |你在环信即时通讯云控制台注册项目时所在的集群服务器地址。 | |''%%org_name%%'' |String |必需 |即时通讯服务分配给每个企业(组织)的唯一标识。你可以通过控制台获取该字段。| |''%%app_name%%'' |String |必需 |你在环信即时通讯云控制台注册项目时填入的应用名称。 | |''%%userId%%'' |String |必需 |用户 ID。 | ==== 响应参数 ==== ^参数 ^描述 ^ |''%%data%%'' |实际取到的数据详情。 | |''%%username%%'' |用户 ID。 | |''%%groupname%%'' |群组名。 | |''%%timestamp%%'' |请求响应的时间,Unix 时间戳,单位为 ms。 | ===== 认证方式 ===== 环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 Authorization 字段: Authorization:''%%Bearer ${YourAppToken}%%'' 为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 仅支持使用 app token 的鉴权方式,详见[[https://docs-im.easemob.com/ccim/authentication | 使用 app token 鉴权]]。 ===== 创建/追加 Reaction ===== 在单聊和群聊场景中在单条消息上创建或追加 Reaction。 ==== HTTP 请求 ==== POST https://{host}/{org_name}/{app_name}/reaction/user/{userId} === 路径参数 === 参数及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 === 请求 header === ^参数 ^类型 ^是否必需 ^描述 ^ |''%%Content-Type%%'' |String |必需 |内容类型:''%%application/json%%'' | |''%%Authorization%%'' |String |必需 |''%%Bearer ${token}%%'' Bearer 是固定字符,后面加英文空格,再加上获取到的 app token 的值。| === 请求 body === ^参数 ^类型 ^是否必需^说明 ^ |''%%msgId%%'' |String|必需 |消息 ID。 | |''%%message%%''|String|必需 |表情 ID。长度不可超过 128 个字符。与客户端一致。允许的字符集包括:
- 26 个大写字母 (A-Z);
- 26 个小写字母(a-z);
- 10 个数字(0-9);
- 特殊字符(建议不使用,如需使用需要你自行在查询和删除接口进行 URL 编码)。| ==== HTTP 响应 ==== === 响应 body === 如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段: ^参数 ^类型 ^说明 ^ |''%%requestStatusCode%%''|String |接口相应 code 状态。''%%OK%%'' 表示操作成功。 | |''%%id%%'' |String |Reaction ID。 | |''%%msgId%%'' |String |消息 ID。 | |''%%msgType%%'' |String |消息类型:
- ''%%chat%%'':单聊;
- ''%%groupchat%%'':群聊。| |''%%groupId%%'' |Long |群组 ID(单聊时为 null)。 | |''%%reaction%%'' |String |表情 ID,与客户端一致。同请求参数中 “message”。 | |''%%createAt%%'' |Instant|创建时间。 | |''%%updateAt%%'' |Instant|修改时间。 | 其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。 ==== 示例 ==== === 请求示例 === curl -g -X POST 'http://localhost:8089/easemob-demo/easeim/reaction/user/e1' -H 'Authorization: Bearer ' -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": "message123456", "createdAt": "2022-02-24T10:57:43.138934Z", "updatedAt": "2022-02-24T10:57:43.138939Z" } } ===== 根据消息 ID 获取 Reaction ===== 该方法根据单聊或群聊中的消息 ID 获取指定消息的 Reaction 信息,包括 Reaction ID、使用的表情 ID、以及使用该 Reaction 的用户 ID 及用户人数。获取的 Reaction 的用户列表只展示最早三个添加 Reaction 的用户。 ==== HTTP 请求 ==== GET https://{host}/{org_name}/{app_name}/reaction/user/{userId} === 路径参数 === 参数及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 === 请求 header === ^参数 ^类型 ^是否必需 ^描述 ^ |''%%Content-Type%%'' |String |必需 |内容类型:''%%application/json%%'' | |''%%Authorization%%'' |String |必需 |''%%Bearer ${token}%%'' Bearer 是固定字符,后面加英文空格,再加上获取到的 app token 的值。| === 请求 body === ^参数 ^类型 ^是否必需 ^描述 ^ |''%%msgIdList%%'' |Array |必需 |需要查询的消息 ID 列表。 | |''%%msgType%%'' |String |必需 |消息类型(单聊:''%%chat%%''; 群聊:''%%groupchat%%'')。| |''%%groupId%%'' |String |非必需 |群组 ID(若要拉取群中的 Reaction,需要传当前群组的 ID)。 | ==== HTTP 响应 ==== === 响应 body === 如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段: ^参数 ^类型 ^说明 ^ |''%%requestStatusCode%%''|String|接口相应 code 状态。''%%OK%%'' 表示操作成功。 | |''%%msgId%%'' |String|消息 ID。 | |''%%reactionId%%'' |String|Reaction ID。 | |''%%reaction%%'' |String|表情 ID,与客户端一致。同请求参数中 “message”。 | |''%%count%%'' |Number|添加该 Reaction 的用户人数。 | |''%%state%%'' |Bool |当前请求用户是否添加过该 Reaction。
- ''%%true%%'': 是;
- ''%%false%%'':否。| |''%%userList%%'' |Array |追加 Reaction 的用户 ID 列表。只返回最早操作 Reaction 的三个用户的 ID。 | 其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。 ==== 示例 ==== === 请求示例 === curl -g -X GET 'http://localhost:8089/easemob-demo/easeim/reaction/user/{{userId}}?msgIdList=msgId1&msgType=chat' -H 'Authorization: Bearer ' === 响应示例 === { "requestStatusCode": "ok", "timestamp": 1645774821181, "data": [ { "msgId": "msg123", "reactionList": [ { "reactionId": "944330310986837168", "reaction": message123456, "count": 0, "state": false, "userList": [ "test123", "test456", "test1" ] } ] }, { "msgId": "msg1234", "reactionList": [ { "reactionId": "945272584050659838", "reaction": message123456, "count": 0, "state": false, "userList": [ "test5" ] } ] } ] } ===== 删除 Reaction ===== 删除当前用户对该 Reaction 的追加操作。 ==== HTTP 请求 ==== DELETE https://{host}/{org_name}/{app_name}/reaction/user/{userId} ==== 路径参数 ==== 参数及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 === 请求 header === ^参数 ^类型 ^是否必需 ^描述 ^ |''%%Content-Type%%'' |String |必需 |内容类型:''%%application/json%%'' | |''%%Authorization%%'' |String |必需 |''%%Bearer ${token}%%'' Bearer 是固定字符,后面加英文空格,再加上获取到的 app token 的值。| === 请求 body === ^参数 ^类型 ^是否必需 ^描述 ^ |''%%msgId%%'' |String |必需 |消息 ID。 | |''%%message%%'' |String |必需 |表情 ID。长度不可超过 128 个字符。与客户端一致。允许的字符集包括:
- 26 个大写字母 (A-Z);
- 26 个小写字母(a-z);
- 10 个数字(0-9);
- 特殊字符(建议不使用,如需使用需要你自行在查询和删除接口进行 URL 编码)。| ==== HTTP 响应 ==== === 响应 body === 如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段: ^参数 ^类型 ^说明 ^ |''%%requestStatusCode%%''|String|接口相应 code 状态。''%%OK%%'' 表示操作成功。| |''%%timestamp%%'' |long |请求响应的时间,Unix 时间戳,单位为毫秒。 | 其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。 ==== 示例 ==== === 请求示例 === curl -g -X DELETE 'http://localhost:8089/easemob-demo/easeim/reaction/user/wz?msgId=997625372793113144&message=emoji_40' -H 'Authorization: Bearer ' === 响应示例 === { "requestStatusCode": "ok", "timestamp": 1645774821181 } ===== 根据 消息 ID 和 表情 ID 获取 Reaction 信息 ===== 该方法根据指定的消息的 ID 和表情 ID 获取对应的 Reaction 信息,包括使用了该 Reaction 的用户名及用户人数。 ==== HTTP 请求 ==== GET https://{host}/{org_name}/{app_name}/reaction/user/{userId}/detail === 路径参数 === 参数及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 === 请求 header === ^参数 ^类型 ^是否必需 ^描述 ^ |''%%Content-Type%%'' |String |必需 |内容类型:''%%application/json%%'' | |''%%Authorization%%'' |String |必需 |''%%Bearer ${token}%%'' Bearer 是固定字符,后面加英文空格,再加上获取到的 app token 的值。| === 请求 body === ^参数 ^类型 ^是否必需^说明 ^ |''%%msgId%%'' |String |必需 |消息 ID。 | |''%%message%%''|String |必需 |表情 ID。长度不可超过 128 个字符。与客户端一致。允许的字符集包括:
- 26 个大写字母 (A-Z);
- 26 个小写字母(a-z);
- 10 个数字(0-9);
- 特殊字符(建议不使用,如需使用需要你自行在查询和删除接口进行 URL 编码)。 | |''%%limit%%'' |Integer|非必需 |分页获取时使用,每页显示的 Reaction 条数(默认值和最大值都为 50)。 | |''%%cursor%%'' |String |非必需 |分页获取时使用,传入游标后便从游标起始的地方进行查询,类似于数据库 limit 1,5 中 1 的作用,可以理解为页码。| ==== HTTP 响应 ==== === 响应 body === 如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段: ^参数 ^类型 ^说明 ^ |''%%requestStatusCode%%''|String|接口相应 code 状态。''%%OK%%'' 表示操作成功。 | |''%%reactionId%%'' |String|Reaction ID。 | |''%%reaction%%'' |String|表情 ID,与客户端一致。同请求参数中 “message”。 | |''%%count%%'' |Number|添加该 Reaction 的用户人数。 | |''%%state%%'' |Bool |当前请求用户是否添加过该 Reaction。
- ''%%true%%'':是;
- ''%%false%%'':否。| |''%%userList%%'' |Array |追加 Reaction 的用户 ID 列表。只返回最早操作 Reaction 的三个用户的 ID。 | |''%%cursor%%'' |String|分页获取时使用,传入游标后便从游标起始的地方进行查询,类似于数据库 limit 1,5 中 1 的作用,可以理解为页码。 | 其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/reaction#公共参数|公共参数]]。 如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。 ==== 示例 ==== === 请求示例(第一页) === curl -g -X GET 'http://localhost:8089/easemob-demo/easeim/reaction/user/wz/detail?msgId=997627787730750008&message=emoji_40&limit=50' -H 'Authorization: Bearer ' === 请求示例(第 N 页) === curl -g -X GET 'http://localhost:8089/easemob-demo/easeim/reaction/user/wz/detail?msgId=997627787730750008&message=emoji_40&cursor=944330529971449164&limit=50' -H 'Authorization: Authorization: Bearer ' === 响应示例 === { "requestStatusCode": "ok", "timestamp": 1645776986146, "data": { "reactionId": "946463470818405943", "reaction": "message123456", "count": 1, "state": true, "userList": [ "wz1" ], "cursor": "946463471296555192" } }