飞书租户群菜单
接口名称
飞书租户群菜单(租户令牌) -(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");