飞书群公告管理
接口名称
飞书群公告管理接口(用户令牌) -(IFeishuUserV1ChatGroupAnnouncement)
功能描述
群公告是群组中的公告文档,采用飞书云文档承载,每个群组只有一个群公告,每篇群公告都有唯一的 chat_id 作为标识。该接口提供群公告的创建、查询、更新、删除等完整管理功能,适用于用户应用场景。
参考文档
https://open.feishu.cn/document/group/upgraded-group-announcement/group-announcement-overview
函数列表
| 函数名称 | 功能描述 | 认证方式 | HTTP 方法 |
|---|---|---|---|
| GetNoticeInfoByIdAsync | 获取指定群组中的群公告基本信息 | 用户令牌 | GET |
| GetNoticeBlocksListByIdAsync | 获取群公告所有块的富文本内容并分页返回 | 用户令牌 | GET |
| CreateNoticeBlockAsync | 在指定块的子块列表中,新创建一批子块,并放置到指定位置 | 用户令牌 | POST |
| UpdateNoticeBlockAsync | 批量更新块的富文本内容 | 用户令牌 | PATCH |
| GetBlockContentByIdAsync | 获取群公告块的富文本内容 | 用户令牌 | GET |
| GetBlockContentPageListByIdAsync | 获取群公告所有块的富文本内容并分页返回 | 用户令牌 | GET |
| DeleteBlockByIdAsync | 指定需要操作的块,删除其指定范围的子块 | 用户令牌 | DELETE |
函数详细内容
获取群公告基本信息
- 函数签名:csharp
Task<FeishuApiResult<GetAnnouncementResult>?> GetNoticeInfoByIdAsync( [Path] string chat_id, [Query("user_id_type")] string user_id_type = Consts.User_Id_Type, CancellationToken cancellationToken = default); - 认证:用户令牌
- 参数:
chat_id✅ 必填:群 ID- 类型:string
- 含义:要查询群公告的群组唯一标识
- 示例值:"oc_a0553eda9014c201e6969b478895c230"
user_id_type⚪ 可选:用户 ID 类型- 类型:string
- 含义:ID 类型需要与查询参数中的 user_id_type 类型保持一致
- 示例值:"open_id"
cancellationToken⚪ 可选:取消操作令牌对象
- 响应:json
{ "code": 0, "msg": "success", "data": { "announcement": { "chat_id": "oc_a0553eda9014c201e6969b478895c230", "docx_token": "doxcnO6UW6wAw2qIcYf4hZpFIth", "title": "群公告标题", "revision_id": 1, "create_time": "1640995200", "update_time": "1640995200" } } } - 说明:需要持有群公告的阅读权限
- 代码示例:typescript
const response = await feishuClient.GetNoticeInfoByIdAsync( "oc_a0553eda9014c201e6969b478895c230", "open_id" ); console.log(`群公告ID: ${response.data.announcement.docx_token}`); console.log(`标题: ${response.data.announcement.title}`);
获取群公告块列表
- 函数签名:csharp
Task<FeishuApiPageListResult<AnnouncementBlock>?> GetNoticeBlocksListByIdAsync( [Path] string chat_id, [Query("page_size")] int? page_size = 10, [Query("page_token")] string? page_token = null, [Query("revision_id")] int? revision_id = -1, [Query("user_id_type")] string user_id_type = Consts.User_Id_Type, CancellationToken cancellationToken = default); - 认证:用户令牌
- 参数:
chat_id✅ 必填:群 ID- 类型:string
- 含义:要查询群公告的群组唯一标识
- 示例值:"oc_a0553eda9014c201e6969b478895c230"
page_size⚪ 可选:分页大小- 类型:int?
- 含义:本次请求所返回的块信息列表内的最大条目数
- 示例值:10
page_token⚪ 可选:分页标记- 类型:string
- 含义:第一次请求不填,表示从头开始遍历
- 示例值:null
revision_id⚪ 可选:查询的群公告版本- 类型:int?
- 含义:-1 表示群公告最新版本,群公告创建后版本为 1
- 示例值:-1
user_id_type⚪ 可选:用户 ID 类型- 类型:string
- 含义:ID 类型需要与查询参数中的 user_id_type 类型保持一致
- 示例值:"open_id"
cancellationToken⚪ 可选:取消操作令牌对象
- 响应:json
{ "code": 0, "msg": "success", "data": { "items": [ { "block_id": "doxcnO6UW6wAw2qIcYf4hZabcef", "block_type": 1, "block_type_name": "text", "children": [] } ], "page_token": "next_page_token", "has_more": false } } - 说明:查询最新版本需要阅读权限,查询历史版本需要编辑权限
- 代码示例:typescript
const response = await feishuClient.GetNoticeBlocksListByIdAsync( "oc_a0553eda9014c201e6969b478895c230", 10, null, -1, "open_id" ); console.log(`获取到 ${response.data.items.length} 个块`); response.data.items.forEach(block => { console.log(`块ID: ${block.block_id}, 类型: ${block.block_type_name}`); });
创建群公告块
- 函数签名:csharp
Task<FeishuApiResult<CreateBlockResult>?> CreateNoticeBlockAsync( [Path] string chat_id, [Path] string block_id, [Body] CreateBlockRequest createBlockRequest, [Query("revision_id")] int revision_id = -1, [Query("client_token")] string? client_token = null, [Query("user_id_type")] string user_id_type = Consts.User_Id_Type, CancellationToken cancellationToken = default); - 认证:用户令牌
- 参数:
chat_id✅ 必填:群 ID- 类型:string
- 含义:要创建块的群组唯一标识
- 示例值:"oc_a0553eda9014c201e6969b478895c230"
block_id✅ 必填:父块 ID- 类型:string
- 含义:父块的 block_id,表示为其创建一批子块,根节点创建子块可填 chat_id
- 示例值:"doxcnO6UW6wAw2qIcYf4hZpFIth"
createBlockRequest✅ 必填:创建块请求体- 类型:CreateBlockRequest
- 含义:包含要创建的块内容信息
- 示例值:包含 block_type、children 等字段的配置对象
revision_id⚪ 可选:操作的群公告版本- 类型:int
- 含义:-1 表示群公告最新版本,群公告创建后版本为 1
- 示例值:-1
client_token⚪ 可选:操作唯一标识- 类型:string
- 含义:用于幂等的进行更新操作,为空表示新请求
- 示例值:null
user_id_type⚪ 可选:用户 ID 类型- 类型:string
- 含义:用户 ID 类型
- 示例值:"open_id"
cancellationToken⚪ 可选:取消操作令牌对象
- 响应:json
{ "code": 0, "msg": "success", "data": { "blocks": [ { "block_id": "doxcnO6UW6wAw2qIcYf4hZabcef", "block_type": 1, "block_type_name": "text" } ], "revision_id": 2 } } - 说明:需要持有群公告的编辑权限
- 代码示例:typescript
const createBlockRequest = { block_type: 1, children: [ { type: "text_run", text_run: { content: "这是新创建的文本块", style: { bold: true } } } ] }; const response = await feishuClient.CreateNoticeBlockAsync( "oc_a0553eda9014c201e6969b478895c230", "doxcnO6UW6wAw2qIcYf4hZpFIth", createBlockRequest, -1, null, "open_id" ); console.log(`创建成功,块ID: ${response.data.blocks[0].block_id}`);
批量更新群公告块
- 函数签名:csharp
Task<FeishuApiResult<BatchUpdateResult>?> UpdateNoticeBlockAsync( [Path] string chat_id, [Body] BlocksBatchUpdateRequest batchUpdateRequest, [Query("revision_id")] int revision_id = -1, [Query("client_token")] string? client_token = null, [Query("user_id_type")] string user_id_type = Consts.User_Id_Type, CancellationToken cancellationToken = default); - 认证:用户令牌
- 参数:
chat_id✅ 必填:群 ID- 类型:string
- 含义:要更新块的群组唯一标识
- 示例值:"oc_a0553eda9014c201e6969b478895c230"
batchUpdateRequest✅ 必填:批量更新请求体- 类型:BlocksBatchUpdateRequest
- 含义:包含要更新的块信息列表
- 示例值:包含 blocks 数组的配置对象
revision_id⚪ 可选:操作的群公告版本- 类型:int
- 含义:-1 表示群公告最新版本,群公告创建后版本为 1
- 示例值:-1
client_token⚪ 可选:操作唯一标识- 类型:string
- 含义:用于幂等的进行更新操作,为空表示新请求
- 示例值:null
user_id_type⚪ 可选:用户 ID 类型- 类型:string
- 含义:用户 ID 类型
- 示例值:"open_id"
cancellationToken⚪ 可选:取消操作令牌对象
- 响应:json
{ "code": 0, "msg": "success", "data": { "blocks": [ { "block_id": "doxcnO6UW6wAw2qIcYf4hZabcef", "block_type": 1, "block_type_name": "text" } ], "revision_id": 3 } } - 说明:需要持有群公告的编辑权限,支持批量操作提高效率
- 代码示例:typescript
const batchUpdateRequest = { blocks: [ { block_id: "doxcnO6UW6wAw2qIcYf4hZabcef", block_type: 1, children: [ { type: "text_run", text_run: { content: "更新后的文本内容", style: { italic: true } } } ] } ] }; const response = await feishuClient.UpdateNoticeBlockAsync( "oc_a0553eda9014c201e6969b478895c230", batchUpdateRequest, -1, null, "open_id" ); console.log(`批量更新成功,新版本号: ${response.data.revision_id}`);
获取群公告块内容
- 函数签名:csharp
Task<FeishuApiResult<GetBlockContentListResult>?> GetBlockContentByIdAsync( [Path] string chat_id, [Path] string block_id, [Query("revision_id")] int? revision_id = -1, [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type, CancellationToken cancellationToken = default); - 认证:用户令牌
- 参数:
chat_id✅ 必填:群 ID- 类型:string
- 含义:包含要查询块的群组唯一标识
- 示例值:"oc_a0553eda9014c201e6969b478895c230"
block_id✅ 必填:块 ID- 类型:string
- 含义:Block 的唯一标识
- 示例值:"doxcnO6UW6wAw2qIcYf4hZabcef"
revision_id⚪ 可选:操作的群公告版本- 类型:int?
- 含义:-1 表示群公告最新版本,群公告创建后版本为 1
- 示例值:-1
user_id_type⚪ 可选:用户 ID 类型- 类型:string
- 含义:用户 ID 类型
- 示例值:"open_id"
cancellationToken⚪ 可选:取消操作令牌对象
- 响应:json
{ "code": 0, "msg": "success", "data": { "block": { "block_id": "doxcnO6UW6wAw2qIcYf4hZabcef", "block_type": 1, "block_type_name": "text", "children": [ { "type": "text_run", "text_run": { "content": "这是块的富文本内容", "style": { "bold": false, "italic": false } } } ] } } } - 说明:查询最新版本需要阅读权限,查询历史版本需要编辑权限
- 代码示例:typescript
const response = await feishuClient.GetBlockContentByIdAsync( "oc_a0553eda9014c201e6969b478895c230", "doxcnO6UW6wAw2qIcYf4hZabcef", -1, "open_id" ); const block = response.data.block; console.log(`块类型: ${block.block_type_name}`); if (block.children && block.children.length > 0) { console.log(`内容: ${block.children[0].text_run.content}`); }
获取群公告块子块列表
- 函数签名:csharp
Task<FeishuApiPageListResult<AnnouncementBlock>?> GetBlockContentPageListByIdAsync( [Path] string chat_id, [Path] string block_id, [Query("page_size")] int? page_size = 10, [Query("page_token")] string? page_token = null, [Query("revision_id")] int? revision_id = -1, [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type, CancellationToken cancellationToken = default); - 认证:用户令牌
- 参数:
chat_id✅ 必填:群 ID- 类型:string
- 含义:包含要查询块的群组唯一标识
- 示例值:"oc_a0553eda9014c201e6969b478895c230"
block_id✅ 必填:块 ID- 类型:string
- 含义:Block 的唯一标识
- 示例值:"doxcnO6UW6wAw2qIcYf4hZabcef"
page_size⚪ 可选:分页大小- 类型:int?
- 含义:本次请求所返回的子块信息列表内的最大条目数
- 示例值:10
page_token⚪ 可选:分页标记- 类型:string
- 含义:第一次请求不填,表示从头开始遍历
- 示例值:null
revision_id⚪ 可选:查询的群公告版本- 类型:int?
- 含义:-1 表示群公告最新版本,群公告创建后版本为 1
- 示例值:-1
user_id_type⚪ 可选:用户 ID 类型- 类型:string
- 含义:用户 ID 类型
- 示例值:"open_id"
cancellationToken⚪ 可选:取消操作令牌对象
- 响应:json
{ "code": 0, "msg": "success", "data": { "items": [ { "block_id": "doxcnO6UW6wAw2qIcYf4hZabcef", "block_type": 1, "block_type_name": "text", "children": [] } ], "page_token": "next_page_token", "has_more": true } } - 说明:查询最新版本需要阅读权限,查询历史版本需要编辑权限
- 代码示例:typescript
const response = await feishuClient.GetBlockContentPageListByIdAsync( "oc_a0553eda9014c201e6969b478895c230", "doxcnO6UW6wAw2qIcYf4hZabcef", 10, null, -1, "open_id" ); console.log(`获取到 ${response.data.items.length} 个子块`); console.log(`是否还有更多: ${response.data.has_more}`);
删除群公告块
- 函数签名:csharp
Task<FeishuApiResult<DeleteAnnouncementBlockResult>?> DeleteBlockByIdAsync( [Path] string chat_id, [Path] string block_id, [Body] DeleteAnnouncementBlockRequest deleteRequest, [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type, [Query("client_token")] string? client_token = null, CancellationToken cancellationToken = default); - 认证:用户令牌
- 参数:
chat_id✅ 必填:群 ID- 类型:string
- 含义:包含要删除块的群组唯一标识
- 示例值:"oc_a0553eda9014c201e6969b478895c230"
block_id✅ 必填:块 ID- 类型:string
- 含义:Block 的唯一标识
- 示例值:"doxcnO6UW6wAw2qIcYf4hZabcef"
deleteRequest✅ 必填:删除请求体- 类型:DeleteAnnouncementBlockRequest
- 含义:包含要删除的子块信息
- 示例值:包含 block_id_range 等字段的对象
user_id_type⚪ 可选:用户 ID 类型- 类型:string
- 含义:用户 ID 类型
- 示例值:"open_id"
client_token⚪ 可选:操作唯一标识- 类型:string
- 含义:用于幂等的进行更新操作,为空表示新请求
- 示例值:null
cancellationToken⚪ 可选:取消操作令牌对象
- 响应:json
{ "code": 0, "msg": "success", "data": { "revision_id": 4 } } - 说明:需要持有群公告的编辑权限,删除操作不可逆请谨慎操作
- 代码示例:typescript
const deleteRequest = { block_id_range: { start_block_id: "doxcnO6UW6wAw2qIcYf4hZabcef", end_block_id: "doxcnO6UW6wAw2qIcYf4hZabcef" } }; const response = await feishuClient.DeleteBlockByIdAsync( "oc_a0553eda9014c201e6969b478895c230", "doxcnO6UW6wAw2qIcYf4hZabcef", deleteRequest, "open_id", null ); console.log(`删除成功,新版本号: ${response.data.revision_id}`);