Confluence Server 连接器

Genly 连接 Confluence Server 中的页面、博客文章、附件、评论、空间、标签、点赞及相关元数据,对页面、博客文章和附件进行解析与索引,并在检索过程中继承原系统权限。

当前支持
Confluence Server 6.5
同步机制
完整抓取 + Webhook 增量
访问边界
继承原系统权限
数据位置
客户私有环境

一、主要功能

  • Genly 会抓取 Confluence 页面(包括其父/子层级结构)、博客文章、标签、附件、评论等数据。
  • Genly 会遵循所有用户访问权限,确保用户只能看到其有权访问的文档搜索结果。当用户点击搜索结果时,会跳转到 Confluence Web 应用程序,由该应用程序执行权限控制。
  • 连接器采用“完整抓取 + Webhook 增量监听 + 权限补偿扫描”的混合同步机制。对于页面、博客、附件、标签、点赞、内容权限、空间权限以及用户/组关系等变更,系统可以在事件触发后进行近实时采集和异步处理;其中内容类变更会继续进入解析和索引流程,最终搜索可见时间取决于解析、入库和索引任务完成情况。评论新增或编辑会作为页面/博客的附属互动数据同步,可在对应内容详情中查看,但评论正文当前不作为独立全文索引对象。已删除且从未被系统同步过的内容无法再从 Confluence 补抓,只能基于历史快照进行清理。
  • 所有数据都存储在客户的私有环境中,确保没有数据离开客户环境。
  • Genly 使用 Atlassian 的标准 Confluence REST API 来获取所有数据。
  • Confluence 6.5 版本没有原生的 Webhook 能力,为了实现近实时的数据同步,Genly 提供自研的 Confluence 插件,通过监听 Confluence 事件来实现 Webhook 能力。

二、支持的版本

  • 支持 Confluence Server 6.5 版本。您可以联系您的 Confluence 管理员来获得版本信息。
  • Genly 将计划支持 Confluence DataCenter/Cloud 版本。

三、抓取内容与索引范围

Genly Confluence 连接器会抓取三类不同的数据:内容、身份和活动,以确保索引快速、全面且安全可管理。

3.1 内容

  • 抓取页面、博客文章、空间、附件、页面评论、标签、点赞数等内容,索引页面、博客文章、附件等内容。
  • 页面保留原始层级结构,博客文章以年月生成层级结构,两者均通过标准内容列表 API 抓取。
  • 连接器配置的账号信息可以访问到特定的受限页面,则可以为受限页面建立索引,同时在检索结果中仍会执行权限控制。

3.2 活动数据和 Webhook

Genly 会处理创建、更新、删除、移动以及权限变更等事件,以实现快速更新。下面是 Genly 自研插件支持的变更事件。

3.2.1 内容类事件

内容类 Webhook 事件
事件 IDConfluence 事件类说明
confluence_page_createdPageCreateEvent页面创建
confluence_page_updatedPageUpdateEvent页面更新
confluence_page_trashedPageTrashedEvent页面移入回收站
confluence_blogpost_createdBlogPostCreateEvent博客创建
confluence_blogpost_updatedBlogPostUpdateEvent博客更新
confluence_blogpost_trashedBlogPostTrashedEvent博客移入回收站
confluence_attachment_createdAttachmentCreateEvent附件创建
confluence_attachment_updatedAttachmentUpdateEvent附件更新
confluence_attachment_removedAttachmentRemoveEvent附件删除
confluence_comment_createdCommentCreateEvent评论创建
confluence_comment_updatedCommentUpdateEvent评论更新
confluence_comment_removedCommentRemoveEvent评论删除
confluence_like_createdLikeCreatedEvent点赞创建
confluence_like_removedLikeRemovedEvent点赞取消

3.2.2 空间、标签与权限事件

空间、标签与权限 Webhook 事件
事件 IDConfluence 事件类说明
confluence_space_createdSpaceCreateEvent空间创建
confluence_space_removedSpaceRemoveEvent空间删除
confluence_label_addedLabelAddEvent标签添加
confluence_label_removedLabelRemoveEvent标签移除
confluence_content_permission_changedContentPermissionEvent内容权限变化
confluence_space_permission_savedSpacePermissionSaveEvent空间权限保存
confluence_space_permission_removedSpacePermissionRemoveEvent空间权限移除

3.2.3 用户、组与成员关系事件

用户、组与成员关系 Webhook 事件
事件 ID事件类说明
confluence_user_createdUserCreateEvent / UserCreatedEvent用户创建
confluence_user_removedUserRemoveEvent用户删除
confluence_user_deactivatedUserDeactivateEvent用户禁用
confluence_user_reactivatedUserReactivateEvent用户恢复启用
confluence_user_profile_picture_updatedUserProfilePictureUpdateEvent用户头像更新
confluence_user_renamedDirectoryUserRenamedEvent用户重命名
confluence_user_signupUserSignupEvent用户注册
crowd_user_email_changedUserEmailChangedEventCrowd 用户邮箱变更
crowd_user_editedUserEditedEventCrowd 用户信息编辑
confluence_group_createdGroupCreateEvent / GroupCreatedEvent组创建
confluence_group_removedGroupRemoveEvent / GroupDeletedEvent组删除
crowd_group_updatedGroupUpdatedEventCrowd 组更新
crowd_group_membership_createdGroupMembershipCreatedEvent组成员新增
crowd_group_membership_deletedGroupMembershipDeletedEvent组成员删除

3.3 身份数据

  • 抓取 Confluence 中所有用户信息,包括用户名、账户名、邮箱等。
  • 针对可能存在的 Confluence 版本太低,Confluence 中的用户信息和身份提供商数据不一致的情况,Genly 管理端还提供了人员信息手动匹配的能力。

四、已知限制

  • 评论和点赞数据没有被索引,但是可以通过搜索被评论页面、博客查找相关评论。
  • 已删除的页面、博客、附件、空间等无法被抓取。
  • 权限被收回后,连接器账号可能无法继续读取受限页面、博客或附件。此时系统可以通过权限事件刷新可见范围,但如果需要重新抓取正文或附件本体,可能会因为账号无权限而失败。
  • 对于“删除前发生、但 Webhook 没有送达或连接器任务未运行”的变更,系统只能依赖下一次完整抓取或历史快照发现差异;如果对象在完整抓取前已经被删除,就无法再抓取其内容。
  • 用户、组或外部目录对象被删除后,详情接口可能已经查不到完整信息。组织同步会尽量使用事件里的用户名、组名以及历史组织数据做删除或解绑,但无法补齐已消失对象的完整资料。

五、更新频率

连接器数据更新频率
数据类别抓取频率Webhook 增量能力说明
身份数据每 12-24 小时一次支持包括用户、组、成员关系。Webhook 可处理用户/组新增删除、成员加入移除;计划抓取用于校准外部目录差异、漏投事件和历史基线。若组织变更频繁或权限依赖强,建议每 12 小时;一般场景每天一次即可。
内容数据(页面/博客文章/附件/评论/点赞/标签)每 24 小时一次(根据实际数据量调整)支持包括页面、博客、附件、评论、点赞、标签等。页面、博客、附件的新增、编辑、删除可通过 Webhook 近实时触发;评论、点赞、标签作为页面/博客附属数据,在父内容重拉时刷新。完整抓取用于发现 Webhook 漏投、补齐元数据、校准删除状态。
空间权限不单独做空间权限完整抓取支持触发空间回填当前系统没有“仅按空间权限维度”的定时完整抓取任务。空间权限变化会通过 Webhook 触发该空间下内容的权限回填,最终仍落到页面/博客等内容级可见范围上;完成时间取决于空间下页面、博客、附件数量以及 Confluence API 响应速度。
内容权限随文档完整抓取建立快照;权限校准任务每 1-3 小时处理队列支持页面/博客级权限变化可通过 Webhook 触发单篇内容刷新。权限校准任务不是重新枚举所有空间权限或所有内容权限,而是消费文档采集写入的页面级权限扫描队列,对队列中的内容重新拉取权限快照并同步。

表中的“Webhook 增量”指的是事件触发后系统开始采集和处理变更,不等于用户立刻能在搜索中看到最终结果。对于内容类变更,系统还需要完成文件上传、元数据入库、解析和索引流程;最终可搜索时间取决于当前队列积压、文件大小、解析耗时和索引服务处理速度。

六、抓取的工作方式

抓取器遵循传统抓取策略,包括利用 API 以及以下方式获取和更新数据:

  • 身份抓取:更新和添加人员数据,包括用户、账号和邮箱信息。
  • Webhook:是应用程序发送的消息,用于实时通知 Genly 发生变更;随后 Genly 会启动抓取,或在下一次抓取中获取该变更。
  • 内容抓取:全量抓取应用程序的整个已定义范围。

七、所需权限

设置此连接器的用户必须具有管理员权限。所需 Confluence 账号,需要有同步内容的访问权限。

八、设置说明

执行以下步骤,将 Confluence Server 连接到 Genly。

8.1 为 Genly 创建服务账户

  1. 以管理员身份登录 Confluence。
  2. 前往用户管理。
  3. 使用任意名称、邮箱和密码创建用户。
  4. 点击编辑组。
  5. 将服务账户添加到 confluence-administrators。

8.2 新建 Confluence 数据源

  1. 在 Genly 管理端数据源中新建 Confluence 数据源,设置页面中输入服务器的基础 URL。例如,https://confluence.mydomain.com。
  2. 在用户名和密码中填写 8.1 创建的账号和密码。
  3. 点击测试连接,测试 Confluence 实例的连通性。
  4. 点击保存,创建 Confluence 数据源。

8.3 新建 Confluence 身份连接器

  1. 进入 Genly 管理端人员组织,点击其他应用同步。
  2. 点击新增人员同步,选择 Confluence,在弹窗中选择 Confluence 数据源实例。
  3. 点击创建,完成身份连接器的创建。

8.4 安装 Confluence 插件与新建 Confluence 连接器

  1. 进入 Genly 管理端连接器,点击添加连接器。
  2. 选择 Confluence,点击下一步,选择 Confluence 数据源实例。
  3. 在确认连接步骤中,点击【插件】,下载 Confluence 插件。
  1. 在 Confluence 管理后台进入插件管理页面,上传并安装 Confluence 插件。
  2. 确认 Atlassian WebHooks Genly Plugin 已安装并启用。
  3. 在 Genly 管理端点击测试连接,点击下一步,选择 Confluence 中特定的空间或者全部空间进行同步,勾选下方需要同步的内容,如需同步标签,请先在知识标签中创建扁平结构的标签体系。
  4. 点击下一步,完成 Confluence 连接器的创建。

九、Confluence API 端点

Confluence REST API 端点
用途路径方法
校验 Confluence 连接和认证是否可用/rest/api/user/currentGET
获取空间列表,用于完整抓取时枚举同步范围/rest/api/space?start={start}&limit={limit}GET
获取指定空间下的页面列表/rest/api/space/{spaceKey}/content/page?start={start}&limit={limit}&expand=body.storage,body.export_view,version,history,space,ancestorsGET
获取指定空间下的博客文章列表/rest/api/space/{spaceKey}/content/blogpost?start={start}&limit={limit}&expand=body.storage,body.export_view,version,history,space,ancestorsGET
获取页面/博客详情、正文、版本、历史、空间和祖先节点/rest/api/content/{id}?expand=body.storage,body.export_view,version,history,space,ancestorsGET
获取内容操作限制,用于解析页面/博客级查看和编辑权限/rest/api/content/{id}/restriction/byOperationGET
获取内容附件列表,用于附件采集和附件事件富化/rest/api/content/{id}/child/attachment?start={start}&limit={limit}&expand=version,history,container,metadata,extensionsGET
下载附件二进制内容{downloadUrl},通常来自附件 _links.download,例如 /download/attachments/...GET
获取内容标签列表/rest/api/content/{id}/label?start={start}&limit={limit}GET
获取内容评论列表和评论正文/rest/api/content/{id}/child/comment?start={start}&limit={limit}&expand=body.storage,versionGET
获取内容点赞列表/rest/likes/1.0/content/{id}/likesGET
使用 CQL 查询全量用户,主用于组织全量同步和匿名权限兜底/rest/api/search?cql=type=user&start={start}&limit={limit}GET
获取单个用户信息,用于 username 到 userKey 的换算/rest/api/user?username={username}GET
获取用户信息,组织流中也会按 key 或 username 查询用户基础资料/rest/api/user?key={userKey} 或 /rest/api/user?username={username}GET
获取用户所属组,用于组织流中补齐用户最新组关系/rest/api/user/memberof?key={userKey} 或 /rest/api/user/memberof?username={username}GET
获取用户邮箱和头像等移动端档案信息/rest/mobile/1.0/profile/{username}GET
获取用户组列表,用于组织全量同步和用户兜底枚举/rest/api/group?start={start}&limit={limit}GET
获取指定用户组成员/rest/api/group/{groupName}/member?start={start}&limit={limit}GET
获取空间权限集合,用于将空间权限展开为内容可见用户/rpc/json-rpc/confluenceservice-v2?os_authType=basic,body method 为 getSpacePermissionSetsPOST
查询当前已有 Webhook 注册/rest/webhooks/1.0/webhookGET
注册 Webhook 监听器/rest/webhooks/1.0/webhookPOST
删除指定 Webhook 监听器/rest/webhooks/1.0/webhook/{id}DELETE