在指定 sourceId 下创建或替换通讯录数据源配置,包含连接参数、字段映射、同步范围和计划。创建时 config_revision 为 0;更新时填写最新修订号,且不能改变 source_type。修改连接参数时,非 SCIM 数据源会先进行连接检查。
所需权限
| 所需权限 | 资源 | Scope | 资源服务 |
|---|
| 用户同步配置管理(管理) | directory-sync-config | admin.v1.directory-sync-config.manage | qwenwork-biz-service |
PUT /api/openapi/v1/directory-sync/sources/{sourceId}
认证与请求头
使用应用 API Key 调用。当前接口校验上方独立 Scope;读取、管理与执行权限互不包含。
| 名称 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|
| Authorization | header | string | 是 | 应用 API Key,使用 Bearer 方式传递。 | Bearer qwk_\\* |
| X-Request-Id | header | string | 否 | 可选的调用追踪标识;未传入时由服务端生成。 | req-20260831-001 |
请求参数
| 名称 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|
| sourceId | path | string · uuid | 必填 | 数据源的稳定 UUID。创建时由调用方指定,更新时使用已有数据源的标识。 | "<uuid>" |
| Idempotency-Key | header | string | 必填 | 本次写操作的幂等键。同一操作重试时复用相同键和请求内容,避免重复处理。 | "<string>" |
| config_revision | body | integer · int64 | 否 | 创建新数据源时为 0;更新已有数据源时填写最新读取的 config_revision。 最小值:1。 | 1 |
| credentials | body | OpenapifacadeDirectorySourceCredentials | 否 | 连接来源系统的应用凭据或目录密码;仅接受写入,不在响应中返回。 | {"agent_id":"<string>","app_id":"<string>","app_secret":"<string>","bind_dn":"<string>","bind_password":"<string>","client_id":"<string>","client_secret":"<string>","corp_id":"<string>","secret":"<string>","tenant_id":"<string>"} |
| credentials.agent_id | body | string | 否 | 企业微信自建应用的 Agent ID。 最多字符数:512。 | "<string>" |
| credentials.app_id | body | string | 否 | 来源系统提供的应用标识。 最多字符数:512。 | "<string>" |
| credentials.app_secret | body | string | 否 | 与 App ID 对应的应用密钥。 最多字符数:4096。 | "<string>" |
| credentials.bind_dn | body | string | 否 | 用于绑定 LDAP 目录的服务账号 DN。 最多字符数:2048。 | "<string>" |
| credentials.bind_password | body | string | 否 | LDAP 绑定账号的密码。 最多字符数:4096。 | "<string>" |
| credentials.client_id | body | string | 否 | 来源系统应用的客户端标识。 最多字符数:512。 | "<string>" |
| credentials.client_secret | body | string | 否 | 与 Client ID 对应的客户端密钥。 最多字符数:4096。 | "<string>" |
| credentials.corp_id | body | string | 否 | 企业微信的企业标识。 最多字符数:512。 | "<string>" |
| credentials.secret | body | string | 否 | 企业微信应用的 Secret。 最多字符数:4096。 | "<string>" |
| credentials.tenant_id | body | string | 否 | Microsoft Entra ID 的租户标识。 最多字符数:512。 | "<string>" |
| default_seat | body | boolean | 必填 | 是否默认向新同步的用户分配席位。 | false |
| deletion_alert_email | body | string | 否 | 接收删除告警的邮箱地址。 最多字符数:320。 | "<string>" |
| deletion_alert_enabled | body | boolean | 必填 | 是否对同步中的删除情况启用告警。 | false |
| deletion_alert_threshold | body | integer · int64 | 必填 | 触发删除告警的人数阈值。 最小值:0。 | 0 |
| deletion_policy | body | string | 必填 | 来源用户被删除或停用时的处理策略。 可选值:delete_user、deactivate_only、deactivate_and_reclaim_seat。 | "delete_user" |
| initial_scim_token | body | string | 否 | 首次配置 SCIM 接入使用的令牌,只作为输入。 最多字符数:255。 | "<string>" |
| name | body | string | 必填 | 通讯录数据源的名称。 最多字符数:255。 | "<string>" |
| schedule | body | string | 必填 | 同步计划:manual 为手动,daily 为每天,every_6_hours 为每 6 小时。 | "manual" |
| schedule_anchor_at | body | string · date-time | 否 | 计算定时同步计划时使用的起始时间。 | "2026-08-27T10:00:00Z" |
| settings | body | OpenapifacadeDirectorySourceSettings | 必填 | 数据源的连接、字段映射和同步范围配置。 | {"connection":{"client_name":"<string>","tls_enabled":false,"url":"<string>"},"department_mapping":{"external_id":"<string>","name":"<string>","order":"<string>","parent_external_id":"<string>","status":"<string>"},"mapping":{"account":"<string>","department_external_id":"<string>","email":"<string>","employee_no":"<string>","external_id":"<string>","name":"<string>","phone":"<string>","status":"<string>"},"scope":{"base_dn":"<string>","mode":"all","org_unit_external_ids":["<string>"],"org_unit_filter":"<string>","user_filter":"<string>"}} |
| settings.connection | body | OpenapifacadeDirectorySourceConnection | 必填 | 数据源的服务连接设置。 | {"client_name":"<string>","tls_enabled":false,"url":"<string>"} |
| settings.connection.client_name | body | string | 否 | SCIM 调用方的名称。 最多字符数:255。 | "<string>" |
| settings.connection.tls_enabled | body | boolean | 否 | 是否为目录连接启用 TLS 加密。 | false |
| settings.connection.url | body | string | 否 | LDAP 等来源服务的连接地址。 最多字符数:2048。 | "<string>" |
| settings.department_mapping | body | OpenapifacadeDirectorySourceDepartmentMapping | 必填 | 来源部门属性到千问办公部门字段的映射。 | {"external_id":"<string>","name":"<string>","order":"<string>","parent_external_id":"<string>","status":"<string>"} |
| settings.department_mapping.external_id | body | string | 必填 | 来源数据中用于映射外部唯一标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.name | body | string | 必填 | 来源数据中用于映射名称的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.order | body | string | 否 | 来源数据中用于映射排序值的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.parent_external_id | body | string | 否 | 来源数据中用于映射上级部门外部标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.status | body | string | 否 | 来源数据中用于映射状态的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping | body | OpenapifacadeDirectorySourceFieldMapping | 必填 | 成员属性到千问办公用户字段的映射。 | {"account":"<string>","department_external_id":"<string>","email":"<string>","employee_no":"<string>","external_id":"<string>","name":"<string>","phone":"<string>","status":"<string>"} |
| settings.mapping.account | body | string | 否 | 来源数据中用于映射账号的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.department_external_id | body | string | 否 | 来源数据中用于映射所属部门外部标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.email | body | string | 否 | 来源数据中用于映射邮箱的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.employee_no | body | string | 否 | 来源数据中用于映射工号的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.external_id | body | string | 必填 | 来源数据中用于映射外部唯一标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.name | body | string | 必填 | 来源数据中用于映射名称的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.phone | body | string | 否 | 来源数据中用于映射手机号的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.status | body | string | 否 | 来源数据中用于映射状态的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.scope | body | OpenapifacadeDirectorySourceScope | 必填 | 需要从来源目录读取的组织或搜索范围。 | {"base_dn":"<string>","mode":"all","org_unit_external_ids":["<string>"],"org_unit_filter":"<string>","user_filter":"<string>"} |
| settings.scope.base_dn | body | string | 否 | LDAP 搜索的根 DN,用于限定读取范围。 最多字符数:2048。 | "<string>" |
| settings.scope.mode | body | string | 必填 | 同步范围:all 为全部,departments 为指定部门,base_dn 为 LDAP 搜索根,administrative_units 为管理单元。 | "all" |
| settings.scope.org_unit_external_ids | body | array | null | 否 | 需要同步的来源部门或管理单元标识列表。 最多项数:200。 | ["<string>"] |
| settings.scope.org_unit_filter | body | string | 否 | 筛选来源部门的目录查询条件。 最多字符数:2048。 | "<string>" |
| settings.scope.user_filter | body | string | 否 | 筛选来源用户的目录查询条件。 最多字符数:2048。 | "<string>" |
| source_type | body | string | 必填 | 通讯录来源类型,用于选择钉钉、飞书、企业微信、AD、LDAP、Entra ID 或 SCIM 的接入方式。 可选值:dingtalk、feishu、wecom、windows_ad、openldap、entra_id、scim。 | "dingtalk" |
请求示例
将 <BASE_URL> 替换为企业部署的千问办公 API 服务地址,并填写实际参数。示例中的占位值不能直接用于请求。
curl --request PUT --url '<BASE_URL>/api/openapi/v1/directory-sync/sources/<sourceId>' --header 'Authorization: Bearer <API_KEY>' --header 'Idempotency-Key: <UNIQUE_REQUEST_ID>' --header 'Content-Type: application/json' --data '{ "config_revision": 1, "credentials": {"agent_id": "<string>","app_id": "<string>","app_secret": "<string>","bind_dn": "<string>","bind_password": "<string>","client_id": "<string>","client_secret": "<string>","corp_id": "<string>","secret": "<string>","tenant_id": "<string>" }, "default_seat": false, "deletion_alert_email": "<string>", "deletion_alert_enabled": false, "deletion_alert_threshold": 0, "deletion_policy": "delete_user", "initial_scim_token": "<string>", "name": "<string>", "schedule": "manual", "schedule_anchor_at": "2026-08-27T10:00:00Z", "settings": {"connection": {"client_name": "<string>","tls_enabled": false,"url": "<string>"},"department_mapping": {"external_id": "<string>","name": "<string>","order": "<string>","parent_external_id": "<string>","status": "<string>"},"mapping": {"account": "<string>","department_external_id": "<string>","email": "<string>","employee_no": "<string>","external_id": "<string>","name": "<string>","phone": "<string>","status": "<string>"},"scope": {"base_dn": "<string>","mode": "all","org_unit_external_ids": ["<string>"],"org_unit_filter": "<string>","user_filter": "<string>"} }, "source_type": "dingtalk"}'
响应
200 请求成功,返回当前或更新后的数据。
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|
| config_revision | integer · int64 | 是 | 数据源配置修订号,用于检查并发修改。 | 0 |
| connection_status | string | 是 | 数据源连接的当前状态。 | "<string>" |
| created_at | string · date-time | 是 | 此记录的创建时间。 | "2026-08-27T10:00:00Z" |
| created_by_email | string | 否 | 创建者的邮箱。 | "<string>" |
| created_by_name | string | 否 | 创建者的姓名。 | "<string>" |
| credential_configured | boolean | 是 | 是否已为此数据源配置连接凭据。 | false |
| default_seat | boolean | 是 | 是否默认向新同步的用户分配席位。 | false |
| deletion_alert_email | string | 否 | 接收删除告警的邮箱地址。 | "<string>" |
| deletion_alert_enabled | boolean | 是 | 是否对同步中的删除情况启用告警。 | false |
| deletion_alert_threshold | integer · int64 | 是 | 触发删除告警的人数阈值。 | 0 |
| deletion_policy | string | 是 | 来源用户被删除或停用时的处理策略。 | "<string>" |
| external_id_field | string | 是 | 当前选作外部用户唯一标识的来源字段。 | "<string>" |
| external_id_field_locked | boolean | 是 | 外部用户标识字段是否已锁定。 | false |
| id | string · uuid | 是 | 此记录的唯一标识,查询、更新或删除对应记录时使用。 | "<uuid>" |
| last_activity_at | string · date-time | 否 | 此数据源最近一次活动的时间。 | "2026-08-27T10:00:00Z" |
| last_connected_at | string · date-time | 否 | 最近一次成功连接来源系统的时间。 | "2026-08-27T10:00:00Z" |
| last_connection_error_code | string | 否 | 最近一次连接失败的错误码。 | "<string>" |
| modified_at | string · date-time | 是 | 此记录最后一次修改的时间。 | "2026-08-27T10:00:00Z" |
| name | string | 是 | 通讯录数据源的名称。 | "<string>" |
| next_run_at | string · date-time | 否 | 下一次计划执行同步的时间。 | "2026-08-27T10:00:00Z" |
| schedule | string | 是 | 同步计划:manual 为手动,daily 为每天,every_6_hours 为每 6 小时。 | "<string>" |
| schedule_anchor_at | string · date-time | 否 | 计算定时同步计划时使用的起始时间。 | "2026-08-27T10:00:00Z" |
| settings | OpenapifacadeDirectorySourceSettings | 是 | 数据源的连接、字段映射和同步范围配置。 | {"connection":{"client_name":"<string>","tls_enabled":false,"url":"<string>"},"department_mapping":{"external_id":"<string>","name":"<string>","order":"<string>","parent_external_id":"<string>","status":"<string>"},"mapping":{"account":"<string>","department_external_id":"<string>","email":"<string>","employee_no":"<string>","external_id":"<string>","name":"<string>","phone":"<string>","status":"<string>"},"scope":{"base_dn":"<string>","mode":"all","org_unit_external_ids":["<string>"],"org_unit_filter":"<string>","user_filter":"<string>"}} |
| settings.connection | OpenapifacadeDirectorySourceConnection | 是 | 数据源的服务连接设置。 | {"client_name":"<string>","tls_enabled":false,"url":"<string>"} |
| settings.connection.client_name | string | 否 | SCIM 调用方的名称。 最多字符数:255。 | "<string>" |
| settings.connection.tls_enabled | boolean | 否 | 是否为目录连接启用 TLS 加密。 | false |
| settings.connection.url | string | 否 | LDAP 等来源服务的连接地址。 最多字符数:2048。 | "<string>" |
| settings.department_mapping | OpenapifacadeDirectorySourceDepartmentMapping | 是 | 来源部门属性到千问办公部门字段的映射。 | {"external_id":"<string>","name":"<string>","order":"<string>","parent_external_id":"<string>","status":"<string>"} |
| settings.department_mapping.external_id | string | 是 | 来源数据中用于映射外部唯一标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.name | string | 是 | 来源数据中用于映射名称的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.order | string | 否 | 来源数据中用于映射排序值的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.parent_external_id | string | 否 | 来源数据中用于映射上级部门外部标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.department_mapping.status | string | 否 | 来源数据中用于映射状态的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping | OpenapifacadeDirectorySourceFieldMapping | 是 | 成员属性到千问办公用户字段的映射。 | {"account":"<string>","department_external_id":"<string>","email":"<string>","employee_no":"<string>","external_id":"<string>","name":"<string>","phone":"<string>","status":"<string>"} |
| settings.mapping.account | string | 否 | 来源数据中用于映射账号的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.department_external_id | string | 否 | 来源数据中用于映射所属部门外部标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.email | string | 否 | 来源数据中用于映射邮箱的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.employee_no | string | 否 | 来源数据中用于映射工号的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.external_id | string | 是 | 来源数据中用于映射外部唯一标识的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.name | string | 是 | 来源数据中用于映射名称的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.phone | string | 否 | 来源数据中用于映射手机号的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.mapping.status | string | 否 | 来源数据中用于映射状态的属性名称;填写字段名,不是某个成员或部门的实际值。 最多字符数:128。 | "<string>" |
| settings.scope | OpenapifacadeDirectorySourceScope | 是 | 需要从来源目录读取的组织或搜索范围。 | {"base_dn":"<string>","mode":"all","org_unit_external_ids":["<string>"],"org_unit_filter":"<string>","user_filter":"<string>"} |
| settings.scope.base_dn | string | 否 | LDAP 搜索的根 DN,用于限定读取范围。 最多字符数:2048。 | "<string>" |
| settings.scope.mode | string | 是 | 同步范围:all 为全部,departments 为指定部门,base_dn 为 LDAP 搜索根,administrative_units 为管理单元。 | "all" |
| settings.scope.org_unit_external_ids | array | null | 否 | 需要同步的来源部门或管理单元标识列表。 最多项数:200。 | ["<string>"] |
| settings.scope.org_unit_filter | string | 否 | 筛选来源部门的目录查询条件。 最多字符数:2048。 | "<string>" |
| settings.scope.user_filter | string | 否 | 筛选来源用户的目录查询条件。 最多字符数:2048。 | "<string>" |
| source_type | string | 是 | 通讯录来源类型,用于选择钉钉、飞书、企业微信、AD、LDAP、Entra ID 或 SCIM 的接入方式。 | "<string>" |
| status | string | 是 | 此记录当前所处的状态。 | "<string>" |
| updated_by_email | string | 否 | 最后修改者的邮箱。 | "<string>" |
| updated_by_name | string | 否 | 最后修改者的姓名。 | "<string>" |
{
"config_revision": 0,
"connection_status": "<string>",
"created_at": "2026-08-27T10:00:00Z",
"created_by_email": "<string>",
"created_by_name": "<string>",
"credential_configured": false,
"default_seat": false,
"deletion_alert_email": "<string>",
"deletion_alert_enabled": false,
"deletion_alert_threshold": 0,
"deletion_policy": "<string>",
"external_id_field": "<string>",
"external_id_field_locked": false,
"id": "<uuid>",
"last_activity_at": "2026-08-27T10:00:00Z",
"last_connected_at": "2026-08-27T10:00:00Z",
"last_connection_error_code": "<string>",
"modified_at": "2026-08-27T10:00:00Z",
"name": "<string>",
"next_run_at": "2026-08-27T10:00:00Z",
"schedule": "<string>",
"schedule_anchor_at": "2026-08-27T10:00:00Z",
"settings": {
"connection": {
"client_name": "<string>",
"tls_enabled": false,
"url": "<string>"
},
"department_mapping": {
"external_id": "<string>",
"name": "<string>",
"order": "<string>",
"parent_external_id": "<string>",
"status": "<string>"
},
"mapping": {
"account": "<string>",
"department_external_id": "<string>",
"email": "<string>",
"employee_no": "<string>",
"external_id": "<string>",
"name": "<string>",
"phone": "<string>",
"status": "<string>"
},
"scope": {
"base_dn": "<string>",
"mode": "all",
"org_unit_external_ids": [
"<string>"
],
"org_unit_filter": "<string>",
"user_filter": "<string>"
}
},
"source_type": "<string>",
"status": "<string>",
"updated_by_email": "<string>",
"updated_by_name": "<string>"
}
default 请求失败,返回错误码和错误详情。
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|
| code | string | 否 | 用于程序判断错误原因的稳定业务错误码。 | "<string>" |
| detail | string | 是 | 便于阅读的错误说明。 | "<string>" |
| details | OpenapiErrorDetails | 否 | 字段校验失败时的详细信息。 | {"field":"<string>","reason":"<string>","suggestion":"<string>"} |
| details.field | string | 否 | 未通过校验的请求字段。 | "<string>" |
| details.reason | string | 否 | 稳定的校验失败原因,用于判断字段为何不合法。 | "<string>" |
| details.suggestion | string | 否 | 建议采用的规范化字段值。 | "<string>" |
| error | string | 是 | 稳定的 HTTP 错误类型。 | "<string>" |
{
"code": "<string>",
"detail": "<string>",
"details": {
"field": "<string>",
"reason": "<string>",
"suggestion": "<string>"
},
"error": "<string>"
}