Skip to content

飞书租户群菜单

接口名称

飞书租户群菜单(租户令牌) -(IFeishuTenantV1ChatGroupMenu)

功能描述

在飞书群组内设置自定义菜单,方便群成员快速访问特定链接或者执行特定操作。群菜单分为一级菜单和二级菜单,通过 OpenAPI 你可以添加、删除、修改或者查询群菜单。当前接口使用租户令牌访问,适应于租户应用场景。

参考文档

接口详细文档请参见:https://open.feishu.cn/document/server-docs/group/chat-menu_tree/overview

函数列表

函数名称功能描述认证方式HTTP 方法
AddMenuByIdAsync在指定群组中添加一个或多个群菜单租户令牌POST
UpdateMenuByIdAsync修改指定群组内的某个一级菜单或者二级菜单的元信息租户令牌PATCH
DeleteMenuByIdAsync删除指定群内的一级菜单租户令牌DELETE
SortMenuByIdAsync调整指定群组内的群菜单排列顺序租户令牌POST
GetMenuByIdAsync获取指定群组内的群菜单信息租户令牌GET

函数详细内容

添加群菜单

函数签名

csharp
Task<FeishuApiResult<ChatGroupMenuResult>?> AddMenuByIdAsync(
    [Path] string chat_id,
    [Body] AddChatGroupMenuRequest addChatGroupMenuRequest,
    CancellationToken cancellationToken = default)

认证:租户令牌

参数

  • chat_id ✅ 必填 - 群 ID(string)
    示例值:"oc_a0553eda9014c201e6969b478895c230"
  • addChatGroupMenuRequest ✅ 必填 - 添加群菜单请求体(AddChatGroupMenuRequest)
    包含 menu_tree 字段,用于定义要添加的菜单结构

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "menu_tree": {
      "chat_menu_top_levels": [
        {
          "chat_menu_top_level_id": "7117116451961487361",
          "chat_menu_item": {
            "action_type": "REDIRECT_LINK",
            "name": "企业官网",
            "redirect_link": {
              "url": "https://company.example.com"
            },
            "image_key": "img_v2_b0fbe905-7988-4282-b882-82edd010336j"
          },
          "children": [
            {
              "chat_menu_second_level_id": "7039638308221468675",
              "action_type": "REDIRECT_LINK",
              "name": "产品中心",
              "redirect_link": {
                "url": "https://company.example.com/products"
              }
            }
          ]
        }
      ]
    }
  }
}

说明:一个群内最多有 3 个一级菜单,如果一级菜单有二级菜单,则该一级菜单的 action_type 必须为 NONE。

代码示例

typescript
// 添加群菜单示例(租户令牌)
const addMenu = async (chatId: string) => {
  const requestBody = {
    menu_tree: {
      chat_menu_top_levels: [{
        chat_menu_item: {
          action_type: "NONE",
          name: "企业服务",
          image_key: "img_v2_b0fbe905-7988-4282-b882-82edd010336j"
        },
        children: [
          {
            action_type: "REDIRECT_LINK",
            name: "产品中心",
            redirect_link: {
              url: "https://company.example.com/products"
            }
          },
          {
            action_type: "REDIRECT_LINK", 
            name: "技术支持",
            redirect_link: {
              url: "https://company.example.com/support"
            }
          }
        ]
      }]
    }
  };

  try {
    const result = await feishuClient.feishuTenantV1ChatGroupMenu.addMenuById(
      chatId, 
      requestBody
    );
    console.log('添加群菜单成功:', result.data);
  } catch (error) {
    console.error('添加失败:', error);
  }
};

// 调用示例
addMenu("oc_a0553eda9014c201e6969b478895c230");

修改群菜单

函数签名

csharp
Task<FeishuApiResult<UpdateChatMenuItemResult>?> UpdateMenuByIdAsync(
    [Path] string chat_id,
    [Path] string menu_item_id,
    [Body] UpdateChatMenuItemRequest updateChatMenuItemRequest,
    CancellationToken cancellationToken = default)

认证:租户令牌

参数

  • chat_id ✅ 必填 - 群 ID(string)
    示例值:"oc_a0553eda9014c201e6969b478895c230"
  • menu_item_id ✅ 必填 - 一级菜单或者二级菜单的 ID(string)
    示例值:"7156553273518882844"
  • updateChatMenuItemRequest ✅ 必填 - 更新群菜单请求体(UpdateChatMenuItemRequest)
    包含 update_fields 字段(可选值:ICON、NAME、I18N_NAME、REDIRECT_LINK)

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "chat_menu_item": {
      "action_type": "REDIRECT_LINK",
      "name": "更新后的企业官网",
      "redirect_link": {
        "url": "https://new-company.example.com"
      },
      "image_key": "img_v2_b0fbe905-7988-4282-b882-82edd010336j"
    }
  }
}

说明:可以修改图标、名称、国际化名称和跳转链接等元信息,需要指定具体要更新的字段。

代码示例

typescript
// 修改群菜单示例(租户令牌)
const updateMenu = async (chatId: string, menuItemId: string) => {
  const requestBody = {
    update_fields: ["NAME", "REDIRECT_LINK"],
    chat_menu_item: {
      name: "更新后的企业官网",
      redirect_link: {
        url: "https://new-company.example.com"
      }
    }
  };

  try {
    const result = await feishuClient.feishuTenantV1ChatGroupMenu.updateMenuById(
      chatId,
      menuItemId,
      requestBody
    );
    console.log('修改群菜单成功:', result.data);
  } catch (error) {
    console.error('修改失败:', error);
  }
};

// 调用示例
updateMenu("oc_a0553eda9014c201e6969b478895c230", "7156553273518882844");

删除群菜单

函数签名

csharp
Task<FeishuApiResult<ChatGroupMenuResult>?> DeleteMenuByIdAsync(
    [Path] string chat_id,
    [Body] ChartMenuIdsRequest deleteMenuIdsRequest,
    CancellationToken cancellationToken = default)

认证:租户令牌

参数

  • chat_id ✅ 必填 - 群 ID(string)
    示例值:"oc_a0553eda9014c201e6969b478895c230"
  • deleteMenuIdsRequest ✅ 必填 - 删除群内的一级菜单请求体(ChartMenuIdsRequest)
    包含 chat_menu_top_level_ids 字段,示例值:["7156553273518882844"]

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "menu_tree": {
      "chat_menu_top_levels": [
        {
          "chat_menu_top_level_id": "7117116451961487362",
          "chat_menu_item": {
            "action_type": "REDIRECT_LINK",
            "name": "企业官网"
          }
        }
      ]
    }
  }
}

说明:删除一级菜单会同时删除其下的所有二级菜单,成功调用后接口会返回群组内最新的群菜单信息。

代码示例

typescript
// 删除群菜单示例(租户令牌)
const deleteMenu = async (chatId: string, menuIds: string[]) => {
  const requestBody = {
    chat_menu_top_level_ids: menuIds
  };

  try {
    const result = await feishuClient.feishuTenantV1ChatGroupMenu.deleteMenuById(
      chatId, 
      requestBody
    );
    console.log('删除群菜单成功:', result.data);
  } catch (error) {
    console.error('删除失败:', error);
  }
};

// 调用示例
deleteMenu("oc_a0553eda9014c201e6969b478895c230", ["7156553273518882844"]);

调整群菜单排序

函数签名

csharp
Task<FeishuApiResult<ChatGroupMenuResult>?> SortMenuByIdAsync(
    [Path] string chat_id,
    [Body] ChartMenuIdsRequest sortMenuRequest,
    CancellationToken cancellationToken = default)

认证:租户令牌

参数

  • chat_id ✅ 必填 - 群 ID(string)
    示例值:"oc_a0553eda9014c201e6969b478895c230"
  • sortMenuRequest ✅ 必填 - 菜单项目排序请求体(ChartMenuIdsRequest)
    包含 chat_menu_top_level_ids 字段,按排序顺序列出菜单 ID

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "menu_tree": {
      "chat_menu_top_levels": [
        {
          "chat_menu_top_level_id": "7117116451961487362",
          "chat_menu_item": {
            "action_type": "REDIRECT_LINK",
            "name": "企业官网"
          }
        },
        {
          "chat_menu_top_level_id": "7117116451961487361",
          "chat_menu_item": {
            "action_type": "NONE",
            "name": "企业服务"
          }
        }
      ]
    }
  }
}

说明:chat_menu_top_level_ids 数组中的顺序即为一级菜单的排序顺序。

代码示例

typescript
// 调整群菜单排序示例(租户令牌)
const sortMenu = async (chatId: string, sortedMenuIds: string[]) => {
  const requestBody = {
    chat_menu_top_level_ids: sortedMenuIds
  };

  try {
    const result = await feishuClient.feishuTenantV1ChatGroupMenu.sortMenuById(
      chatId, 
      requestBody
    );
    console.log('排序成功:', result.data);
  } catch (error) {
    console.error('排序失败:', error);
  }
};

// 调用示例:将第二个菜单移到前面
sortMenu("oc_a0553eda9014c201e6969b478895c230", ["7117116451961487362", "7117116451961487361"]);

获取群菜单信息

函数签名

csharp
Task<FeishuApiResult<ChatGroupMenuResult>?> GetMenuByIdAsync(
    [Path] string chat_id,
    CancellationToken cancellationToken = default)

认证:租户令牌

参数

  • chat_id ✅ 必填 - 群 ID(string)
    示例值:"oc_a0553eda9014c201e6969b478895c230"

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "menu_tree": {
      "chat_menu_top_levels": [
        {
          "chat_menu_top_level_id": "7117116451961487361",
          "chat_menu_item": {
            "action_type": "NONE",
            "name": "企业服务",
            "image_key": "img_v2_b0fbe905-7988-4282-b882-82edd010336j"
          },
          "children": [
            {
              "chat_menu_second_level_id": "7039638308221468675",
              "action_type": "REDIRECT_LINK",
              "name": "产品中心",
              "redirect_link": {
                "url": "https://company.example.com/products"
              }
            },
            {
              "chat_menu_second_level_id": "7039638308221468676",
              "action_type": "REDIRECT_LINK",
              "name": "技术支持",
              "redirect_link": {
                "url": "https://company.example.com/support"
              }
            }
          ]
        },
        {
          "chat_menu_top_level_id": "7117116451961487362",
          "chat_menu_item": {
            "action_type": "REDIRECT_LINK",
            "name": "企业官网",
            "redirect_link": {
              "url": "https://company.example.com"
            }
          }
        }
      ]
    }
  }
}

说明:返回指定群组内所有群菜单信息,包括所有一级或二级菜单的名称、跳转链接、图标等信息。

代码示例

typescript
// 获取群菜单信息示例(租户令牌)
const getMenu = async (chatId: string) => {
  try {
    const result = await feishuClient.feishuTenantV1ChatGroupMenu.getMenuById(chatId);
    console.log('群菜单信息:', result.data.menu_tree);
    
    // 遍历菜单结构
    result.data.menu_tree.chat_menu_top_levels.forEach(topLevel => {
      console.log(`一级菜单: ${topLevel.chat_menu_item.name}`);
      
      if (topLevel.children && topLevel.children.length > 0) {
        topLevel.children.forEach(child => {
          console.log(`  二级菜单: ${child.name} - ${child.redirect_link?.url}`);
        });
      } else {
        console.log(`  跳转链接: ${topLevel.chat_menu_item.redirect_link?.url}`);
      }
    });
  } catch (error) {
    console.error('获取菜单信息失败:', error);
  }
};

// 调用示例
getMenu("oc_a0553eda9014c201e6969b478895c230");