Skip to main content

公众号菜单相关

官方文档

注意

这里的菜单均是指通过代码创建的菜单,不能是在控制台手动创建的,手动创建的菜单格式与代码创建的不一样!切勿在控制台手动创建后通过代码进行维护

公众号的菜单有两种,一种是普适性的菜单,就是大家看到的都一样,一种是个性化菜单,就是不同的用户群体看到的菜单是不一样的。

普通菜单

普通菜单相关服务封装于 OfficialMenuService 类中,可通过如下方式引入:

import { OfficialMenuService } from '@iot9x.com/nestjs-official'

创建/更新菜单

微信公众号将创建更新接口合二为一,也就是每次改动菜单均是全量覆盖

/**
* 创建/更新公众号菜单
* @param appid 公众号appID
* @param data 公众号菜单信息
* @returns 创建/更新结果
*/
async create(appid: string, data: OfficialMenu): Promise<CreateMenuResponse> {}

其中 OfficialMenu 类型的定义如下所示:

展开查看OfficialMenu类型定义
import { OfficialMenuButtonType } from '../constants/official.constant';

/** 二级菜单按钮 */
export interface OfficialMenuSubButton {
/** 菜单的响应动作类型 */
type: OfficialMenuButtonType;
/** 菜单标题,不超过60个字节 */
name: string;
/**
* 菜单KEY值,用于消息接口推送,不超过`128`字节
* click等点击类型必须
*/
key?: string;
/**
* 网页 链接,用户点击菜单可打开链接,不超过`1024`字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。
* view、miniprogram类型必须
*/
url?: string;
/**
* 调用新增永久素材接口返回的合法media_id
* media_id类型和view_limited类型必须
*/
media_id?: string;
/**
* 小程序的appid(仅认证公众号可配置)
* miniprogram类型必须
*/
appid?: string;
/**
* 小程序的页面路径
* miniprogram类型必须
*/
pagepath?: string;
}

/** 一级菜单按钮 */
export interface OfficialMenuButton {
/** 菜单的响应动作类型 */
type: OfficialMenuButtonType;
/** 菜单标题,不超过16个字节 */
name: string;
/**
* 菜单KEY值,用于消息接口推送,不超过`128`字节
* click等点击类型必须
*/
key?: string;
/**
* 网页 链接,用户点击菜单可打开链接,不超过`1024`字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。
* view、miniprogram类型必须
*/
url?: string;
/**
* 调用新增永久素材接口返回的合法media_id
* media_id类型和view_limited类型必须
*/
media_id?: string;
/**
* 小程序的appid(仅认证公众号可配置)
* miniprogram类型必须
*/
appid?: string;
/**
* 小程序的页面路径
* miniprogram类型必须
*/
pagepath?: string;
/** 二级菜单按钮列表 */
sub_button?: OfficialMenuSubButton[];
}

/** 公众号菜单类型 */
export interface OfficialMenu {
/** 一级菜单列表 */
button: OfficialMenuButton[];
}

删除菜单

注意

在调用删除接口时,会同时删除普通菜单和所有个性化菜单

/**
* 删除公众号菜单
* @param appid 公众号appID
* @returns 删除结果
*/
async delete(appid: string): Promise<DeleteMenuResponse> {}

查询菜单

/**
* 查询公众号菜单信息
* @param appid 公众号appID
* @returns 查询结果
*/
async query(appid: string): Promise<QueryMenuResponse> {}

个性化菜单

个性化菜单相关服务封装于 OfficialCustomMenuService 类中,可通过如下方式引入:

import { OfficialCustomMenuService } from '@iot9x.com/nestjs-official'

创建个性化菜单

/**
* 创建公众号个性化菜单
* @param appid 公众号appID
* @param data 公众号个性化菜单信息
* @returns 创建结果
*/
async create(appid: string, data: OfficialCustomMenu): Promise<CreateCustomMenuResponse> {}

其中 OfficialCustomMenu 类型的定义如下所示:

import { OfficialMenu } from './official-menu.interface';

/** 公众号菜单类型 */
export interface OfficialCustomMenu extends OfficialMenu {
/** 菜单匹配规则 */
matchrule: {
/** 用户标签的id,可通过用户标签管理接口获取 */
tag_id?: string;
/** 性别:男(1)女(2),不填则不做匹配 */
sex?: '1' | '2';
/** 客户端版本,当前只具体到系统型号:IOS(1), Android(2),Others(3),不填则不做匹配 */
client_platform_type?: '1' | '2' | '3';
/** 国家信息,是用户在微信中设置的地区,具体请参考地区信息表 */
country?: string;
/** 省份信息,是用户在微信中设置的地区,具体请参考地区信息表 */
province?: string;
/** 城市信息,是用户在微信中设置的地区,具体请参考地区信息表 */
city?: string;
/** 语言信息,是用户在微信中设置的语言 */
language?: string;
};
}