From d41a47b842c819956a814ec56132a0cb488ec95e Mon Sep 17 00:00:00 2001 From: shichunming Date: Fri, 17 Oct 2025 16:16:35 +0800 Subject: [PATCH 1/3] feat:add DocReferenceSynced --- type_docx.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/type_docx.go b/type_docx.go index c19a0fd9..bc65f09f 100644 --- a/type_docx.go +++ b/type_docx.go @@ -26,17 +26,22 @@ type DocxDocument struct { Title string `json:"title,omitempty"` // 文档标题,只支持返回纯文本。 } +type DocReferenceSynced struct { + SourceBlockID string `json:"source_block_id"` + SourceDocumentID string `json:"source_document_id"` +} + // DocxBlock ... // // 在一篇文档中,有多个不同类型的段落,这些段落被定义为块(Block)。块是文档中的最小构建单元,是内容的结构化组成元素,有着明确的含义。块有多种形态,可以是一段文字、一张电子表格、一张图片或一个多维表格等。每个块都有唯一的 block_id 作为标识。 // // docs: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/data-structure/block type DocxBlock struct { - BlockID string `json:"block_id,omitempty"` // 块的唯一标识。创建块时会自动生成 - ParentID string `json:"parent_id,omitempty"` // 块的父块 ID。除了根节点 Page 块外,其余块均有父块 - Children []string `json:"children,omitempty"` // 块的子块 ID 列表 - BlockType DocxBlockType `json:"block_type,omitempty"` // 块的枚举值,表示块的类型 - + BlockID string `json:"block_id,omitempty"` // 块的唯一标识。创建块时会自动生成 + ParentID string `json:"parent_id,omitempty"` // 块的父块 ID。除了根节点 Page 块外,其余块均有父块 + Children []string `json:"children,omitempty"` // 块的子块 ID 列表 + BlockType DocxBlockType `json:"block_type,omitempty"` // 块的枚举值,表示块的类型 + ReferenceSynced DocReferenceSynced `json:"reference_synced,omitempty"` //同步块 // BlockData 只能是以下其中一种,并且需与 BlockType 相对应: Page *DocxBlockText `json:"page,omitempty"` // 文档 Block, 1 DocxBlockTypePage Text *DocxBlockText `json:"text,omitempty"` // 文本 Block, 2 DocxBlockTypeText From fac2bf10d1e2f54c37c43437abeb4c930e8235ef Mon Sep 17 00:00:00 2001 From: shichunming Date: Fri, 17 Oct 2025 17:44:32 +0800 Subject: [PATCH 2/3] feat:add DocReferenceSynced --- type_docx.go | 108 +++++++++++++++++++++++++++------------------------ 1 file changed, 58 insertions(+), 50 deletions(-) diff --git a/type_docx.go b/type_docx.go index bc65f09f..add1a986 100644 --- a/type_docx.go +++ b/type_docx.go @@ -26,67 +26,73 @@ type DocxDocument struct { Title string `json:"title,omitempty"` // 文档标题,只支持返回纯文本。 } -type DocReferenceSynced struct { +type DocxReferenceSynced struct { SourceBlockID string `json:"source_block_id"` SourceDocumentID string `json:"source_document_id"` } +type DocxSourceSynced struct { + Align DocxAlign `json:"align,omitempty"` // 对齐方式, 可选值有: `1`:居左排版, `2`:居中排版, `3`:居右排版 + Elements []*DocxTextElement `json:"elements,omitempty"` // 文本元素 +} + // DocxBlock ... // // 在一篇文档中,有多个不同类型的段落,这些段落被定义为块(Block)。块是文档中的最小构建单元,是内容的结构化组成元素,有着明确的含义。块有多种形态,可以是一段文字、一张电子表格、一张图片或一个多维表格等。每个块都有唯一的 block_id 作为标识。 // // docs: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/data-structure/block type DocxBlock struct { - BlockID string `json:"block_id,omitempty"` // 块的唯一标识。创建块时会自动生成 - ParentID string `json:"parent_id,omitempty"` // 块的父块 ID。除了根节点 Page 块外,其余块均有父块 - Children []string `json:"children,omitempty"` // 块的子块 ID 列表 - BlockType DocxBlockType `json:"block_type,omitempty"` // 块的枚举值,表示块的类型 - ReferenceSynced DocReferenceSynced `json:"reference_synced,omitempty"` //同步块 + BlockID string `json:"block_id,omitempty"` // 块的唯一标识。创建块时会自动生成 + ParentID string `json:"parent_id,omitempty"` // 块的父块 ID。除了根节点 Page 块外,其余块均有父块 + Children []string `json:"children,omitempty"` // 块的子块 ID 列表 + BlockType DocxBlockType `json:"block_type,omitempty"` // 块的枚举值,表示块的类型 // BlockData 只能是以下其中一种,并且需与 BlockType 相对应: - Page *DocxBlockText `json:"page,omitempty"` // 文档 Block, 1 DocxBlockTypePage - Text *DocxBlockText `json:"text,omitempty"` // 文本 Block, 2 DocxBlockTypeText - Heading1 *DocxBlockText `json:"heading1,omitempty"` // 一级标题 Block, 3 DocxBlockTypeHeading1 - Heading2 *DocxBlockText `json:"heading2,omitempty"` // 二级标题 Block, 4 DocxBlockTypeHeading2 - Heading3 *DocxBlockText `json:"heading3,omitempty"` // 三级标题 Block, 5 DocxBlockTypeHeading3 - Heading4 *DocxBlockText `json:"heading4,omitempty"` // 四级标题 Block, 6 DocxBlockTypeHeading4 - Heading5 *DocxBlockText `json:"heading5,omitempty"` // 五级标题 Block, 7 DocxBlockTypeHeading5 - Heading6 *DocxBlockText `json:"heading6,omitempty"` // 六级标题 Block, 8 DocxBlockTypeHeading6 - Heading7 *DocxBlockText `json:"heading7,omitempty"` // 七级标题 Block, 9 DocxBlockTypeHeading7 - Heading8 *DocxBlockText `json:"heading8,omitempty"` // 八级标题 Block, 10 DocxBlockTypeHeading8 - Heading9 *DocxBlockText `json:"heading9,omitempty"` // 九级标题 Block, 11 DocxBlockTypeHeading9 - Bullet *DocxBlockText `json:"bullet,omitempty"` // 无序列表 Block, 12 DocxBlockTypeBullet - Ordered *DocxBlockText `json:"ordered,omitempty"` // 有序列表 Block, 13 DocxBlockTypeOrdered - Code *DocxBlockText `json:"code,omitempty"` // 代码块 Block, 14 DocxBlockTypeCode - Quote *DocxBlockText `json:"quote,omitempty"` // 引用 Block, 15 DocxBlockTypeQuote - Equation *DocxBlockText `json:"equation,omitempty"` // 公式 Block, 16 DocxBlockTypeEquation - Todo *DocxBlockText `json:"todo,omitempty"` // 任务 Block, 17 DocxBlockTypeTodo - Bitable *DocxBlockBitable `json:"bitable,omitempty"` // 多维表格 Block, 18 DocxBlockTypeBitable - Callout *DocxBlockCallout `json:"callout,omitempty"` // 高亮块 Block, 19 DocxBlockTypeCallout - ChatCard *DocxBlockChatCard `json:"chat_card,omitempty"` // 群聊卡片 Block, 20 DocxBlockTypeChatCard - Diagram *DocxBlockDiagram `json:"diagram,omitempty"` // 流程图/UML Block, 21 DocxBlockTypeDiagram - Divider DocxBlockDivider `json:"divider,omitempty"` // 分割线 Block, 22 DocxBlockTypeDivider - File *DocxBlockFile `json:"file,omitempty"` // 文件 Block, 23 DocxBlockTypeFile - Grid *DocxBlockGrid `json:"grid,omitempty"` // 分栏 Block, 24 DocxBlockTypeGrid - GridColumn *DocxBlockGridColumn `json:"grid_column,omitempty"` // 分栏列 Block, 25 DocxBlockTypeGridColumn - Iframe *DocxBlockIframe `json:"iframe,omitempty"` // 内嵌 Block, 26 DocxBlockTypeIframe - Image *DocxBlockImage `json:"image,omitempty"` // 图片 Block, 27 DocxBlockTypeImage - ISV *DocxBlockISV `json:"isv,omitempty"` // 三方 Block, 28 DocxBlockTypeISV - Mindnote *DocxBlockMindnote `json:"mindnote,omitempty"` // 思维笔记 Block, 29 DocxBlockTypeMindnote - Sheet *DocxBlockSheet `json:"sheet,omitempty"` // 电子表格 Block, 30 DocxBlockTypeSheet - Table *DocxBlockTable `json:"table,omitempty"` // 表格 Block, 31 DocxBlockTypeTable - TableCell *DocxBlockTableCell `json:"table_cell,omitempty"` // 单元格 Block, 32 DocxBlockTypeTableCell - View *DocxBlockView `json:"view,omitempty"` // 视图 Block, 33 DocxBlockTypeView - QuoteContainer *DocxBlockQuoteContainer `json:"quote_container,omitempty"` // 引用容器 Block, 34 DocxBlockTypeQuoteContainer - Task *DocxBlockTask `json:"task,omitempty"` // 任务容器 Block, 35 DocxBlockTask - OKR *DocxBlockOKR `json:"okr,omitempty"` // OKR Block, 36 DocxBlockTypeOKR - OKRObjective *DocxBlockOKRObjective `json:"okr_objective,omitempty"` // OKR Objective, 37 DocxBlockTypeOKRObjective - OKRKeyResult *DocxBlockOKRKeyResult `json:"okr_key_result,omitempty"` // OKR KR Block, 38 DocxBlockTypeOKRKeyResult - OKRProgress *DocxBlockOKRProgress `json:"okr_progress,omitempty"` // OKR Progress, 39 DocxBlockTypeOKRProgress - AddOns *DocxBlockAddOns `json:"add_ons"` // 文档小组件 Block, 40 DocxBlockTypeAddOns - JiraIssue *DocxBlockJiraIssue `json:"jira_issue,omitempty"` // Jira 问题 Block, 41 DocxBlockJiraIssue - WikiCatalog *DocxBlockWikiCatalog `json:"wiki_catalog,omitempty"` // Wiki 子目录 Block, 42 DocxBlockWikiCatalog - Board *DocxBlockBoard `json:"board,omitempty"` // 画板 Block, 43 DocxBlockBoard - Undefined *DocxBlocUndefined `json:"undefined,omitempty"` // 未支持 Block, 999 DocxBlockTypeUndefined + Page *DocxBlockText `json:"page,omitempty"` // 文档 Block, 1 DocxBlockTypePage + Text *DocxBlockText `json:"text,omitempty"` // 文本 Block, 2 DocxBlockTypeText + Heading1 *DocxBlockText `json:"heading1,omitempty"` // 一级标题 Block, 3 DocxBlockTypeHeading1 + Heading2 *DocxBlockText `json:"heading2,omitempty"` // 二级标题 Block, 4 DocxBlockTypeHeading2 + Heading3 *DocxBlockText `json:"heading3,omitempty"` // 三级标题 Block, 5 DocxBlockTypeHeading3 + Heading4 *DocxBlockText `json:"heading4,omitempty"` // 四级标题 Block, 6 DocxBlockTypeHeading4 + Heading5 *DocxBlockText `json:"heading5,omitempty"` // 五级标题 Block, 7 DocxBlockTypeHeading5 + Heading6 *DocxBlockText `json:"heading6,omitempty"` // 六级标题 Block, 8 DocxBlockTypeHeading6 + Heading7 *DocxBlockText `json:"heading7,omitempty"` // 七级标题 Block, 9 DocxBlockTypeHeading7 + Heading8 *DocxBlockText `json:"heading8,omitempty"` // 八级标题 Block, 10 DocxBlockTypeHeading8 + Heading9 *DocxBlockText `json:"heading9,omitempty"` // 九级标题 Block, 11 DocxBlockTypeHeading9 + Bullet *DocxBlockText `json:"bullet,omitempty"` // 无序列表 Block, 12 DocxBlockTypeBullet + Ordered *DocxBlockText `json:"ordered,omitempty"` // 有序列表 Block, 13 DocxBlockTypeOrdered + Code *DocxBlockText `json:"code,omitempty"` // 代码块 Block, 14 DocxBlockTypeCode + Quote *DocxBlockText `json:"quote,omitempty"` // 引用 Block, 15 DocxBlockTypeQuote + Equation *DocxBlockText `json:"equation,omitempty"` // 公式 Block, 16 DocxBlockTypeEquation + Todo *DocxBlockText `json:"todo,omitempty"` // 任务 Block, 17 DocxBlockTypeTodo + Bitable *DocxBlockBitable `json:"bitable,omitempty"` // 多维表格 Block, 18 DocxBlockTypeBitable + Callout *DocxBlockCallout `json:"callout,omitempty"` // 高亮块 Block, 19 DocxBlockTypeCallout + ChatCard *DocxBlockChatCard `json:"chat_card,omitempty"` // 群聊卡片 Block, 20 DocxBlockTypeChatCard + Diagram *DocxBlockDiagram `json:"diagram,omitempty"` // 流程图/UML Block, 21 DocxBlockTypeDiagram + Divider DocxBlockDivider `json:"divider,omitempty"` // 分割线 Block, 22 DocxBlockTypeDivider + File *DocxBlockFile `json:"file,omitempty"` // 文件 Block, 23 DocxBlockTypeFile + Grid *DocxBlockGrid `json:"grid,omitempty"` // 分栏 Block, 24 DocxBlockTypeGrid + GridColumn *DocxBlockGridColumn `json:"grid_column,omitempty"` // 分栏列 Block, 25 DocxBlockTypeGridColumn + Iframe *DocxBlockIframe `json:"iframe,omitempty"` // 内嵌 Block, 26 DocxBlockTypeIframe + Image *DocxBlockImage `json:"image,omitempty"` // 图片 Block, 27 DocxBlockTypeImage + ISV *DocxBlockISV `json:"isv,omitempty"` // 三方 Block, 28 DocxBlockTypeISV + Mindnote *DocxBlockMindnote `json:"mindnote,omitempty"` // 思维笔记 Block, 29 DocxBlockTypeMindnote + Sheet *DocxBlockSheet `json:"sheet,omitempty"` // 电子表格 Block, 30 DocxBlockTypeSheet + Table *DocxBlockTable `json:"table,omitempty"` // 表格 Block, 31 DocxBlockTypeTable + TableCell *DocxBlockTableCell `json:"table_cell,omitempty"` // 单元格 Block, 32 DocxBlockTypeTableCell + View *DocxBlockView `json:"view,omitempty"` // 视图 Block, 33 DocxBlockTypeView + QuoteContainer *DocxBlockQuoteContainer `json:"quote_container,omitempty"` // 引用容器 Block, 34 DocxBlockTypeQuoteContainer + Task *DocxBlockTask `json:"task,omitempty"` // 任务容器 Block, 35 DocxBlockTask + OKR *DocxBlockOKR `json:"okr,omitempty"` // OKR Block, 36 DocxBlockTypeOKR + OKRObjective *DocxBlockOKRObjective `json:"okr_objective,omitempty"` // OKR Objective, 37 DocxBlockTypeOKRObjective + OKRKeyResult *DocxBlockOKRKeyResult `json:"okr_key_result,omitempty"` // OKR KR Block, 38 DocxBlockTypeOKRKeyResult + OKRProgress *DocxBlockOKRProgress `json:"okr_progress,omitempty"` // OKR Progress, 39 DocxBlockTypeOKRProgress + AddOns *DocxBlockAddOns `json:"add_ons"` // 文档小组件 Block, 40 DocxBlockTypeAddOns + JiraIssue *DocxBlockJiraIssue `json:"jira_issue,omitempty"` // Jira 问题 Block, 41 DocxBlockJiraIssue + WikiCatalog *DocxBlockWikiCatalog `json:"wiki_catalog,omitempty"` // Wiki 子目录 Block, 42 DocxBlockWikiCatalog + Board *DocxBlockBoard `json:"board,omitempty"` // 画板 Block, 43 DocxBlockBoard + SourceSynced *DocxSourceSynced `json:"source_synced,omitempty"` //源同步块,49 DocSourceSynced + ReferenceSynced *DocxReferenceSynced `json:"reference_synced,omitempty"` //引用同步块,50 DocReferenceSynced + Undefined *DocxBlocUndefined `json:"undefined,omitempty"` // 未支持 Block, 999 DocxBlockTypeUndefined } // DocxBlockType ... @@ -136,6 +142,8 @@ const ( DocxBlockTypeJiraIssue DocxBlockType = 41 // Jira 问题 Block: DocxBlockJiraIssue DocxBlockTypeWikiCatalog DocxBlockType = 42 // Wiki 子目录 Block: DocxBlockWikiCatalog DocxBlockTypeBoard DocxBlockType = 43 // 画板 Block: DocxBlockBoard + DocSourceSynced DocxBlockType = 49 // 源同步块,49 DocSourceSynced + DocReferenceSynced DocxBlockType = 50 // 引用同步块,50 DocReferenceSynced DocxBlockTypeUndefined DocxBlockType = 999 // 未支持 Block: DocxBlockUndefined ) From 4b1eef0f444b32191e4dd93acda3e05509dbc92b Mon Sep 17 00:00:00 2001 From: shichunming Date: Mon, 20 Oct 2025 14:40:05 +0800 Subject: [PATCH 3/3] feat:add param WithDescendants --- api_drive_docx_block_list_of_block.go | 1 + 1 file changed, 1 insertion(+) diff --git a/api_drive_docx_block_list_of_block.go b/api_drive_docx_block_list_of_block.go index 590c9131..13f79ed1 100644 --- a/api_drive_docx_block_list_of_block.go +++ b/api_drive_docx_block_list_of_block.go @@ -64,6 +64,7 @@ type GetDocxBlockListOfBlockReq struct { DocumentID string `path:"document_id" json:"-"` // 文档的唯一标识。点击[这里](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-overview)了解如何获取文档的 `document_id`, 示例值: "doxcnePuYufKa49ISjhD8Iabcef" BlockID string `path:"block_id" json:"-"` // Block 的唯一标识。你可调用[获取文档所有块](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/document-block/list)获取文档中块的 `block_id`, 示例值: "doxcnO6UW6wAw2qIcYf4hZabcef" DocumentRevisionID *int64 `query:"document_revision_id" json:"-"` // 查询的文档版本, 1 表示文档最新版本。文档创建后, 版本为 1。若查询的版本为文档最新版本, 则需要持有文档的阅读权限;若查询的版本为文档的历史版本, 则需要持有文档的编辑权限。你可通过调用[获取文档基本信息](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/document-docx/docx-v1/document/get)获取文档的 `revision_id`, 示例值:1, 默认值: `-1`, 最小值: `-1` + WithDescendants bool `query:"with_descendants" json:"-"` // 查询的结果中是否返回指定块的所有子孙块。 PageToken *string `query:"page_token" json:"-"` // 分页标记, 第一次请求不填, 表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取查询结果, 示例值: "aw7DoMKBFMOGwqHCrcO8w6jCmMOvw6ILeADCvsKNw57Di8O5XGV3LG4_w5HCqhFxSnDCrCzCn0BgZcOYUg85EMOYcEAcwqYOw4ojw5QFwofCu8KoIMO3K8Ktw4IuNMOBBHNYw4bCgCV3U1zDu8K-J8KSR8Kgw7Y0fsKZdsKvW3d9w53DnkHDrcO5bDkYwrvDisOEPcOtVFJ-I03CnsOILMOoAmLDknd6dsKqG1bClAjDuS3CvcOTwo7Dg8OrwovDsRdqIcKxw5HDohTDtXN9w5rCkWo" PageSize *int64 `query:"page_size" json:"-"` // 分页大小, 示例值: 500, 默认值: `500`, 最大值: `500` UserIDType *IDType `query:"user_id_type" json:"-"` // 用户 ID 类型, 示例值: "open_id", 可选值有: open_id: 标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。[了解更多: 如何获取 Open ID](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-openid), union_id: 标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的, 在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID, 应用开发商可以把同个用户在多个应用中的身份关联起来。[了解更多: 如何获取 Union ID?](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-union-id), user_id: 标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内, 一个用户的 User ID 在所有应用(包括商店应用)中都保持一致。User ID 主要用于在不同的应用间打通用户数据。[了解更多: 如何获取 User ID?](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-user-id), 默认值: `open_id`, 当值为 `user_id`, 字段权限要求: 获取用户 user ID