本文介绍如何在专属集成平台中使用连接流搭建「通讯录同步连接流」的完整逻辑,帮助实施人员完成从前置准备到上线验证的全流程配置。
IDaaS 平台支持将内部用户和部门数据同步到下游系统。同步逻辑通过连接流画布完成配置和编排,使用「专属集成平台身份同步」连接器的「通讯录同步」事件节点作为入口。IDaaS 作为主数据源,将用户和部门同步到客户的业务系统、HR 系统、OA 系统或其他第三方应用
下游系统提供标准 HTTP/HTTPS 接口,支持用户和部门的创建、更新、删除操作
适用对象#
| 角色 | 关注点 |
|---|
| 实施工程师 | 连接流搭建、节点配置、测试验证 |
| 交付经理 | 整体方案评估、配置检查清单 |
| 运维人员 | 同步异常排查、link 表数据验证 |
关键术语#
| 概念 | 说明 |
|---|
event_type | 事件类型,决定本次是创建、更新还是删除 |
external_user | 经过字段映射后的下游用户对象 |
external_dept | 经过字段映射后的下游部门对象 |
external_id | 下游对象 ID,来自 link 表 |
| 返回变量节点 | 连接流中用于向 IDaaS 回传下游对象 ID 的专用节点 |
六类事件类型#
| event_type | 含义 | 推送数据 |
|---|
ADD_USER | 创建用户 | external_user、user |
UPDATE_USER | 更新用户 | external_user、user、external_id |
DELETE_USER | 删 除用户 | external_id |
ADD_DEPARTMENT | 创建部门 | external_dept、dept |
UPDATE_DEPARTMENT | 更新部门 | external_dept、dept、external_id |
DELETE_DEPARTMENT | 删除部门 | external_id |
事件类型与变量可用性#
创建分支不能引用 external_id(下游尚无对象),删除分支只有 external_id(其他字段可能为空)。配置变量引用前请先对照此表。
| 场景 | external_user / external_dept | external_id | user / dept |
|---|
| 创建 | 有(映射后的下游对象) | 无 | 有 |
| 更新 | 有(映射后的下游对象) | 有 | 有 |
| 删除 | 通常无 | 有 | 通常无 |
前置准备: 收集下游接口信息#
在开始搭建连接流之前,必须先向客户或下游系统开发人员收集以下信息。用户接口#
| 接口 | 需要收集的信息 | 示例 |
|---|
| 创建用户 | 请求方式、URL、请求体格式、必填字段、返回结构 | POST /api/users |
| 更新用户 | 请求方式、URL、用户 ID 如何传递、请求体格式、返回结构 | PUT /api/users/{userId} |
| 删除用户 | 请求方式、URL、用户 ID 如何传递、返回结构 | DELETE /api/users/{userId} |
| 查询用户(可选) | 请求方式、URL、支持的查询条件 | GET /api/users?mobile={mobile} |
部门接口#
| 接口 | 需要收集的信息 | 示 例 |
|---|
| 创建部门 | 请求方式、URL、请求体格式、父部门 ID 如何传递、返回结构 | POST /api/departments |
| 更新部门 | 请求方式、URL、部门 ID 如何传递、请求体格式、返回结构 | PUT /api/departments/{deptId} |
| 删除部门 | 请求方式、URL、部门 ID 如何传递、返回结构 | DELETE /api/departments/{deptId} |
鉴权信息#
| 鉴权方式 | 需要收集的信息 |
|---|
| API Key | Key 名称、Key 值、传递方式(Header / Query) |
| Basic Auth | 用户名、密码 |
| OAuth2 | Token 获取地址、Client ID、Client Secret、Scope |
| 自定义 Token | Token 获取接口、Token 传递方式 |
返回结构示例#
{
"code": 0,
"message": "success",
"data": {
"userId": "U001",
"username": "zhangsan"
}
}
字段映射关系配置#
整理 IDaaS 字段与下游字段的对应关系,在画布顶部导航栏中的「映射管理」弹窗中进行配置
操作步骤#
搭建逻辑说明#
1
步骤 1:配置 Trigger 事件节点
2.
选择 Trigger 类型为「专属集成平台身份同步」
Trigger 节点会输出以下变量,供后续节点引用:| 变量路径 | 说明 | 使用场景 |
|---|
event_type | 事件类型字符串 | 条件分支判断 |
external_user | 映射后的下游用户对象 | 用户创建/更新请求体 |
external_dept | 映射后的下游部门对象 | 部门创建/更新请求体 |
external_id | 下游对象 ID | 更新/删除时定位下游对象 |
user | IDaaS 本地用户对象 | 需要引用原始用户数据时 |
dept | IDaaS 本地部门对象 | 需要引用原始部门数据时 |
提示:external_user 和 external_dept 的内部字段名由推送连接器中的字段映射配置决定,而不是固定的。
2
步骤 2:配置 Switch 节点
在 Trigger 节点之后添加一个Switch节点,配置六个条件。
| 分支序号 | 分支名称 | 条件表达式 |
|---|
| 1 | 部门创建 | event_type == "ADD_DEPARTMENT" |
| 2 | 部门更新 | event_type == "UPDATE_DEPARTMENT" |
| 3 | 部门删除 | event_type == "DELETE_DEPARTMENT" |
| 4 | 用户创建 | event_type == "ADD_USER" |
| 5 | 用户更新 | event_type == "UPDATE_USER" |
| 6 | 用户删除 | event_type == "DELETE_USER" |
注意:event_type 的值是字符串,条件比较时注意引号。建议按上表顺序排列分支,与同步执行顺序保持一致(部门先于用户)。
3
步骤 3:搭建部门创建分支
分支入口条件:
event_type == "ADD_DEPARTMENT"| 配置项 | 值 | 说明 |
|---|
| 请求方式 | POST | |
| 请求地址 | 下游创建部门接口 URL | 替换为实际地址 |
| Content-Type | application/json | |
| 鉴权 | 根据实际鉴权方式配置 | |
请求体引用 Trigger 输出的 external_dept 变量。可以直接引用整个对象,或手动构造:| 方式 | 适用场景 | 请求体示例 |
|---|
| 直接引用 | 字段映射已完全匹配下游接口 | {{trigger.external_dept}} |
| 手动构造 | 下游接口字段名与映射后不一致 | 见下方示例 |
手动构造请求体示例:{"deptName": "{{trigger.external_dept.name}}", "parentId": "{{trigger.external_dept.parentId}}", "deptCode": "{{trigger.external_dept.code}}"}重要:具体变量路径取决于推送连接器中配置的部门字段映射。请先在推送连接器配置中确认映射后的字段名称,再在此处引用。
在 HTTP 节点之后,添加一个「返回变量」节点,将下游返回的部门 ID 传回 IDaaS。IDaaS 期望通过「返回变量」节点接收以下结构:| 变量名 | 类型 | 必填 | 配置值 | 说明 |
|---|
id | string | 是 | 从 HTTP 响应中提取下游部门 ID | 如 {{http_node.response.body.data.deptId}} |
existed | boolean | 否 | false | 默认 false,如下游返回已存在则设为 true |
重要:id 的提取路径必须与下游接口实际响应结构一致。这是整个连接流中最关键的配置,如果 id 提取不到或提取错误,IDaaS 无法正确写入 link 表,后续更新和删除都会失败。
4
步骤 4:搭建部门更新分支
分支入口条件:
event_type == "UPDATE_DEPARTMENT"| 配置项 | 值 | 说明 |
|---|
| 请求方式 | PUT 或 PATCH | 根据下游接口要求 |
| 请求地址 | 下游更新部门接口 URL | URL 中引用 {{trigger.external_id}} |
| Content-Type | application/json | |
请求体示例:{"deptName": "{{trigger.external_dept.name}}", "order": "{{trigger.external_dept.sortOrder}}"}注意:更新接口通常不传 parentId,因为部门层级变更需要特殊处理。请根据下游接口文档确认。
| 变量名 | 配置值 | 说明 |
|---|
id | {{trigger.external_id}} | 更新场景直接使用 Trigger 传入的 external_id |
existed | true | 更新场景固定为 true |
5
步骤 5:搭建部门删除分支
分支入口条件:
event_type == "DELETE_DEPARTMENT"| 配置项 | 值 |
|---|
| 请求方式 | DELETE |
| 请求地址 | 下游删除部门接口 URL,URL 中引用 {{trigger.external_id}} |
部分下游系统的删除接口通过 Query 参数或 Body 传递 ID,根据实际接口调整。| 变量名 | 配置值 | 说明 |
|---|
id | {{trigger.external_id}} | |
existed | false | |
建议:如果下游返回「部门不存在」(如 404),通常应视为删除成功。可在 HTTP 节点与「返回变量」节点之间增加条件判断,将 404 也引导到正常的「返回变量」节点。
6
步骤 6:搭建用户创建分支
分支入口条件:
event_type == "ADD_USER"| 配置项 | 值 |
|---|
| 请求方式 | POST |
| 请求地址 | 下游创建用户接口 URL |
| Content-Type | application/json |
请求体引用 external_user。可以直接引用整个对象 {{trigger.external_user}},或手动构造请求体。手动构造请求体示例:{"account": "{{trigger.external_user.username}}", "name": "{{trigger.external_user.displayName}}", "phone": "{{trigger.external_user.mobile}}", "departmentId": "{{trigger.external_user.deptId}}"}提示:departmentId 需要的是下游部门 ID,这个值已经在 IDaaS 内部通过 link 表完成转换。如果字段映射中配置了部门字段,external_user 中已包含转换后的下游部门 ID。
| 变量名 | 配置值 | 说明 |
|---|
id | 从 HTTP 响应中提取下游用户 ID | 如 {{http_node.response.body.data.userId}} |
existed | false | 默认 false |
重要:id 字段路径必须与下游实际响应结构一致。创建成功后如果 id 为空,IDaaS 无法写入 link 表。
7
步骤 7:搭建用户更新分支
分支入口条件:
event_type == "UPDATE_USER"| 配置项 | 值 |
|---|
| 请求方式 | PUT 或 PATCH |
| 请求地址 | 下游更新用户接口 URL,URL 中引用 {{trigger.external_id}} |
| Content-Type | application/json |
请求体示例:{"name": "{{trigger.external_user.displayName}}", "phone": "{{trigger.external_user.mobile}}", "email": "{{trigger.external_user.email}}"}注意:更新请求体通常不包含 account(用户名),因为大多数系统不允许修改账号名。请根据下游接口文档确认哪些字段允许更新。
| 变量名 | 配置值 | 说明 |
|---|
id | {{trigger.external_id}} | 直接使用 Trigger 传入的 external_id |
existed | true | 更新场景固定为 true |
8
步骤 8:搭建用户删除分支
分支入口条件:
event_type == "DELETE_USER"| 配置项 | 值 |
|---|
| 请求方式 | DELETE |
| 请求地址 | 下游删除用户接口 URL,URL 中引用 {{trigger.external_id}} |
| 变量名 | 配置值 | 说明 |
|---|
id | {{trigger.external_id}} | |
existed | false | |
注意:删除事件中只有 external_id,没有用户的姓名、手机号等信息。如果下游删除接口需要这些额外信息,需要在删除前增加一个 HTTP 查询节点获取。建议将「用户不存在」(404)也视为删除成功。
返回变量节点配置详解#
「返回变量」节点是连接流向 IDaaS 回传同步结果的唯一方式。每个分支的末尾都必须添加「返回变量」节点,否则 IDaaS 无法维护 link 表。
返回结构要求#
IDaaS 期望通过「返回变量」节点接收以下变量:| 变量名 | 类型 | 必填 | 说明 |
|---|
id | string | 创建/更新时必填 | 下游系统分配或返回的对象 ID |
existed | boolean | 否 | true 表示下游对象已存在(创建时遇到去重),false 表示正常创建/删除 |
不同场景的配置方式#
创建场景需要从 HTTP 响应中
提取下游返回的对象 ID:
| 变量名 | 配置值 | 说明 |
|---|
id | {{http_node.response.body.data.userId}} | 路径根据下游实际响应结构调整 |
existed | false | 正常创建设为 false |
如果下游返回「已存在」,需要在 HTTP 节点与「返回变量」节点之间增加条件分支:| 条件 | id 配置值 | existed 配置值 |
|---|
下游返回成功(如 code == 0) | 响应中的对象 ID | false |
下游返回已存在(如 code == 40901) | 响应中的已有对象 ID | true |
| 其他错误 | 不配置,进入 失败分支 | — |
常见下游响应的 id 提取路径#
| 下游响应结构 | id 配置值 |
|---|
{"code": 0, "data": {"userId": "U001"}} | {{http_node.response.body.data.userId}} |
{"success": true, "id": "U001"} | {{http_node.response.body.id}} |
{"code": 0, "result": [{"id": "U001"}]} | {{http_node.response.body.result[0].id}} |
{"code": 0, "data": {"id": "D001"}} | {{http_node.response.body.data.id}} |
返回变量配置常见错误#
返回变量配置错误是同步失败最常见的原因。请逐项检查。
| 错误 | 后果 | 排查方法 |
|---|
id 字段路径写错 | link 表写入空值,后续更新/删除全部失败 | 检查 HTTP 节点的实际响应结构 |
| 忘记添加「返回变量」节点 | IDaaS 收不到下游 ID,link 表无法写入 | 检查每个分支末尾是否有「返回变量」节点 |
existed 始终为 false | 下游已存在的对象在 link 表中被重复记录 | 检查是否需要处理已存在场景 |
| 引用了错误的节点变量 | 提取到空值或错误值 | 确认变量路径指向正确的 HTTP 响应节点 |
| 删除分支没有添加「返回变量」节点 | IDaaS 无法确认删除成功,link 表未清除 | 每个分支都必须有「返回变量」节点 |
验证与测试#
测试顺序#
1
第一步:测试部门创建
触发部门创建事件,验证:
| 检查项 | 预期结果 | 验证方式 |
|---|
| 下 游部门创建成功 | 在下游系统中可看到新部门 | 登录下游系统查看 |
| link 表写入正确 | iam_link_org 中有对应记录 | 数据库查询或产品界面 |
| 下游部门 ID 正确 | iam_link_org.external_id 与下游一致 | 对比下游部门 ID |
| 父部门层级正确 | 子部门 parentId 指向正确的下游父部门 | 在下游系统验证层级 |
2
第二步:测试部门更新
修改 IDaaS 部门名称,触发更新事件。确认下游部门名称已更新,link 表 profile 和 sync_batch_no 已刷新。
3
第三步:测试用户创建
触发用户创建事件,验证:
| 检查项 | 预期结果 | 验证方式 |
|---|
| 下游用户创建成功 | 在下游系统中可看到新用户 | 登录下游系统查看 |
| link 表写入正确 | iam_link_user 中有对应记录 | 数据库查询或产品界面 |
| 下游用户 ID 正确 | iam_link_user.external_id 与下游一致 | 对比下游用户 ID |
| 所属部门正确 | 下游用户的部门 ID 指向正确的下游部门 | 在下游系统验证 |
4
第四步:测试用户更新
修改用户属性,触发更新事件。确认下游属性已更新,未修改的字段未被清空。
5
第五步:测试用户删除
删除 IDaaS 用户,确认下游用户已删除,iam_link_user 中对应记录已清除。
6
第六步:测试部门删除
删除 IDaaS 部门(先确保部门下无用户),确认下游部门已删除,iam_link_org 中对应记录已清除。
7
第七步:全量同步测试
1.
在 IDaaS 中准备包含多级部门和多个用户的组织架构
常见问题#
调试技巧#
1.
先用 Postman 测下游接口:在配置连接流之前,手动调用一次下游接口确认接口地址、鉴权、请求体和响应结构
2.
逐步测试:配置一个分支就测试一个,不要一次配置完所有分支
3.
查看 Trigger 实际输出:用测试数据触发一次同步事件,在执行日志中查看 Trigger 实际输出,以此为准配置变量引用
4.
脚本节点打印变量:在 HTTP 节点前插入脚本节点打印变量值,确认变量是否有值
高级配置#
上线检查清单#
基础配置#
连接流配置#
返回变量节点配置#
测试验证#