====== 消息表情回复 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"
    }
}