微信服务号的自定义菜单是连接公众号与用户的核心交互入口,合理配置菜单类型不仅能提升用户体验,还能高效引导用户完成操作(如跳转页面、触发消息、调用功能等)。本文将全面拆解微信服务号菜单的类型体系,结合官方 JSON 配置规范,逐一说明各类菜单的枚举值、适用场景及配置示例。
一、微信服务号菜单的核心分类
微信服务号自定义菜单分为两大层级:一级菜单(最多 3 个)和二级菜单(每个一级菜单下最多 5 个),所有菜单按功能可划分为「点击型菜单」和「跳转型菜单」两大类,官方通过不同的type枚举值区分具体功能,且部分类型仅支持服务号(订阅号权限受限)。
核心前提:菜单配置的 JSON 结构规范
无论哪种菜单类型,JSON 配置的基础结构需遵循微信官方格式,示例骨架如下:
{
"button": [
{
"name": "一级菜单1", // 菜单名称,不超过16个汉字
"sub_button": [ // 二级菜单列表(无二级则省略)
{
"type": "枚举值", // 菜单类型核心枚举
"name": "二级菜单1", // 二级菜单名称,不超过40个汉字
"key": "自定义标识", // 点击型菜单必填
"url": "跳转链接" // 跳转型菜单必填
}
]
},
{
"name": "一级菜单2",
"type": "枚举值",
"key": "自定义标识",
"url": "跳转链接"
}
]
}
二、菜单类型枚举值全解析(按功能分类)
微信官方定义的菜单type枚举值共 13 种(含特殊场景类型),其中服务号常用核心类型为 10 种,以下按「点击触发」「跳转链接」「特殊功能」三类逐一说明:
第一类:点击触发型菜单(type 枚举值)
点击后触发公众号被动回复消息 / 事件,需开发者在后台配置消息回复逻辑,核心枚举值如下:
| 枚举值 | 名称 | 适用场景 | 必填参数 | 权限说明 |
|---|---|---|---|---|
click | 点击推事件 | 最基础的点击触发,开发者自定义事件 key,后台接收CLICK事件后回复消息 | key(自定义) | 服务号 / 订阅号均支持 |
scancode_push | 扫码推事件 | 点击后弹出扫码界面,扫码后直接将结果推送给开发者后台,不弹出消息提示框 | key(自定义) | 仅服务号支持 |
scancode_waitmsg | 扫码推事件且弹出消息接收中提示框 | 点击后扫码,扫码后弹出 “消息接收中” 提示框,再将结果推送给后台 | key(自定义) | 仅服务号支持 |
pic_sysphoto | 弹出系统拍照发图 | 点击后调用系统相机拍照,拍照后将图片发送给开发者后台 | key(自定义) | 仅服务号支持 |
pic_photo_or_album | 弹出拍照或者相册发图 | 点击后可选择 “拍照” 或 “从相册选图”,选择后将图片发送给后台 | key(自定义) | 仅服务号支持 |
pic_weixin | 弹出微信相册发图器 | 点击后调用微信相册(仅微信内保存的图片),选择后将图片发送给后台 | key(自定义) | 仅服务号支持 |
location_select | 弹出地理位置选择器 | 点击后调用微信定位功能,选择位置后将坐标信息发送给后台 | key(自定义) | 仅服务号支持 |
media_id | 下发消息(除文本外) | 点击后直接推送公众号已上传的永久素材(图片、语音、视频、图文),无需后台处理 | key(素材 media_id) | 仅认证服务号支持 |
view_limited | 跳转图文消息 URL | 点击后跳转至公众号永久图文素材的详情页(替代已废弃的news类型) | key(素材 media_id) | 仅认证服务号支持 |
点击型菜单配置示例(以click和media_id为例)
{
"button": [
{
"name": "点击回复",
"type": "click",
"key": "V1001_CLICK_TEST" // 开发者自定义key,后台接收该值后回复消息
},
{
"name": "推送图片",
"type": "media_id",
"key": "MEDIA_ID_123456" // 公众号素材库中图片的media_id
}
]
}
第二类:跳转链接型菜单(核心枚举:view)
点击后直接跳转至指定 URL,是服务号最常用的菜单类型,仅需配置url参数,枚举值唯一:
| 枚举值 | 名称 | 适用场景 | 必填参数 | 权限说明 |
|---|---|---|---|---|
view | 跳转网页 | 点击后跳转至外部网页(需为 HTTPS)、公众号文章、小程序落地页等 | url(跳转链接) | 服务号 / 订阅号均支持(未认证订阅号仅支持跳转公众号内链接) |
跳转型菜单配置示例(含外部网页、公众号文章)
{
"button": [
{
"name": "官网首页",
"type": "view",
"url": "https://www.example.com" // 外部HTTPS链接(认证服务号无限制)
},
{
"name": "公众号文章",
"type": "view",
"url": "https://mp.weixin.qq.com/s/XXXXXX" // 公众号文章链接
}
]
}
第三类:特殊场景菜单(小程序菜单)
微信支持菜单跳转小程序,无独立type枚举,仍使用view类型,但url需按固定格式配置,且需满足权限要求:
小程序菜单配置规则
- 仅认证服务号支持;
url格式:https://mp.weixin.qq.com/wxaopen/safehome?appid=小程序APPID&path=小程序页面路径;- 需先在公众号后台绑定小程序,且小程序与公众号主体一致。
小程序菜单配置示例
{
"button": [
{
"name": "打开小程序",
"type": "view",
"url": "https://mp.weixin.qq.com/wxaopen/safehome?appid=wx1234567890abcdef&path=pages/index/index"
}
]
}
三、关键注意事项
- 权限限制:未认证服务号仅支持
click、view(仅跳转公众号内链接);认证服务号解锁所有类型,且view类型可跳转任意 HTTPS 链接; - 参数规范:
name:一级菜单≤16 字,二级菜单≤40 字,支持 Emoji;url:必须为 HTTPS 协议(微信强制要求);key/media_id:需与后台逻辑 / 素材库一致,否则菜单无效;
- 生效时间:菜单配置后约 5 分钟生效,测试时可取消关注后重新关注;
- 废弃类型:
news(下发图文消息)已废弃,替代方案为view_limited; - 事件接收:点击型菜单触发的事件,需通过微信公众号开发文档的「接收事件推送」接口接收处理。
四、总结
微信服务号菜单的type枚举值围绕「交互触发」和「链接跳转」两大核心设计,其中:
- 基础交互用
click,素材直推用media_id/view_limited; - 外部链接跳转核心用
view,小程序跳转也基于view扩展; - 扫码、拍照、定位等功能型菜单(
scancode_*/pic_*/location_select)仅服务号支持,适合场景化交互。
开发者需根据业务需求选择对应枚举值,同时遵循微信的权限和参数规范,才能实现菜单的稳定运行和高效交互。
1454

被折叠的 条评论
为什么被折叠?



