Skip to content

飞书群公告管理

接口名称

飞书群公告管理接口(用户令牌) -(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}`);