自定义菜单概述
公众号底部菜单是用户第一入口:最多三级菜单,一级最多三个,二级最多五个。菜单动作分两类:click 触发事件、view 跳转链接。通过接口创建的菜单,点击事件会推送到你的服务器,形成互动闭环。
菜单接口与消息接口共用一套 access_token。菜单创建、查询、删除都有对应接口,开发环境可以先调用再线上发布。
菜单 = 公众号的门面,事件 = 门面的响应。
- click点击推送事件。
- view跳转网页。
- media回复素材。
- 个性化按标签分流。
菜单接口调用
创建菜单用 POST 到菜单接口,body 是 JSON 菜单结构。先取 access_token,再提交菜单,返回 errcode 0 表示成功。菜单发布前先查询,确认结构与预期一致。
const menu = {
button: [
{ type: 'click', name: '在线客服', key: 'K_SERVICE' },
{ type: 'view', name: '官网', url: 'https://example.com' }
]
};
// POST /cgi-bin/menu/create?access_token=TOKEN
菜单事件处理
用户点 click 菜单,微信把事件 XML 推送到配置的服务器地址。服务器解析 Event 字段为 CLICK,取出 EventKey,按 key 路由处理:回复文本、图文、跳转等。
switch (msg.Event) {
case 'CLICK':
handleClick(msg.EventKey);
break;
case 'VIEW':
logView(msg.EventKey);
break;
}
消息接口对接
菜单事件和用户消息都走同一个接收接口。接收后校验签名、解析 XML、路由处理、拼装回复。被动回复有 5 秒超时,超过就用客服消息接口主动发。
接入时先在公众平台填服务器 URL 和 Token,保存前微信会发验证请求,服务器按签名规则返回 echostr 即通过。
个性化菜单
按用户标签、性别、地区显示不同菜单:新用户看到引导菜单,会员看到会员中心。个性化菜单接口带 matchrule,创建后先发布再生效。
个性化菜单数量有限制,别滥用。线上长期保留一套通用菜单,个性化菜单临时叠加活动入口,活动结束就删。
- 通用长期稳定入口。
- 个性化活动临时分流。
- 事件每个 key 有处理。
- 日志点击留痕。
调试与发布
开发环境用测试号调菜单接口,线上先查询再覆盖。菜单改错最坏情况是按钮错位,不会丢数据,但用户点错很影响体验,所以发布前把每个 key 的事件日志打一遍。
用菜单管理后台看实时点击数据,活动入口上线首日盯转化,异常马上回滚到通用菜单。
小结与延伸阅读
公众号自定义菜单四步走:接口建菜单、事件接处理、消息接口通、个性化分流。门面立得住,用户才愿意往里走。
- JS-SDK 网页授权读《微信 JS-SDK 网页授权实战》。
- 内容运营读《公众号排版与内容运营实战》。
- 小程序开发读《小程序开发入门实战》。