跳到主要内容

Open API

概述

SERVICEME Open API 调用基本流程:

第一步,采用身份认证章节提供的接口进行身份认证,获取 access token

​认证分为两类,一类是用户认证,另一类是客户端认证。

  • 用户认证:基于个人账号身份进行认证的方式。
  • 客户端认证:用SERVICEME颁发的客户端code与secret进行认证的方式。

第二步,携带access token调用对应的API

身份认证方式

用户AAD认证

该方式属于用户认证的一种,需要使用到AAD的access token作为身份认证的依据。

  • AAD access token 获取方式:

    AAD 与 React 集成文档:前往->

    AAD 与 .Net 集成文档:前往->

    AAD 与 Java 集成文档:前往->

  • 接口地址:/openapi/auth/user/aad

  • 请求方式:post

  • 请求body:

参数名称必填类型参数解释
tokenstring用户AAD access token(对接方自己提供)
  • 接口请求示例:
curl --location 'https://localhost/openapi/auth/user/aad' \
--header 'Content-Type: application/json' \
--data '{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlhSdmtvOFA3QTNVYVdTblU3Yk05blQwTWpoQSJ9.eyJhdWQiOiIzZTEwNjVhYS1jZWYxLTRiYTgtOWRiOS1kMWQ1Y2UzMGYyZDgiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNDRjMjRmNDItZDQ5Yi00MT......"
}'
  • 响应body:
参数名称参数二级类型参数解释
dataobject响应数据
access_tokenstringSERVICEME系统 access token
expires_innumber过期时间,单位分钟
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:
{
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc0V4dGVybmFsIjpmYWxzZSwidXNlcklkIjoiNDAzMDUwMjEwMTEyODgzOTE2OCIsImFjY291bnQiOiJlY210cmlhbEBzZXJ2aWNlbWUub25taWNyb3NvZ......",
"expires_in": 1440
},
"success": true,
"msg": ""
}

客户端与用户账户认证

这种认证方式采用客户端认证和用户账户认证相结合的方式。通过用户账户进行身份认证,同时需要使用客户端凭证(client code和secret)来确保接口调用的安全性。调用此接口时需要进行签名验证。

  • 如何获取client和secret?

请联系系统管理员,管理员将通过以下地址为您创建并分配客户端凭证:

https://xxx/#/super-admin/client-management
  • 接口地址:/openapi/auth/client_with_account

  • 请求方式:post

  • 请求body:

参数名称必填类型参数解释
clientstring客户端code(SERVICEME提供)
accountstring用户账户(对接方提供)
timestampnumber时间戳(13位数字,精度到毫秒,如 1711537596897 )
noncestring6位随机数(数字或字母的组合均可)
signaturestring签名,五分钟内有效(签名格式:用冒号拼接后再MD5 client:{client}secret:{secret}account:{account}timestamp:{timestamp}nonce:{nonce} 得到的MD5 32位长度的值转小写)
  • javascript 签名示例:

    请新建一个 html 文件粘贴以下内容后使用浏览器打开

    <html>
    <head>
    <style>
    .box {
    width: 100%;
    height: 100%;
    padding: 50px 50px;
    }
    .row {
    display: flex;
    height: 50px;
    width: 100%;
    }
    .col1 {
    flex: 1;
    }
    .col2 {
    flex: 3;
    }
    </style>
    </head>
    <body>
    <div class="box">
    <div class="row">
    <div class="col1">client:</div>
    <div class="col2" id="client"></div>
    </div>
    <div class="row">
    <div class="col1">secret:</div>
    <div class="col2" id="secret"></div>
    </div>
    <div class="row">
    <div class="col1">account:</div>
    <div class="col2" id="account"></div>
    </div>
    <div class="row">
    <div class="col1">timestamp:</div>
    <div class="col2" id="timestamp"></div>
    </div>
    <div class="row">
    <div class="col1">nonce:</div>
    <div class="col2" id="nonce"></div>
    </div>
    <div class="row">
    <div class="col1">signature:</div>
    <div class="col2" id="signature"></div>
    </div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
    <script>
    const client = "openapi"
    const secret = "DzYwyICrKbUCEseYthCK0PfSfX7NPEuV"
    const account = "test@serviceme.com"
    const timestamp = +new Date()
    const nonce = "123abc"
    const message = `client:${client}secret:${secret}account:${account}timestamp:${timestamp}nonce:${nonce}` // 签名明文
    const md5Hash = CryptoJS.MD5(message).toString().toLowerCase(); // MD5 32位转小写

    console.log(`签名明文:${message}`)
    console.log(`签名结果:${md5Hash}`)

    document.getElementById('client').innerText = client;
    document.getElementById('secret').innerText = secret;
    document.getElementById('account').innerText = account;
    document.getElementById('timestamp').innerText = timestamp;
    document.getElementById('nonce').innerText = nonce;
    document.getElementById('signature').innerText = md5Hash;
    </script>
    </body>
    </html>
  • 接口请求示例:

curl --location 'https://localhost/openapi/auth/client_with_account' \
--header 'Content-Type: application/json' \
--data '{
"client": "openapi",
"account": "test@serviceme.com",
"timestamp": 1711537596456,
"nonce": "123abc",
"signature": "182be0c5cdcd5072bb1864cdee4d3d6e"
}'
  • 响应body
参数名称参数二级类型参数解释
dataobject响应数据
access_tokenstringSERVICEME系统 access token
expires_innumber过期时间,单位分钟
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 接口响应示例:
{
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc0V4dGVybmFsIjpmYWxzZSwidXNlcklkIjoiNDAzMDUwMjEwMTEyODgzOTE2OCIsImFjY291bnQiOiJlY210cmlhbEBzZXJ2ub25ta......",
"expires_in": 1440
},
"success": true,
"msg": ""
}

用户

添加用户(支持批量)

  • 接口地址:v1/openapi/user

  • **请求方式: **post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
userNamestring账号/用户名
passwordstring''密码
activebooleantrue激活状态
userInfoobject用户信息
userInfo.realNamestringuserName的值真实姓名
userInfo.spellstring真实姓名的拼音
userInfo.serialNumberstring工号
userInfo.nickNamestring昵称
userInfo.gendernumber0性别 0:FEMALE, 1:MALE
userInfo.birthdaystring生日
userInfo.mobilePhonestring手机号
userInfo.emailstring邮箱
userInfo.weChatstring微信号
userInfo.avatarstring头像
userInfo.regionstring地区
userInfo.joinTimestring入职日期
userInfo.sortnumber0排序号
userInfo.enablebooleanfalse启动/禁用
userInfo.descriptionstring描述
userInfo.externalbooleanfalse内外部用户标识 false: 内部用户, true: 外部用户
userInfo.officePhoneNumberstring办公电话
userInfo.isAadstring账号是否来自AAD(microsoft Entra ID)
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user' \
--header 'Authorization: openapi {access_token}' \
--data '{
"userName": "user1",
"password": "abc123",
"active": true,
"userInfo": {
"realName": "张三",
"spell": "zhangsan",
"serialNumber": "123456",
"nickName": "张三",
"gender": 0,
"birthday": "1990-01-01",
"mobilePhone": "13800138000",
"email": "zhangsan@email.com",
"weChat": "zhangsan",
"avatar": "/icons/e5392a9c9efb423cab69ce040dcb04e7.png",
"region": "中国",
"joinTime": "2023-01-01",
"sort": 101,
"enable": true,
"description": "张三的描述",
"external": false,
"officePhoneNumber": "010-12345678",
"isAad": false
},
} '
  • 响应body:
字段名类型说明
dataobject响应数据对象
data.accountIdstring账号 ID
data.userIdstring用户 ID
data.userNamestring用户名
data.realNamestring用户真名
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"accountId": "123456",
"userId": "123456",
"userName": "user1",
"realName": "张三"
}
]
}

修改用户

  • 接口地址:v1/openapi/user

  • **请求方式: **put

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
userNamestring账号/用户名,只用来找到用户不会被修改,和id不能都为空
idstring''id,和userName不能都为空
activebooleantrue激活状态
realNamestringuserName的值真实姓名
spellstring真实姓名的拼音
serialNumberstring工号
nickNamestring昵称
gendernumber0性别 0:FEMALE, 1:MALE
birthdaystring生日
mobilePhonestring手机号
emailstring邮箱
weChatstring微信号
avatarstring头像
regionstring地区
joinTimestring入职日期
sortnumber0排序号
enablebooleanfalse启动/禁用
descriptionstring描述
externalbooleanfalse内外部用户标识 false: 内部用户, true: 外部用户
officePhoneNumberstring办公电话
isAadstring账号是否来自AAD(microsoft Entra ID)
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user' \
--header 'Authorization: openapi {access_token}' \
--data '{
"id": "123456",
"userName": "user1",
"realName": "张三",
"spell": "zhangsan",
"serialNumber": "123456",
"nickName": "张三",
"gender": 0,
"birthday": "1990-01-01",
"mobilePhone": "13800138000",
"email": "zhangsan@email.com",
"weChat": "zhangsan",
"avatar": "/icons/e5392a9c9efb423cab69ce040dcb04e7.png",
"region": "中国",
"joinTime": "2023-01-01",
"sort": 101,
"enable": true,
"description": "张三的描述",
"external": false,
"officePhoneNumber": "010-12345678",
"isAad": false
} '
  • 响应body:

| 字段名 | 类型 | 说明 |
|----------------------|-------------|-------------------------------------------------------------| | | success | boolean | 请求是否成功 | | msg | string | 请求返回的消息(如果有) |

  • 响应示例:
{
"success": true,
"msg": ""
}

删除用户

  • 接口地址:v1/openapi/user

  • **请求方式: **delete

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
array用户Id数组或用户名数组. 数组里只能全都是Id或全都是用户名.
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user' \
--header 'Authorization: openapi {access_token}' \
--data '['user1','user2']'
  • 响应body:

| 字段名 | 类型 | 说明 |
|----------------------|-------------|-------------------------------------------------------------| | | success | boolean | 请求是否成功 | | msg | string | 请求返回的消息(如果有) |

  • 响应示例:
{
"success": true,
"msg": ""
}

启用用户

  • 接口地址:v1/openapi/user/{userCode}/enable

  • **请求方式: **put

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • route参数:
参数名称必填类型默认值参数解释
userCodestring用户Id数组或用户名
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/123456/enable' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:

| 字段名 | 类型 | 说明 |
|----------------------|-------------|-------------------------------------------------------------| | | success | boolean | 请求是否成功 | | msg | string | 请求返回的消息(如果有) |

  • 响应示例:
{
"success": true,
"msg": ""
}

禁用用户

  • 接口地址:v1/openapi/user/{userCode}/disable

  • **请求方式: **put

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • route参数:
参数名称必填类型默认值参数解释
userCodestring用户Id数组或用户名
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/123456/disable' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:

| 字段名 | 类型 | 说明 |
|----------------------|-------------|-------------------------------------------------------------| | | success | boolean | 请求是否成功 | | msg | string | 请求返回的消息(如果有) |

  • 响应示例:
{
"success": true,
"msg": ""
}

启用/禁用用户(支持批量)

  • 接口地址:v1/openapi/user/enable

  • **请求方式: **put

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
codesarray用户Id数组或用户名数组. 数组里只能全都是Id或全都是用户名.
operationbooleantruetrue: 启用, false: 禁用
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/enable' \
--header 'Authorization: openapi {access_token}' \
--data '{
"codes": ['user1', 'user2'],
"operation": true
}'
  • 响应body:

| 字段名 | 类型 | 说明 |
|----------------------|-------------|-------------------------------------------------------------| | | success | boolean | 请求是否成功 | | msg | string | 请求返回的消息(如果有) |

  • 响应示例:
{
"success": true,
"msg": ""
}

获取用户列表(分页)

  • 接口地址:v1/openapi/user/pageList

  • **请求方式: **post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
orderFieldstring用于排序的字段,Id含有时间信息,可以用id排序来用作创建时间的排序
orderTypestring排序类型, asc: 正序, desc: 倒序
conditionsarray查询条件,传多个时相互之间是 and 的关系
conditions.fieldNamestring查询条件的名称,如realName
conditions.fieldValuestring查询条件的值
conditions.conditionalTypenumber0查询条件的比较类型 0: 精确匹配, 1: 模糊匹配, 2: 大于, 3: 大于等于, 4:小于, 5: 小于等于, 6: 包含(in), 7: 不包含(not in), 8: 向左模糊匹配, 9:向右模糊匹配, 10: 不等于, 11: nullOrEmpty, 12: 不为空, 13: notLike
pageIndexnumber页码
pageSizenumber每页的数量
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/pageList' \
--header 'Authorization: openapi {access_token}' \
{
"orderField": "id",
"orderType": "desc",
"conditions": [
{
"fieldName": "realName",
"fieldValue": "张三",
"conditionalType": 0
}
],
"pageIndex": 1,
"pageSize": 15
}
  • 响应body:
字段名类型说明
dataarray分页数据
data.idstring账号 ID
data.userIdstring用户 ID
data.userNamestring用户名
data.activeboolean是否激活
data.avatarstring头像
data.birthdaystring生日
data.createdstring用户数据创建日期
data.modifiedstring用户数据最后修改日期
data.descriptionstring描述
data.gendernumber性别 0:FEMALE, 1:MALE
data.mobilePhonestring手机号
data.nickNamestring昵称
data.emailstring邮箱
data.joinTimestring入职日期
data.regionstring地区
data.weChatstring微信号
data.spellstring真实姓名的拼音
data.serialNumberstring工号
data.accountIdstring用户所属的账号Id
data.sortnumber排序号
data.officePhoneNumberstring办公电话
data.externalboolean内外部用户标识 false: 内部用户, true: 外部用户
data.isAadboolean账号是否来自AAD(microsoft Entra ID)
data.enableboolean启动/禁用
pageIndexnumber当前页码
pageSizenumber页码大小
totalCountnumber总条数
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"data": [
{
"accountId": "123456",
"userId": "123456",
"userName": "user1",
"realName": "张三"
}
],
"pageSize": 15,
"pageIndex": 1,
"totalCount": 1,
"success": true,
"msg": null
}

获取用户信息

  • 接口地址:v1/openapi/user/{userCode}

  • **请求方式: **get

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • route参数:
参数名称必填类型默认值参数解释
userCodestring用户Id数组或用户名
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/123456' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:
字段名类型说明
dataobject响应数据对象
data.idstring账号 ID
data.userIdstring用户 ID
data.userNamestring用户名
data.Activeboolean是否激活
data.Avatarstring头像
data.Birthdaystring生日
data.Createdstring用户数据创建日期
data.Modifiedstring用户数据最后修改日期
data.Descriptionstring描述
data.Gendernumber性别 0:FEMALE, 1:MALE
data.MobilePhonestring手机号
data.NickNamestring昵称
data.Emailstring邮箱
data.JoinTimestring入职日期
data.Regionstring地区
data.WeChatstring微信号
data.Spellstring真实姓名的拼音
data.SerialNumberstring工号
data.AccountIdstring用户所属的账号Id
data.Sortnumber排序号
data.OfficePhoneNumberstring办公电话
data.Externalboolean内外部用户标识 false: 内部用户, true: 外部用户
data.IsAadboolean账号是否来自AAD(microsoft Entra ID)
data.Enableboolean启动/禁用
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"accountId": "123456",
"userId": "123456",
"userName": "user1",
"realName": "张三"
}
]
}

获取当前登录用户的信息

  • 接口地址:v1/openapi/user/me

  • **请求方式: **get

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json

  • 请求示例:

curl --location 'http://localhost/v1/openapi/user/me' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:
字段名类型说明
dataobject响应数据对象
data.idstring账号 ID
data.userIdstring用户 ID
data.userNamestring用户名
data.Activeboolean是否激活
data.Avatarstring头像
data.Birthdaystring生日
data.Createdstring用户数据创建日期
data.Modifiedstring用户数据最后修改日期
data.Descriptionstring描述
data.Gendernumber性别 0:FEMALE, 1:MALE
data.MobilePhonestring手机号
data.NickNamestring昵称
data.Emailstring邮箱
data.JoinTimestring入职日期
data.Regionstring地区
data.WeChatstring微信号
data.Spellstring真实姓名的拼音
data.SerialNumberstring工号
data.AccountIdstring用户所属的账号Id
data.Sortnumber排序号
data.OfficePhoneNumberstring办公电话
data.Externalboolean内外部用户标识 false: 内部用户, true: 外部用户
data.IsAadboolean账号是否来自AAD(microsoft Entra ID)
data.Enableboolean启动/禁用
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"accountId": "123456",
"userId": "123456",
"userName": "user1",
"realName": "张三"
}
]
}

获取当前登录用户的角色

  • 接口地址:v1/openapi/user/roles

  • **请求方式: **get

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json

  • 请求示例:

curl --location 'http://localhost/v1/openapi/user/me/roles' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:
字段名类型说明
dataarray响应数据对象
data.roleIdstring角色ID
data.roleNamestring角色名称
data.dataPermissionListarray用户在这个角色下的数据权限
data.dataPermissionList.BusinessTreeTypenumber应用类型
data.dataPermissionList.DataPermissionObjectIdstring数据权限对象Id,比如如果是知识库权限就是那个知识库的Id
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"roleId": "123456",
"roleName": "知识库访客",
"dataPermissionList": [
{
"BusinessTreeType": 1,
"DataPermissionObjectId": "123456"
}
]
}
]
}

获取用户已关联的角色

  • 接口地址:v1/openapi/user/{userCode}/roles

  • **请求方式: **get

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • route参数:
参数名称必填类型默认值参数解释
userCodestring用户Id数组或用户名
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/123456/roles' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:
字段名类型说明
dataarray响应数据对象
data.roleIdstring角色ID
data.roleNamestring角色名称
data.dataPermissionListarray用户在这个角色下的数据权限
data.dataPermissionList.BusinessTreeTypenumber应用类型
data.dataPermissionList.DataPermissionObjectIdstring数据权限对象Id,比如如果是知识库权限就是那个知识库的Id
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"roleId": "123456",
"roleName": "知识库访客",
"dataPermissionList": [
{
"BusinessTreeType": 1,
"DataPermissionObjectId": "123456"
}
]
}
]
}

用户角色关系修改

  • 接口地址:v1/openapi/user/{userCode}/roles

  • **请求方式: **put

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • route参数:
参数名称必填类型默认值参数解释
userCodestring用户Id数组或用户名
  • 请求body:
参数名称必填类型默认值参数解释
array角色Id数组或角色名称数组. 数组里只能全都是Id或全都是名称.
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/123456/roles' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:
字段名类型说明
dataarray响应数据对象
data.roleIdstring角色ID
data.roleNamestring角色名称
data.dataPermissionListarray用户在这个角色下的数据权限
data.dataPermissionList.BusinessTreeTypenumber应用类型
data.dataPermissionList.DataPermissionObjectIdstring数据权限对象Id,比如如果是知识库权限就是那个知识库的Id
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"roleId": "123456",
"roleName": "知识库访客",
"dataPermissionList": [
{
"BusinessTreeType": 1,
"DataPermissionObjectId": "123456"
}
]
}
]
}

组织

添加组织

  • 接口地址:v1/openapi/organization

  • **请求方式: **post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
codestring组织代号,在系统中唯一,不可重复
parentIdstring父级组织机构Id和父级组织名称至少要填一项
parentNamestring父级组织机构名称,和父级组织Id至少要填一项
namestring名称
locationstring地址
remarksstring备注
contactstring联系方式
Infostring机构信息
Extensionstring扩展信息
IsSubsidiarybooleanfalse是否子公司
sortnumber0排序号
isEnablebooleanfalse启动/禁用
externalbooleanfalse内外部组织标识 false: 内部, true: 外部
  • 请求示例:
curl --location 'http://localhost/v1/openapi/organization' \
--header 'Authorization: openapi {access_token}' \
--data '{
"code": "123456",
"parentId": "12345",
"name": "组织名称",
"location": "地址"
} '
  • 响应body:
字段名类型说明
dataobject响应数据对象
data.idstring组织ID
data.codestring组织代号
data.parentIdstring父级组织Id
data.parentNamestring是否激活
data.namestring名称
data.locationstring地址
data.remarksstring备注
data.contactstring联系方式
data.Infostring机构信息
data.Extensionnumber扩展信息
data.IsSubsidiaryboolean是否子公司
data.sortnumber排序号
data.isEnableboolean启动/禁用
data.externalboolean内外部组织标识
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"id": "123456",
"code": "123456",
"parentId": "12345",
"name": "组织名称",
"location": "地址"
}
]
}

更新组织

  • 接口地址:v1/openapi/organization

  • **请求方式: **put

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
idstring组织id,和code至少要填一项
codestring组织代号,和id至少要填一项
parentIdstring父级组织机构Id和父级组织名称至少要填一项
parentNamestring父级组织机构名称,和父级组织Id至少要填一项
namestring名称
locationstring地址
remarksstring备注
contactstring联系方式
Infostring机构信息
Extensionstring扩展信息
IsSubsidiarybooleanfalse是否子公司
sortnumber0排序号
isEnablebooleanfalse启动/禁用
externalbooleanfalse内外部组织标识 false: 内部, true: 外部
  • 请求示例:
curl --location 'http://localhost/v1/openapi/organization' \
--header 'Authorization: openapi {access_token}' \
--data '{
"code": "123456",
"parentId": "12345",
"name": "组织名称",
"location": "地址"
} '
  • 响应body:
字段名类型说明
dataobject响应数据对象
data.idstring组织ID
data.codestring组织代号
data.parentIdstring父级组织Id
data.parentNamestring是否激活
data.namestring名称
data.locationstring地址
data.remarksstring备注
data.contactstring联系方式
data.Infostring机构信息
data.Extensionnumber扩展信息
data.IsSubsidiaryboolean是否子公司
data.sortnumber排序号
data.isEnableboolean启动/禁用
data.externalboolean内外部组织标识
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"id": "123456",
"code": "123456",
"parentId": "12345",
"name": "组织名称",
"location": "地址"
}
]
}

删除组织

  • 接口地址:v1/openapi/organization

  • **请求方式: **delete

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
array组织Id数组或组织名数组. 数组里只能全都是Id或全都是组织名.
  • 请求示例:
curl --location 'http://localhost/v1/openapi/organization' \
--header 'Authorization: openapi {access_token}' \
--data '['org1','org2']'
  • 响应body:

| 字段名 | 类型 | 说明 |
|----------------------|-------------|-------------------------------------------------------------| | | success | boolean | 请求是否成功 | | msg | string | 请求返回的消息(如果有) |

  • 响应示例:
{
"success": true,
"msg": ""
}

获取树状组织结构

  • 接口地址:v1/openapi/organization/tree

  • **请求方式: **get

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求query:
参数名称必填类型默认值参数解释
externalbooleanfalse是否外部组织
  • 请求示例:
curl --location 'http://localhost/v1/openapi/organization/tree' \
--header 'Authorization: openapi {access_token}' \
  • 响应body:
字段名类型说明
dataarray响应数据对象
data.nodeIdstring组织ID
data.nodeNamestring组织名称
data.parentNodeIdstring父级组织Id
data.codestring组织代号
data.pathstring根节点至当前节点的路径--节点走过的id(用'/'来分开)
data.externalboolean内外部组织标识
data.childNodeListarray子组织
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": "",
"data": [
{
"isExternal": false,
"sort": 1,
"nodeId": "4034994050380595200",
"nodeName": "内部组织",
"path": "4034994050380595200/4419926899526991872",
"parentNodeId": "-1",
"childNodeList": [
{
"isExternal": false,
"sort": 1,
"nodeId": "4419926899526991872",
"nodeName": "IT",
"path": "4034994050380595200/4419926899526991872",
"parentNodeId": "4034994050380595200",
}
]
}
]
}

根据用户组织关系获取用户(分页)

  • 接口地址:v1/openapi/organization/getAllOrgUserPageList

  • **请求方式: **post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
orderFieldstring用于排序的字段,Id含有时间信息,可以用id排序来用作创建时间的排序
orderTypestring排序类型, asc: 正序, desc: 倒序
conditionsarray查询条件,传多个时相互之间是 and 的关系
conditions.fieldNamestring查询条件的名称,如organizationId
conditions.fieldValuestring查询条件的值
conditions.conditionalTypenumber0查询条件的比较类型 0: 精确匹配, 1: 模糊匹配, 2: 大于, 3: 大于等于, 4:小于, 5: 小于等于, 6: 包含(in), 7: 不包含(not in), 8: 向左模糊匹配, 9:向右模糊匹配, 10: 不等于, 11: nullOrEmpty, 12: 不为空, 13: notLike
pageIndexnumber页码
pageSizenumber每页的数量
  • 请求示例:
curl --location 'http://localhost/v1/openapi/organization/getAllOrgUserPageList' \
--header 'Authorization: openapi {access_token}' \
{
"orderField": "id",
"orderType": "desc",
"conditions": [
{
"fieldName": "organizationName",
"fieldValue": "123456",
"conditionalType": 0
}
],
"pageIndex": 1,
"pageSize": 15
}
  • 响应body:
字段名类型说明
dataarray分页数据
data.userIdstring用户 ID
data.accountstring用户名
data.accountIdboolean账号 ID
data.realNamestring真实姓名
data.organizationNamestring组织名称
data.organizationIdstring组织ID
data.organizationParentIdstring父级组织ID
data.Emailstring邮箱
data.Sortnumber排序号
data.Externalboolean内外部用户标识 false: 内部用户, true: 外部用户
pageIndexnumber当前页码
pageSizenumber页码大小
totalCountnumber总条数
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"data": [
{
"account": "user1",
"accountId": "123456",
"userId": "123456",
"realName": "user1",
"organizationName": "org1",
"organizationId": "123456",
"external": false,
"organizationParentId": "12345",
"sort": 1,
"email": ""
}
],
"pageSize": 15,
"pageIndex": 1,
"totalCount": 1,
"success": true,
"msg": null
}

添加用户组织关系

  • 接口地址:v1/openapi/organization/relationship

  • **请求方式: **post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
organizationIdstring组织Id
userIdstring用户Id
sortnumber0排序号
  • 请求示例:
curl --location 'http://localhost/v1/openapi/organization/relationship' \
--header 'Authorization: openapi {access_token}' \
--data '{
"organizationId": "123456",
"userId": "12345"
} '
  • 响应body:
字段名类型说明
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": ""
}

删除用户组织关系

  • 接口地址:v1/openapi/organization/relationship

  • **请求方式: **delete

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
organizationIdsarray组织Id
userIdsarray用户Id
  • 请求示例:
curl --location 'http://localhost/v1/openapi/organization/relationship' \
--header 'Authorization: openapi {access_token}' \
--data '{
"organizationIds": ["123456"],
"userIds": ["12345"]
} '
  • 响应body:
字段名类型说明
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"success": true,
"msg": ""
}

查询组织下的用户(分页)

  • 接口地址:v1/openapi/organization/getUserPages

  • **请求方式: **post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:application/json
  • 请求body:
参数名称必填类型默认值参数解释
orderFieldstring用于排序的字段,Id含有时间信息,可以用id排序来用作创建时间的排序
orderTypestring排序类型, asc: 正序, desc: 倒序
conditionsarray查询条件,传多个时相互之间是 and 的关系
conditions.fieldNamestring查询条件的名称,必须至少传入OrganizationId或OrganizationCode作为筛选条件
conditions.fieldValuestring查询条件的值
conditions.conditionalTypenumber0查询条件的比较类型 0: 精确匹配, 1: 模糊匹配, 2: 大于, 3: 大于等于, 4:小于, 5: 小于等于, 6: 包含(in), 7: 不包含(not in), 8: 向左模糊匹配, 9:向右模糊匹配, 10: 不等于, 11: nullOrEmpty, 12: 不为空, 13: notLike
pageIndexnumber页码
pageSizenumber每页的数量
  • 请求示例:
curl --location 'http://localhost/v1/openapi/user/pageList' \
--header 'Authorization: openapi {access_token}' \
{
"orderField": "id",
"orderType": "desc",
"conditions": [
{
"fieldName": "OrganizationCode",
"fieldValue": "org1",
"conditionalType": 0
}
],
"pageIndex": 1,
"pageSize": 15
}
  • 响应body:
字段名类型说明
dataarray分页数据
data.idstring用户 ID
data.accountstring用户名
data.namestring真实姓名
data.ownerMainDepartmentstring用户主岗
data.sortnumber排序号
data.statusboolean用户启用状态
data.createdatetime用户的创建时间
pageIndexnumber当前页码
pageSizenumber页码大小
totalCountnumber总条数
successboolean请求是否成功
msgstring请求返回的消息(如果有)
  • 响应示例:
{
"data": [
{
"accountId": "123456",
"userId": "123456",
"userName": "user1",
"realName": "张三"
}
],
"pageSize": 15,
"pageIndex": 1,
"totalCount": 1,
"success": true,
"msg": null
}

聊天

向Copilot发送消息

  • 接口地址:/openapi/chat/expert

  • 请求方式:post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • 请求body:
参数名称必填类型参数解释
expertCodestringSERVICEME系统中的Copilot code(见SERVICEME系统)
contentstring提问内容
sessionIdstring会话id,代表一个聊天上下文,传null表示开启新会话,新会话的id会在接口响应中返回,从第二次问答开始需要携带上一次返回的session id继续
streamboolean是否开启流式(true:开;false:关),默认不会开启
includeThoughtboolean是否需要在返回内容里包含想法(true:包含;false:不包含)

**问答code如何获得?**请见下图:

img

  • 请求示例:
curl --location 'https://localhost/vee/openapi/chat/expert' \
--header 'Authorization: openapi {access_token}' \
--header 'Content-Type: application/json' \
--data '{
"expertCode": "CHATES",
"content": "加班申请",
"sessionId": null,
"stream": false,
"includeThought": true
}'
  • 响应body:
参数参数二级参数三级参数四级类型参数解释
dataobject响应数据
chatRecordIdstring会话记录id
sessionIdstring会话id
contentstring文本类型的回答信息
mediasobject媒体类型的回答信息数组(图片和文件等)
typestringimage:图片;file:文件
namestring名称
suggestionQuestionsarray string建议问题
thoughtsarray想法
thoughtstring想法内容
pluginNamestring插件名称
elapsedTimeobject插件耗时信息
modelfloat模型耗时
actionfloat动作耗时
totalfloat总耗时
statestring状态(success:成功)
finish_reasonstring是否结束回答,当值为stop时表示结束,回答过程中值为null
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 非流式响应示例:
{
"data": {
"chatRecordId": "4299234148041625600",
"sessionId": "4292755814873047040",
"content": "团队负责人发布工作任务,明确完成节点和验收标准等,员工与上级达成一致后方可加班。加班完毕后由员工在工时系统填写加班工时,在系统提交加班流程,备注内容需清楚列明加班任务,在工作地记录完整的上下班打卡记录,团队负责人/上级验收加班成果后,批准加班申请流程。HR确认打卡记录后,核算调休假额度。",
"medias": [
{
"type": "image",
"name": null,
"url":"http://localhost:3978/openapi/chat/media/image/FE680A9CCFB1B56E80737FB28562DC33F4A37DEF52A65F046464788B83E0BE77"
},
{
"type": "file",
"name": "答案参考文件.pdf",
"url":"https://localhost/#/share/preview?fileId=4268457334348447744&objectType=2&previewType=file&mode=login"
},
],
"suggestionQuestions": [],
"thoughts": [
{
"thought": "为了回答这个问题,我需要查询知识库中的相关信息。",
"pluginName": "Search Knowledgebase",
"elapsedTime": {
"model": 3612.4722,
"action": 689.5891,
"total": 4302.0613
},
"state": "success"
}
],
"finish_reason": "stop"
},
"success": true,
"msg": ""
}
  • 流式响应示例:
data: {"data":{"chatRecordId":"4299228743576059904","sessionId":"4292755079242457089","content":"","medias":[],"suggestionQuestions":[],"thoughts":[{"thought":"为了回答这个问题,我需要查询知识库中的相关信息。","pluginName":"Search Knowledgebase","elapsedTime":{"model": 3612.4722,"action": 689.5891,"total": 4302.0613},"state": "success"}],"finish_reason":null},"success":true,"msg":""}

data: {"data":{"chatRecordId":"4299228743576059904","sessionId":"4292755079242457089","content":"团队负责人发布工作任务,明确完成节点和验收标准等,员工与上级达成一致后方可加班。加班完毕后由员工在工时系统填写加班工时,在系统提交加班流程,备注内容需清楚列明加班任务,在工作地记录完整的上下班打卡记录,团队负责人/上级验收加班成果后,批准加班申请流程。HR确认打卡记录后,核算调休假额度。","medias":[],"suggestionQuestions":[],"thoughts":[],"finish_reason":null},"success":true,"msg":""}

data: {"data":{"chatRecordId":"4299228743576059904","sessionId":"4292755079242457089","content":"","medias":[{"type":"image","name":null,"url":"http://localhost:3978/openapi/chat/media/image/FE680A9CCFB1B56E80737FB28562DC33F4A37DEF52A65F046464788B83E0BE77"}],"suggestionQuestions":[],"thoughts":[],"finish_reason":null},"success":true,"msg":""}

data: {"data":{"chatRecordId":"4299228743576059904","sessionId":"4292755079242457089","content":"","medias":[{"type":"file","name":"答案参考文件.pdf","url":"https://localhost/#/share/preview?fileId=4268457334348447744&objectType=2&previewType=file&mode=login"}],"suggestionQuestions":[],"thoughts":[],"finish_reason":"stop"},"success":true,"msg":""}

获取对话的参考资料

  • 接口地址:/openapi/chat/record/{chatRecordId}/reference

  • 请求方式:get

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • 请求url传参:
参数名称必填类型参数解释
chatRecordIdstring从问答接口返回的chatRecordId字段里取值
  • 请求示例:
curl --location 'http://localhost/openapi/chat/record/4299234148041625600/reference' \
--header 'Authorization: openapi {access_token}'
  • 响应body:
参数名称参数二级类型参数解释
dataobject array响应数据
titlestring标题
contentstring该会话记录引用的片段内容
scorefloat相关程度(0到1,越接近1表示越相关)
urlstring链接(暂时只有文件类型的引用有链接)
typestring类型枚举:document(文档)、image(图片)、QnA、other
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:
{
"data": [
{
"title": "公司行政制度.pdf",
"content": "片段一 ......",
"score": 0.95,
"url": "https://localhost/#/share/preview?fileId=4268457334348447744&objectType=2&previewType=file&mode=login",
"type": "document"
},
{
"title": "公司行政制度.pdf",
"content": "片段二 ......",
"score": 0.81,
"url": "https://localhost/#/share/preview?fileId=4268457334348447744&objectType=2&previewType=file&mode=login",
"type": "document"
},
{
"title": "公司行政制度.pdf",
"content": "片段三 ......",
"score": 0.76,
"url": "https://localhost/#/share/preview?fileId=4268457334348447744&objectType=2&previewType=file&mode=login",
"type": "document"
}
],
"success": true,
"msg": ""
}

文件空间

单文件上传

  • 接口地址:v1/openapi/workspace/file/upload

  • 请求方式:post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:form-data
  • 请求body:
参数名称必填类型参数解释
workspacestring文件空间
filefile文件(单个)
eponymousCoverbool如果存在同名文件是否要覆盖(默认不覆盖)
  • 请求示例:
curl --location 'http://localhost/v1/openapi/workspace/file/upload' \
--header 'Authorization: openapi {access_token}' \
--form 'workspace="测试空间"' \
--form 'file=@"/C:/test.doc"' \
--form 'eponymousCover="false"'
  • 响应body:
参数名称参数二级类型参数解释
dataobject响应数据
fileIdstring文件id
fileNamestring文件名称
uploaderstring上传人
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:
{
"data": {
"fileId": "4345229404125790208",
"fileName": "test.doc",
"uploader": "test@serviceme.com"
},
"success": true,
"msg": ""
}

多文件上传

提交文件

  • 接口地址:v1/openapi/workspace/file/upload/batchSubmit

  • 请求方式:post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • Content Type:form-data
  • 请求body:
参数名称必填类型参数解释
workspacestring文件空间
filesfile文件(多个)
eponymousCoverbool如果存在同名文件是否要覆盖(默认不覆盖)
  • 请求示例:
curl --location 'http://localhost/v1/openapi/workspace/file/upload/batchSubmit' \
--header 'Authorization: openapi {access_token}' \
--form 'workspace="测试空间"' \
--form 'files=@"/C:/test1.doc"' \
--form 'files=@"/C:/test2.docx"' \
--form 'eponymousCover="false"'
  • 响应body:
参数名称参数二级类型参数解释
dataobject响应数据
stateIdstring上传的状态id,可以使用这个状态id不断轮询获得最新的上传结果
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:
{
"data": {
"stateId": "4345229404125790208"
},
"success": true,
"msg": ""
}

查询上传结果

  • 接口地址:v1/openapi/workspace/file/upload/batchSubmit/{stateId}

  • 请求方式:get

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • 请求url传参:
参数名称必填类型参数解释
stateIdstring多文件提交上传接口返回给你的那个stateId字段值
  • 请求示例:
curl --location 'http://localhost/v1/openapi/workspace/file/upload/batchSubmit/4345227891722682368' \
--header 'Authorization: openapi {access_token}'
  • 响应body:
参数名称参数二级类型参数解释
dataobject array响应数据
fileIdstring文件Id
fileNamestring文件名
statestring状态枚举:underway(排队处理中)、success(成功)、fail(失败)
uploaderstring上传人
errorMsgstring当状态为 fail 时,这里会存放导致失败的原因
finishTimestring文件处理完成的时间
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:
{
"data": [
{
"fileId": "4345227925730099200",
"fileName": "test1.doc",
"state": "success",
"uploader": "test@serviceme.com",
"errorMsg": "",
"finishTime": "2024-08-17T05:04:30.0128596Z"
},
{
"fileId": "4345227924266287104",
"fileName": "test2.docx",
"state": "success",
"uploader": "test@serviceme.com",
"errorMsg": "",
"finishTime": "2024-08-17T05:04:29.7952274Z"
}
],
"success": true,
"msg": ""
}

QnA 创建

  • 接口地址:v1/openapi/workspace/qna/create

  • 请求方式:post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • 请求body:
参数名称参数二级必填类型参数解释
workspacestring文件空间
questionsstring array问题数组,可多个
answerstring答案
metadatasobject array元数据
typeCodestring元数据类型
contentstring内容
  • 请求示例:
curl --location 'http://localhost/v1/openapi/workspace/qna/create' \
--header 'Content-Type: application/json' \
--header 'Authorization: openapi {access_token}' \
--data '{
"questions": [
"测试问题"
],
"answer": "测试答案",
"workspace": "测试空间",
"metadatas": [
{
"typeCode": "Document type",
"content": "测试元数据"
}
]
}'
  • 响应body:
参数名称类型参数解释
successboolean是否成功
msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:
{
"success": true,
"msg": ""
}

查询文件

  • 接口地址:v1/openapi/workspace/file

  • 请求方式:post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • 请求body:
参数名称必填类型参数解释
workspacestring文件空间
pageIndexnumber页码,默认第一页
pageSizenumber获取数量,默认10条
  • 请求示例:
curl --location 'http://localhost/v1/openapi/workspace/file' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"workspace": "测试空间",
"pageIndex": 1,
"pageSize": 10
}'
  • 响应body:

    参数名称参数二级参数三级类型参数解释
    dataobject array响应数据
    idstring文件id
    namestring文件名
    sizenumber文件大小,单位字节
    descriptionstring描述
    fullPathstring文件路径
    tagsobject array文件标签信息
    idstring标签id
    valuestring标签内容
    chunkingStatestring文件索引状态:waiting(等候处理中)、success(成功)、fail(失败)、underway(进行中)
    previewStatestring文件预览状态:waiting(等候处理中)、success(成功)、fail(失败)、underway(进行中)
    fileCanPreviewboolean文件是否可预览,true:可以;false:不可以
    previewUrlstring文件预览地址
    createdByRealNamestring文件创建者名称
    createdByAccountstring文件创建者账号
    createddatetime文件创建时间
    modifiedByRealNamestring文件编辑者名称
    modifiedByAccountstring文件编辑者账号
    modifieddatetime文件编辑时间
    successboolean是否成功
    msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:

{
"data": [
{
"id": "4339013367831199744",
"name": "test.docx",
"size": 15113,
"description": null,
"fullPath": "/",
"tags": [],
"chunkingState": "success",
"previewState": "success",
"fileCanPreview": true,
"previewUrl": "http://localhost.com/#/share/preview?fileId=4339013367831199744&objectType=2&previewType=file&mode=login",
"createdByRealName": "test",
"createdByAccount": "test",
"created": "2024-07-31T01:30:02.88",
"modifiedByRealName": "test",
"modifiedByAccount": "test",
"modified": "2024-07-31T01:30:02.88"
}
],
"pageSize": 10,
"pageIndex": 1,
"totalCount": 1,
"success": true,
"msg": ""
}

查询文件片段

  • 接口地址:v1/openapi/workspace/file/chunk

  • 请求方式:post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • 请求body:
参数名称必填类型参数解释
fileIdstring文件id
imageFormatstring图片格式,markdown或html,默认使用markdown输出
pageIndexnumber页码,默认第一页
pageSizenumber获取数量,默认10条
  • 请求示例:
curl --location 'http://localhost/v1/openapi/workspace/file/chunk' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"fileId": "4344174161665458176",
"imageFormat": "html",
"pageIndex": 1,
"pageSize": 10
}'
  • 响应body:

    参数名称参数二级参数三级类型参数解释
    dataobject array响应数据
    idstring片段id
    contentstring片段内容
    successboolean是否成功
    msgstring当success为false时,该处有值,会有部分错误提示
  • 响应示例:

{
"data": [
{
"id": "4339013367831199744",
"content": "test"
}
],
"pageSize": 10,
"pageIndex": 1,
"totalCount": 1,
"success": true,
"msg": ""
}

RAG

  • 接口地址:/v1/openapi/rag

  • 请求方式:post

  • 请求header:

参数名称必填类型参数解释
Authorizationstring填SERVICEME access token,值填写格式:openapi {access_token}
  • 请求body:
参数名类型必填默认值说明
querystring需要检索的问题或内容。和Keywords参数不能都为null
keywordsstring关键词,多个关键词用 | 分隔。和Query参数不能都为null。为null时会根据需要提取关键字,不为空时直接使用传入的关键字。
workspacesarray本次 RAG 将要检索的文件空间名称或Id。如果传了这个值,则会只从这几个空间里检索
ragObjectRagObject0RAG 对象类型,枚举值(详见 RagObject 枚举)。
topknumber返回结果的数量。
minSimilaritydouble0.8最低相似度,范围为 [0, 1]
metadataFilterarray要使用的元数据过滤器类型。 目前只支持default过滤器
ragModeSearchMode0RAG 模式,枚举值(详见 SearchMode 枚举)。
weightsobject各路索引的RRF权重,仅在 RagModeHybrid 时有效。若为 null 则使用默认权重。
rerankerstring如果为 null 则不使用 reranker

  • 请求示例:
curl --location 'http://localhost/v1/openapi/rag' \
--header 'Authorization: ••••••' \
--header 'Content-Type: application/json' \
--data '{
"query": "什么是人工智能?",
"keywords": "AI|机器学习",
"workspaces": ["workspace1", "workspace2"],
"ragObject": 0,
"topk": 3,
"minSimilarity": 0.8,
"metadataFilter": ["default"],
"ragMode": 1,
"weights": {
"Embedding": 0.9,
"FullText": 0.8
},
"reranker": "default"
} '
  • 响应body:
字段名类型说明
dataobject响应数据对象,包含搜索结果和搜索 ID 等信息。
data.resultsarray搜索结果列表,每个元素是一个包含片段信息的对象。
data.results[].chunkIdstring片段 ID
data.results[].fileIdstring片段所属的文件 ID
data.results[].fileNamestring片段所属的文件名
data.results[].contentstring片段内容
data.results[].metadatajson片段元数据
data.results[].urlstring片段的 URL 地址(如果有)
data.results[].searchScoredouble近似度得分
data.results[].rrfScoredoubleRRF 得分
data.results[].rerankScoredouble重排得分
data.results[].workspaceIdstring文件所属的文件空间 ID
data.results[].workspaceNamestring文件所属的文件空间名称
data.searchIdstring本次搜索操作的唯一标识
successboolean请求是否成功
msgstring请求返回的消息(如果有)

  • 响应示例:
{
"data": {
"results": [
{
"chunkId": "4422442085118906369",
"fileId": "4417076017114382336",
"fileName": "文件1.pdf",
"content": "……",
"metadata": {
"Url": "https://……",
"FileName": "文件1.pdf",
"WorkspaceName": "workspace1",
"FileId": "4417076017114382336",
"FilePath": "/",
"Created": "2025-03-03T11:23:08.803",
"Size": "1160594"
},
"url": "https://……",
"searchScore": 0.153852914388501,
"rrfScore": 0.8768274796195331,
"rerankScore": 0.0,
"workspaceId": "4417069258022846464",
"workspaceName": ""
},
{
"chunkId": "4422442085114712073",
"fileId": "4417076017114382336",
"fileName": "文件1.pdf",
"content": "……",
"metadata": {
"Url": "https://……",
"FileName": "文件1.pdf",
"WorkspaceName": "workspace1",
"FileId": "4417076017114382336",
"FilePath": "/",
"Created": "2025-03-03T11:23:08.803",
"Size": "1160594"
},
"url": "https://……",
"searchScore": 0.152822583517241,
"rrfScore": 0.8670604574184315,
"rerankScore": 0.0,
"workspaceId": "4417069258022846464",
"workspaceName": ""
},
{
"chunkId": "4422442085114712071",
"fileId": "4417076017114382336",
"fileName": "文件1.pdf",
"content": "……",
"metadata": {
"Url": "……",
"FileName": "文件1.pdf",
"WorkspaceName": "workspace1",
"FileId": "4417076017114382336",
"FilePath": "/",
"Created": "2025-03-03T11:23:08.803",
"Size": "1160594"
},
"url": "……",
"searchScore": 0.153708375384407,
"rrfScore": 0.8661891817471927,
"rerankScore": 0.0,
"workspaceId": "4417069258022846464",
"workspaceName": ""
}
],
"searchId": "4423568945336811520"
},
"success": true,
"msg": ""
}
  • 枚举类型

RagObject 枚举

枚举值枚举数字说明
Both0同时检索 Q&A 和文档内容。
Qna1仅检索 Q&A 内容。
Doc2仅检索文档内容。

SearchMode 枚举

枚举值枚举数字说明
Hybrid1混合检索模式,结合嵌入向量和全文检索。
Embedding2仅基于嵌入向量的检索模式。
FullText3仅基于全文检索的检索模式。

  • Rerank模型配置方式 以cohere-rerank-v3.5模型的配置方式为例:
INSERT INTO dbo.AI_LLM (Id,ModelName,TokenCount,Config,Enable,[Default],Display,DisplayName) VALUES
(4183721090264072898,N'rerank-v3.5',255454,N'{"RerankerName":"cohere","Uri":"https://域名/v2/rerank","Token":"bearer token"}',1,0,0,N'cohere-rerank-v3.5');

注意:如果使用的是Cohere官网的API,Token字段的值为bearer token,如果使用的是Azure AI Foundry的API,Token字段的值要去掉bearer。