====== 用户属性管理 ======
更新时间:2022-06-30
用户属性指实时消息互动用户的信息,如用户昵称、头像、邮箱、电话、性别、签名、生日等。
例如,在招聘场景下,利用用户属性功能,可以存储性别、邮箱、用户类型(面试者)、职位类型(web 研发)等。当查看用户信息时,可以直接查询服务器存储的用户属性信息。
环信即时通讯提供给开发者从服务端 REST API 接口管理相关用户属性信息的方式。
**注意**
为保证用户信息安全,环信即时通讯 IM 仅支持用户本人或 app 管理员设置用户属性。
可以调用以下 REST API 来实现用户属性功能:
^主要功能           ^功能描述                    ^
|设置用户属性         |设置指定的用户的属性。             |
|获取指定用户的所有用户属性  |获取指定用户的所有属性。            |
|批量获取用户属性       |根据指定的用户名列表和属性列表查询用户属性。  |
|删除用户属性         |删除指定用户的所有属性。            |
|获取用户属性总量大小     |获取该 app 下所有用户的属性总大小。    |
===== 前提条件 =====
要调用环信即时通讯 RESTful API,请确保满足以下要求:
  * 已在环信即时通讯控制台 [[https://docs-im.easemob.com/ccim/config|开通配置环信即时通讯 IM 服务]]。
  * 了解环信 IM REST API 的调用频率限制,详见 [[https://docs-im.easemob.com/ccim/limitationapi|接口频率限制]]。
===== 公共参数 =====
==== 请求参数 ====
^参数                ^类型      ^是否必需  ^描述                                     ^
|''%%host%%''      |String  |是     |你在环信即时通讯 IM 管理后台注册项目时所在的集群服务器地址。       |
|''%%org_name%%''  |String  |是     |即时通讯服务分配给每个企业(组织)的唯一标识。你可以通过控制台获取该字段。  |
|''%%app_name%%''  |String  |是     |你在环信即时通讯 IM 管理后台注册项目时填入的应用名称。          |
|''%%username%%''  |String  |是     |用户 ID。                                 |
==== 响应参数 ====
^参数                       ^类型      ^描述                                                        ^
|''%%action%%''           |String  |请求方式,即接口方法名。                                              |
|''%%organization%%''     |String  |即 ''%%org_name%%'',即时通讯服务分配给每个企业(组织)的唯一标识。你可以通过控制台获取该字段。  |
|''%%application%%''      |String  |应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。                             |
|''%%applicationName%%''  |String  |即 ''%%app_name%%'',你在环信即时通讯 IM 管理后台注册项目时填入的应用名称。          |
|''%%uri%%''              |String  |请求 URL。                                                   |
|''%%path%%''             |String  |请求路径,属于请求 URL 的一部分,开发者无需关注。                               |
|''%%entities%%''         |Object  |详细信息。                                                     |
|''%%data%%''             |Object  |实际获取的数据详情。                                                |
|''%%username%%''         |String  |用户 ID。                                                    |
|''%%data.nickname%%''    |String  |用户昵称。                                                     |
|''%%data.ext%%''         |String  |你自定义的用户属性扩展字段。                                            |
|''%%data.avatarurl%%''   |String  |用户头像 URL。                                                 |
|''%%timestamp%%''        |Long    |Unix 时间戳,单位为毫秒。                                           |
|''%%duration%%''         |Long    |请求响应时间,单位为毫秒。                                             |
===== 认证方式 =====
环信即时通讯 IM REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 Authorization 字段:
Authorization:''%%Bearer ${YourToken}%%''
为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的 鉴权方式,详见 [[https://docs-im.easemob.com/ccim/authentication|使用环信 App Token 鉴权]]。
===== 设置用户属性 =====
用户属性的内容为一个或多个纯文本键值对,默认单一用户的属性总长不得超过 2 KB,默认一个 app 下所有用户的所有属性总长不得超过 10 GB。
请求示例中使用的键是 ''%%avatarurl%%''、''%%ext%%''、''%%nickname%%'',你可以根据实际使用场景决定键值。
==== HTTP 请求 ====
PUT https://{host}/{org_name}/{app_name}/metadata/user/{username}
=== 路径参数 ===
参数及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
=== 请求 header ===
^参数                     ^类型      ^是否必需  ^描述                                                                                            ^
|''%%Content-Type%%''   |String  |是     |内容类型。请填 ''%%application/x-www-form-urlencoded%%''。                                            |
|''%%Authorization%%''  |String  |是     |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。  |
=== 请求 body ===
^参数            ^类型      ^
|''%%key1%%''  |String  |
|''%%key2%%''  |String  |
|''%%key3%%''  |String  |
|…             |…       |
|''%%keyN%%''  |String  |
请求体的长度限制:
用户属性键值对的 JSON String 长度不能 超过 4 KB。
比如:
requestBody = ‘name=ken&employer=easemob&title=developer’
JSONString = ‘{“name”:“ken”, “employer”:“easemob”, “title”:“developer”}’
这个 JSONString 的总长度不得超过 4 KB。
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段            ^类型      ^描述        ^
|''%%data%%''  |Object  |用户属性键值对。  |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将  替换为你在服务端生成的 Token
curl -X PUT -H 'Content-Type: application/x-www-form-urlencoded' -H 'Authorization: Bearer ' -d 'avatarurl=http://www.easemob.com/avatar.png&ext=ext&nickname=nickname' 'http://XXXX/XXXX/XXXX/metadata/user/user1'
=== 响应示例 ===
{
    "timestamp":1620445147011,
    "data":{
        "ext":"ext",
        "nickname":"nickname",
        "avatarurl":"http://www.easemob.com/avatar.png"
    },
    "duration":166
}
===== 获取用户属性 =====
获取指定用户的所有用户属性键值对。需要在请求时对应填写 {username},需要获取用户属性的用户 ID。
如果指定的用户或用户属性不存在,返回空数据 {}。
==== HTTP 请求 ====
GET https://{host}/{org_name}/{app_name}/metadata/user/{username}
=== 路径参数 ===
参数及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
=== 请求 header ===
^参数                     ^类型      ^是否必需  ^描述                                                                                            ^
|''%%Content-Type%%''   |String  |是     |内容类型。请填 ''%%application/json%%''。                                                             |
|''%%Authorization%%''  |String  |是     |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。  |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段            ^类型      ^描述        ^
|''%%data%%''  |Object  |用户属性键值对。  |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将  替换为你在服务端生成的 Token
curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer ' 'http://XXXX/XXXX/XXXX/metadata/user/user1'
=== 响应示例 ===
{
    "timestamp":1620445147011,
    "data":{
        "ext":"ext",
        "nickname":"nickname",
        "avatarurl":"http://www.easemob.com/avatar.png"
    },
    "duration":166
}
===== 批量获取用户属性 =====
根据指定的用户名列表和属性列表,查询用户属性。
如果指定的用户或用户属性不存在,返回空数据 {}。 每次最多指定 100 个用户。
==== HTTP 请求 ====
POST https://{host}/{org_name}/{app_name}/metadata/user/get
=== 路径参数 ===
参数及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
=== 请求 header ===
^参数                     ^类型      ^是否必需  ^描述                                                                                            ^
|''%%Content-Type%%''   |String  |是     |内容类型。请填 ''%%application/json%%''。                                                             |
|''%%Authorization%%''  |String  |是     |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。  |
=== 请求 body ===
^参数                  ^类型     ^是否必需  ^描述                                     ^
|''%%targets%%''     |Array  |是     |用户名列表,最多 100 个用户名。                     |
|''%%properties%%''  |Array  |是     |属性名列表,查询结果只返回该列表中包含的属性,不在该列表中的属性将被忽略。  |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段            ^类型      ^描述        ^
|''%%data%%''  |Object  |用户属性键值对。  |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将  替换为你在服务端生成的 Token
curl -X POST -H 'Content-Type:  application/json' -H 'Authorization: Bearer ' -d '{
  "properties": [
    "avatarurl",
    "ext",
    "nickname"
  ],
  "targets": [
    "user1",
    "user2",
    "user3"
  ]
}' 'http://XXXX/XXXX/XXXX/metadata/user/get'
=== 响应示例 ===
{
    "timestamp":1620448826647,
    "data":{
        "user1":{
            "ext":"ext",
            "nickname":"nickname",
            "avatarurl":"http://www.easemob.com/avatar.png"
        },
        "user2":{
            "ext":"ext",
            "nickname":"nickname",
            "avatarurl":"http://www.easemob.com/avatar.png"
        },
        "user3":{
            "ext":"ext",
            "nickname":"nickname",
            "avatarurl":"http://www.easemob.com/avatar.png"
        }
    },
    "duration":3
}
===== 获取用户属性总量大小 =====
获取该 app 下所有用户的属性数据大小,单位为字节。
==== HTTP 请求 ====
GET https://{host}/{org_name}/{app_name}/metadata/user/capacity
=== 路径参数 ===
参数及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
=== 请求 header ===
^参数                     ^类型      ^是否必需  ^描述                                                                                            ^
|''%%Authorization%%''  |String  |是     |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。  |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^参数            ^类型    ^描述                         ^
|''%%data%%''  |Long  |该 app 下所有用户属性的数据大小,单位为字节。  |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将  替换为你在服务端生成的 Token
curl -X GET -H 'Authorization: Bearer ' 'http://XXXX/XXXX/XXXX/metadata/user/capacity'
=== 响应示例 ===
{
    "timestamp": 1620447051368,
    "data": 1673,
    "duration": 55
}
===== 删除用户属性 =====
删除指定用户的所有属性。如果指定的用户或用户属性不存在(可能已删除),也视为删除成功。
==== HTTP 请求 ====
DELETE https://{host}/{org_name}/{app_name}/metadata/user/{username}
=== 路径参数 ===
参数及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
=== 请求 header ===
^参数                     ^类型      ^是否必需  ^描述                                                                                            ^
|''%%Authorization%%''  |String  |是     |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。  |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^参数            ^类型    ^描述                                                                                ^
|''%%data%%''  |Bool  |是否删除成功:
 - ''%%true%%'':是;
 - ''%%false%%'':否。  |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/userprofile#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将  替换为你在服务端生成的 Token
curl -X DELETE -H 'Authorization: Bearer ' 'http://XXXX/XXXX/XXXX/metadata/user/user1'
=== 响应示例 ===
{
    "timestamp": 1616573382270,
    "duration": 10,
    "data": true
}