Skip to content

菜单管理

公众号菜单分两类:每个账号唯一的默认自定义菜单,以及按规则向不同人群下发的个性化菜单。两者按钮结构一致(最多 3 个一级菜单,每个最多 5 个二级)。


自定义菜单

默认菜单保存在 mp_menus(每账号一条,account_id 唯一):

字段说明
buttons按钮树(jsonb)
statusdraft 草稿 / published 已发布
published_at发布时间

工作流:保存草稿 → 发布(调微信 menu/create)→ 可拉取微信当前菜单(menu/get)回填草稿 → 删除(menu/delete)。

按钮类型

按钮 type 支持点击与跳转两大类,并已扩展事件类型:

类型说明
click点击推事件(携带 key
view跳转网页(url
miniprogram跳转小程序(appid + pagepath
scancode_waitmsg / scancode_push扫码
pic_sysphoto / pic_photo_or_album / pic_weixin拍照 / 相册 / 发图
location_select地理位置选择
media_id / view_limited下发 / 跳转图文素材

父级菜单(含二级子菜单)本身无动作,type 留空。


个性化菜单

个性化菜单保存在 mp_conditional_menus,按匹配规则向不同人群下发不同菜单;未命中任何个性化菜单的用户看到默认自定义菜单。

字段说明
name本地名称(便于管理识别)
buttons按钮树(结构同默认菜单)
match_rule匹配规则(jsonb)
menu_id微信返回的 menuid(发布后写入)
status / published_at草稿 / 已发布

匹配规则

match_rule 至少设置一项(前端 camelCase,下发微信转 snake_case):

规则字段说明
标签tagId微信标签 id
性别sex1 男 / 2
客户端clientPlatformType1 iOS / 2 Android / 3 PC
地区country / province / city国家 / 省 / 市
语言languagezh_CN

发布与匹配测试

  • 发布:调微信 menu/addconditional 写入新 menuid;若已存在旧 menuiddelconditional 删除,避免菜单泄漏。
  • 匹配测试menu/trymatch 输入 openid 或微信号,返回该用户实际命中的菜单按钮,便于验证规则配置。

接口一览

方法路由权限说明
GET/api/mp/menump:menu:list获取默认菜单
POST/api/mp/menump:menu:save保存菜单草稿
POST/api/mp/menu/publishmp:menu:publish发布菜单
POST/api/mp/menu/pullmp:menu:pull拉取微信当前菜单
DELETE/api/mp/menump:menu:delete删除菜单
GET/api/mp/conditional-menusmp:condmenu:list个性化菜单列表
POST/api/mp/conditional-menusmp:condmenu:create新增个性化菜单
PUT/api/mp/conditional-menus/{id}mp:condmenu:update编辑个性化菜单
POST/api/mp/conditional-menus/{id}/publishmp:condmenu:publish发布个性化菜单
DELETE/api/mp/conditional-menus/{id}mp:condmenu:delete删除个性化菜单
POST/api/mp/conditional-menus/trymatchmp:condmenu:list菜单匹配测试

前端页面

页面路径主要能力
自定义菜单/mp/menu按钮编辑器、保存草稿、发布、拉取、删除
个性化菜单/mp/conditional-menus列表、两级按钮编辑器、匹配规则、发布 / 删除、匹配测试

Built with VitePress for local documentation preview.