为了帮助公众号实现灵活的业务运营,微信公众平台新增了个性化菜单接口,开发者可以通过该接口,让公众号的不同用户群体看到不一样的自定义菜单。该接口开放给已认证订阅号和已认证服务号。

开发者可以通过以下条件来设置用户看到的菜单:

  1. 用户标签(开发者的业务需求可以借助用户标签来完成)
  2. 性别
  3. 手机操作系统
  4. 地区(用户在微信客户端设置的地区)
  5. 语言(用户在微信客户端设置的语言)

注意:为保护个人隐私,公众号个性化菜单将不再支持对性别、地区、语言这类涉及个人隐私数据的信息进行筛选的功能,具体调整如下:

  1. 创建时,只要匹配条件中包含隐私信息的,将被拒绝,并返回错误码 65320;
  2. 已经创建的,如包含隐私信息的则自动失效,不包含的则正常匹配;
  3. 开发者仍然可以正常通过测试接口,获取到粉丝看到的菜单;
  4. 查询个性化菜单时,所有规则正常显示。

个性化菜单接口说明:

  1. 个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Android 6.2.4以上,暂时不支持其他版本微信
  2. 菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果
  3. 普通公众号的个性化菜单的新增接口每日限制次数为2000次,删除接口也是2000次,测试个性化菜单匹配结果接口为20000次
  4. 出于安全考虑,一个公众号的所有个性化菜单,最多只能设置为跳转到3个域名下的链接
  5. 创建个性化菜单之前必须先创建默认菜单(默认菜单是指使用普通自定义菜单创建接口创建的菜单)。如果删除默认菜单,个性化菜单也会全部删除
  6. 个性化菜单接口支持用户标签,请开发者注意,当用户身上的标签超过1个时,以最后打上的标签为匹配

个性化菜单匹配规则说明:

个性化菜单的更新是会被覆盖的。 例如公众号先后发布了默认菜单,个性化菜单1,个性化菜单2,个性化菜单3。那么当用户进入公众号页面时,将从个性化菜单3开始匹配,如果个性化菜单3匹配成功,则直接返回个性化菜单3,否则继续尝试匹配个性化菜单2,直到成功匹配到一个菜单。 根据上述匹配规则,为了避免菜单生效时间的混淆,决定不予提供个性化菜单编辑API,开发者需要更新菜单时,需将完整配置重新发布一轮。

目录

1 创建个性化菜单

2 删除个性化菜单

3 测试个性化菜单匹配结果

4 查询个性化菜单

5 删除所有菜单

# 创建个性化菜单

http请求方式:POST(请使用https协议)

https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=ACCESS_TOKEN

请求示例

{
    "button": [
        {
            "type": "click", 
            "name": "今日歌曲", 
            "key": "V1001_TODAY_MUSIC"
        }, 
        {
            "name": "菜单", 
            "sub_button": [
                {
                    "type": "view", 
                    "name": "搜索", 
                    "url": "http://www.soso.com/"
                }, 
                {
                    "type": "miniprogram", 
                    "name": "wxa", 
                    "url": "http://mp.weixin.qq.com", 
                    "appid": "wx286b93c14bbf93aa", 
                    "pagepath": "pages/lunar/index"
                }, 
                {
                    "type": "click", 
                    "name": "赞一下我们", 
                    "key": "V1001_GOOD"
                }
            ]
        }
    ], 
    "matchrule": {
        "tag_id": "2", 
        "sex": "1", 
        "country": "中国", 
        "province": "广东", 
        "city": "广州", 
        "client_platform_type": "2", 
        "language": "zh_CN"
    }
}

参数说明

参数 是否必须 说明
button 一级菜单数组,个数应为1~3个
sub_button 二级菜单数组,个数应为1~5个
type 菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型
name 菜单标题,不超过16个字节,子菜单不超过40个字节
key click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节
url view、miniprogram类型必须 网页链接,用户点击菜单可打开链接,不超过1024字节。当type为miniprogram时,不支持小程序的老版本客户端将打开本url
media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id
article_id article_id类型和article_view_limited类型必须 发布后获得的合法 article_id
appid miniprogram类型必须 小程序的appid
pagepath miniprogram类型必须 小程序的页面路径
matchrule 菜单匹配规则
tag_id 用户标签的id,可通过用户标签管理接口获取
sex 已废除 性别:男(1)女(2),不填则不做匹配
client_platform_type 客户端版本,当前只具体到系统型号:IOS(1), Android(2),Others(3),不填则不做匹配
country 已废除 国家信息,是用户在微信中设置的地区,具体请参考地区信息表
province 已废除 省份信息,是用户在微信中设置的地区,具体请参考地区信息表
city 已废除 城市信息,是用户在微信中设置的地区,具体请参考地区信息表
language 已废除 语言信息,是用户在微信中设置的语言,具体请参考语言表: 1、简体中文 "zh_CN" 2、繁体中文TW "zh_TW" 3、繁体中文HK "zh_HK" 4、英文 "en" 5、印尼 "id" 6、马来 "ms" 7、西班牙 "es" 8、韩国 "ko" 9、意大利 "it" 10、日本 "ja" 11、波兰 "pl" 12、葡萄牙 "pt" 13、俄国 "ru" 14、泰文 "th" 15、越南 "vi" 16、阿拉伯语 "ar" 17、北印度 "hi" 18、希伯来 "he" 19、土耳其 "tr" 20、德语 "de" 21、法语 "fr"

button中将不再支持图文(news)类型永久素材的 media_id,请使用 article_id 代替 matchrule共七个字段,均可为空,但不能全部为空,至少要有一个匹配信息是不为空的。 country、province、city组成地区信息,将按照country、province、city的顺序进行验证,要符合地区信息表的内容。地区信息从大到小验证,小的可以不填,即若填写了省份信息,则国家信息也必填并且匹配,城市信息可以不填。 例如 “中国 广东省 广州市”、“中国 广东省”都是合法的地域信息,而“中国 广州市”则不合法,因为填写了城市信息但没有填写省份信息。 地区信息表请 点击下载

返回结果

正确时的返回JSON数据包如下,错误时的返回码请见接口错误码说明。

{"menuid":"208379533"}

注意

请留意参数说明表中已废止的字段,这些字段涉及公民个人隐私,如填写这些字段,接口将返回以下结果:

{"errcode":65320,"errmsg":"match rule violates privacy"}

至于其他返回码,请见接口错误码说明。

错误码说明

错误码 错误信息 解决方案
公共错误码 点击查看
53600 Article ID 无效

# 删除个性化菜单

http请求方式:POST(请使用https协议)

https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token=ACCESS_TOKEN

请求示例

{"menuid":"208379533"}

menuid为菜单id,可以通过自定义菜单查询接口获取。

正确时的返回JSON数据包如下,错误时的返回码请见接口返回码说明。:

{"errcode":0,"errmsg":"ok"}

# 测试个性化菜单匹配结果

http请求方式:POST(请使用https协议)

https://api.weixin.qq.com/cgi-bin/menu/trymatch?access_token=ACCESS_TOKEN

请求示例

{"user_id":"weixin"}

user_id可以是粉丝的OpenID,也可以是粉丝的微信号。

返回结果 该接口将返回菜单配置,示例如下:

{
    "button": [
        {
            "type": "view", 
            "name": "tx", 
            "url": "http://www.qq.com/", 
            "sub_button": [ ]
        }, 
        {
            "type": "view", 
            "name": "tx", 
            "url": "http://www.qq.com/", 
            "sub_button": [ ]
        }, 
        {
            "type": "view", 
            "name": "tx", 
            "url": "http://www.qq.com/", 
            "sub_button": [ ]
        }
    ]
}

注意 包含 已废除字段 的菜单也将自动失效,不再被匹配。这一点也将体现在本测试接口中。

另外,错误时的返回码请见接口返回码说明。

# 查询个性化菜单

使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,请见自定义菜单查询接口的说明。

注意 查询时,包含 已废除字段 的菜单虽然会照常返回,但不再有效。

# 删除所有菜单

使用普通自定义菜单删除接口可以删除所有自定义菜单(包括默认菜单和全部个性化菜单),请见自定义菜单删除接口的说明。