AgentSkillsCN

wechat-chat-tool

微信小程序聊天工具开发指南。当开发聊天工具分包、配置 chatTools、发送消息到群聊、动态消息、获取群成员信息、wx.openChatTool、wx.getChatToolInfo 时使用。

中文原作
SKILL.md
--- frontmatter
name: wechat-chat-tool
description: 微信小程序聊天工具开发指南。当开发聊天工具分包、配置 chatTools、发送消息到群聊、动态消息、获取群成员信息、wx.openChatTool、wx.getChatToolInfo 时使用。

微信小程序聊天工具开发指南

基础库 3.7.8+ 支持,Android/iOS 微信 8.0.56+

快速配置

app.json 配置示例

json
{
  "subPackages": [
    {
      "root": "packageChatTool",
      "pages": ["pages/entry/index"],
      "entry": "entry.js", // 独立分包入口文件(必须)
      "independent": true,
      "componentFramework": "glass-easel",
      "renderer": "skyline"
    }
  ],
  "chatTools": [{
    "root": "packageChatTool",
    "entryPagePath": "pages/entry/index",
    "desc": "功能描述",
    "scopes": []
  }],
  "rendererOptions": {
    "skyline": {
      "disableABTest": true,
      "defaultDisplayBlock": true,
      "defaultContentBox": true
    }
  }
}

其中 entry.js 的代码通常:

code
// 独立分包入口文件
// 用于聊天工具模式的初始化

const enterOptions = wx.getEnterOptionsSync()
console.log('[ChatTool Entry] Enter options:', enterOptions)

注意事项:

  • 分包体积不超过 500KB
  • 必须使用 skyline 渲染
  • 每个小程序目前仅支持配置一个聊天工具

核心 API

进入/退出聊天模式

API用途
wx.openChatTool打开聊天工具模式(可传入 opengid 或 open_single_roomid)
wx.getApiCategory判断是否在聊天工具模式(apiCategory === 'chatTool')
wx.navigateBack退出聊天工具模式

获取聊天信息

API用途
wx.getChatToolInfo在聊天工具分包内获取绑定群聊信息
wx.getGroupEnterInfo进入前获取群聊 id 信息
wx.selectGroupMembers选择聊天室成员,返回 group_openid

ID 类型

  • opengid: 群聊唯一标识
  • open_single_roomid: 单聊唯一标识
  • group_openid: 用户在此聊天室下的唯一标识

发送到聊天

API用途
wx.shareAppMessageToGroup发送小程序卡片
wx.notifyGroupMembers发送提醒消息(@成员 + 任务)
wx.shareImageToGroup发送图片
wx.shareVideoToGroup发送视频
wx.shareFileToGroup发送文件
wx.shareEmojiToGroup发送表情

动态消息

  1. 服务端创建 activity_id
  2. 前端 wx.updateShareMenu 声明动态消息
  3. 服务端 setChatToolMsg 更新状态
javascript
wx.updateShareMenu({
  withShareTicket: true,
  isUpdatableMessage: true,
  activityId: "xxx",
  useForChatTool: true,
  chooseType: 1, // 1=指定成员, 2=全部成员
  participant: members,
  templateInfo: {
    templateId: "4A68CBB88A92B0A9311848DBA1E94A199B166463", // 完成类
    // 或 '2A84254B945674A2F88CE4970782C402795EB607' 参与类
  },
});

禁用能力

聊天工具模式下不支持:

  • 普通转发(button open-type=share)
  • 外跳接口(navigateToMiniProgram 等)
  • 广告组件(ad、ad-custom)

7. 聊天工具核心API详解

wx.openChatTool

打开聊天工具。

参数

Object object
属性类型默认值必填说明
urlstring聊天工具分包内的页面路径
roomidstring聊天室id,不传则拉起群选择框,可以传入多聊群的 opengid 值,或者单聊群的 open_single_roomid 值
chatTypenumber群聊类型
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
object.chatType 合法值
说明
1微信联系人单聊
2企业微信联系人单聊
3普通微信群聊
4企业微信互通群聊

示例代码

javascript
wx.openChatTool({
  url: "pages/chat/index", // 示例路径
  chatType: 1, // 微信联系人单聊
  success(res) {
    console.log("打开聊天工具成功", res);
  },
  fail(err) {
    console.error("打开聊天工具失败", err);
  },
});

wx.getApiCategory

wx.getApiCategory()

基础库 2.22.1 开始支持,低版本需做 兼容处理

获取当前小程序的 API 类别。

返回值
string

当前 API 类别。

合法值

说明
default默认类别
nativeFunctionalized原生功能化,视频号直播商品、商品橱窗等场景打开的小程序
browseOnly仅浏览,朋友圈快照页等场景打开的小程序
embedded内嵌,通过打开半屏小程序能力打开的小程序
chatTool聊天工具打开小程序
示例代码
javascript
const apiCategory = wx.getApiCategory();
console.log(apiCategory);

wx.shareAppMessageToGroup

wx.shareAppMessageToGroup(Object object)

基础库 3.7.12 开始支持,低版本需做 兼容处理

转发小程序卡片到聊天。

参数
Object object
属性类型默认值必填说明
titlestring转发标题
pathstring当前页面转发路径,必须是以 / 开头的完整路径,默认为当前页面
imageUrlstring截图自定义图片路径,支持 PNG 及 JPG,显示图片长宽比是 5:4,默认使用截图
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
示例代码
javascript
wx.shareAppMessageToGroup({
  title: "分享标题",
  path: "/path/to/page",
  imageUrl: "",
});

wx.shareVideoToGroup

wx.shareVideoToGroup(Object object)

分享视频到聊天。

参数
Object object
属性类型默认值必填说明
videoPathstring要分享的视频地址,必须为本地路径或临时路径
thumbPathstring缩略图路径,若留空则使用视频首帧
needShowEntrancebooleantrue分享的图片消息是否要带小程序入口
entrancePathstring''从消息小程序入口打开小程序的路径,默认为聊天工具启动路径
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
示例代码
javascript
wx.shareVideoToGroup({
  videoPath: "path/to/video.mp4",
  thumbPath: "path/to/thumb.png",
  needShowEntrance: true,
  success(res) {
    console.log("分享视频成功", res);
  },
  fail(err) {
    console.error("分享视频失败", err);
  },
});

wx.shareImageToGroup

wx.shareImageToGroup(Object object)

分享图片到聊天。

参数
Object object
属性类型默认值必填说明
imagePathstring要分享的图片地址,必须为本地路径或临时路径
needShowEntrancebooleantrue分享的图片消息是否要带小程序入口
entrancePathstring''从消息小程序入口打开小程序的路径,默认为聊天工具启动路径
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
示例代码
javascript
wx.shareImageToGroup({
  imagePath: "path/to/image.png",
  needShowEntrance: true,
  success(res) {
    console.log("分享图片成功", res);
  },
  fail(err) {
    console.error("分享图片失败", err);
  },
});

wx.shareEmojiToGroup

wx.shareEmojiToGroup(Object object)

分享表情到聊天。

参数
Object object
属性类型默认值必填说明
imagePathstring要分享的表情地址,必须为本地路径或临时路径
needShowEntrancebooleantrue分享的表情消息是否要带小程序入口
entrancePathstring''从消息小程序入口打开小程序的路径,默认为聊天工具启动路径
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
示例代码
javascript
wx.shareEmojiToGroup({
  imagePath: "path/to/image.png",
  needShowEntrance: true,
  success(res) {
    console.log("分享表情成功", res);
  },
  fail(err) {
    console.error("分享表情失败", err);
  },
});

wx.selectGroupMembers

wx.selectGroupMembers(Object object)

从群组中选择成员。

参数
Object object
属性类型默认值必填说明
maxSelectCountnumber最多可选人数
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
object.success 回调函数

####### 参数

######## Object res

属性类型说明
membersArray.<string>所选用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下id不同
示例代码
javascript
wx.selectGroupMembers({
  maxSelectCount: 10,
  success(res) {
    console.log("选择成员成功", res.members);
  },
  fail(err) {
    console.error("选择成员失败", err);
  },
});

wx.notifyGroupMembers

wx.notifyGroupMembers(Object object)

发送消息提醒群成员。

参数
Object object
属性类型默认值必填说明
titlestring文字链标题,发送的内容将由微信拼接为:@的成员列表+“请完成:”/"请参与:"+打开小程序的文字链,如「@alex @cindy 请完成:团建报名统计」。
membersArray.<string>需要提醒的用户 group_openid 列表
entrancePathstring文字链跳转路径
typestringcomplete展示的动词
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
object.type 合法值
说明
participate请参与
complete请完成
示例代码
javascript
wx.notifyGroupMembers({
  title: "团建报名统计",
  members: ["openid1", "openid2"],
  entrancePath: "/pages/index/index",
  type: "complete",
  success(res) {
    console.log("提醒成功", res);
  },
  fail(err) {
    console.error("提醒失败", err);
  },
});

完整文档

详见 reference.md