# 小程序聊天工具开放模式开发指南
# 一、功能介绍
聊天工具模式是为了帮助小程序更好与微信聊天结合而推出的模式,可用于实现群问卷、群拼单、群接龙等功能。其与小程序普通模式区别在于:
1. 开放更多与聊天紧密结合的能力:
| 能力 | 说明 | 图示 |
|---|---|---|
| 聊天成员相关能力 | 开发者可调用聊天成员选择器并获取成员相关id,通过open-data渲染聊天成员的头像昵称 | ![]() |
| 发送内容到聊天能力 | 开发者可发送文本、提醒、图片、表情、视频等内容类型到聊天中 | ![]() |
| 动态消息能力 | 小程序卡片上的辅标题可以动态更新,在用户完成/参与了活动后下发系统消息 | ![]() |
# 二、开发指南
从基础库 3.12.0 版本开始支持
支持平台:iOS 8.0.65 及以上版本;Android 8.0.65 及以上版本
# 1. 进入聊天工具模式
开发者调用 wx. enterChatToolMode 后,可选择在 chatToolRooms 传入 opengid 以进入聊天模式,并获得聊天成员相关接口的调用权限;如果未传入 opengid,则将拉起群聊选择器;
开发者可通过 wx.isChatTool 判断当前是否处于聊天工具模式;
聊天工具模式下应使用 group_openid 作为用户唯一标识。
# 1.1 wx.getGroupEnterInfo
功能描述:进入聊天工具模式前,获取群聊 id 信息
入参:
| 属性 | 类型 | 说明 |
|---|---|---|
| allowSingleChat | boolean | 为 true 时才会返回单聊下的 open_single_roomid |
| needGroupOpenID | boolean | 为 true 时才会返回 group_openid |
返回参数(数据加密返回,解密请参考:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/group/wx.getGroupEnterInfo.html):
| 属性 | 类型 | 说明 |
|---|---|---|
| opengid | string | 群聊唯一标识,绑定的聊天室为群聊时返回 |
| open_single_roomid | string | 单聊唯一标识,绑定的聊天室为单聊时返回 |
| group_openid | string | 当前微信用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下id不同 |
| chat_type | number | 微信聊天类型,1:微信联系人单聊;2:企业微信联系人单聊;3:普通微信群聊;4:企业微信互通群聊 |
# 1.2 wx.getChatToolInfo
功能描述:进入聊天工具模式后,获取群聊 id 信息
返回参数(数据加密返回,解密请参考:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/group/wx.getGroupEnterInfo.html):
| 属性 | 类型 | 说明 |
|---|---|---|
| opengid | string | 群聊唯一标识,绑定的聊天室为群聊时返回 |
| open_single_roomid | string | 单聊唯一标识,绑定的聊天室为单聊时返回 |
| group_openid | string | 当前微信用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下id不同 |
| chat_type | number | 微信聊天类型,1:微信联系人单聊;2:企业微信联系人单聊;3:普通微信群聊;4:企业微信互通群聊 |
# 1.3 wx.selectGroupMembers
功能描述:选择聊天室的成员,并返回选择成员的 group-openid。若当前为群聊,则会拉起成员选择器;若当前为单聊,则直接返回对方用户的 group-openid
请求参数:
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| maxSelectCount | number | 否 | 最多可选人数 |
返回参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| members | string[] | 所选用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下 id 不同 |
# 1.5
功能描述:用于渲染聊天成员的头像昵称
属性:
<open-data-list>
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 渲染类型,固定为groupMembers |
| members | string[] | 是 | 需要展示的用户此聊天室下的唯一标识列表 |
<open-data-item>
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 开放数据类型,userNickName:用户昵称;userAvatarUrl:用户头像 |
代码示例:
<open-data-list type="groupMembers" members="[groupOpenID1, groupOpenID2]">
<view class="userinfo" slot:index>
<open-data-item class="avatar " type="userAvatar" index="{{index}}" /> <open-data-item class="" type="userNickName" index="{{index}}" />
</view>
</open-data-list>
# 2. 发送到聊天能力
可支持小程序卡片、提醒消息、文本、图片、表情、文件的发送,如果选择了多个群聊,单次仅支持将内容发送到特定的单个群聊中。
# 2.1 wx.shareAppMessageToGroup
功能描述:将小程序卡片发送到绑定的聊天室
请求参数:
| 属性 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| title | string | 是 | 小程序卡片标题 | |
| opengid | string | 否 | 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写 | |
| path | string | 否 | 转发路径 | 聊天工具的 entryPagePath |
| imageUrl | string | 否 | 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持 PNG 及 JPG。显示图片长宽比是 5:4 | 使用默认截图 |
返回参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| errMsg | string | 错误信息 |
# 2.2 wx.notifyGroupMembers
功能描述:提醒用户完成任务,发送的内容将由微信拼接为:@的成员列表+“请完成:”/"请参与:"+打开小程序的文字链,如「@alex @cindy 请完成:团建报名统计」
请求参数:
| 属性 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| title | string | 是 | 文字链标题 | |
| opengid | string | 否 | 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写 | |
| members | string[] | 是 | 需要提醒的用户 group-openid 列表 | |
| entrancePath | string | 是 | 文字链跳转路径 | |
| type | string | 是 | 展示的动词:participate:“请参与”;complete:“请完成” |
返回参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| errMsg | string | 错误信息 |
# 2.3 form 组件
<form bind:submitToGroup="onSubmitToGroup"> <button form-type="submitToGroup">
功能描述:将输入框内的文本内容发送到绑定的聊天室,可携带返回聊天工具模式的小程序的小尾巴
属性:
<form>
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| bind:submitToGroup | string | 是 | 用户触发发送文本到聊天后会触发的事件 |
<button>
| 属性 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| form-type | string | 是 | 需填入 submitToGroup,表示将文本发送到聊天 | |
| opengid | string | 否 | 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写 | |
| need-show-entrance | boolean | 否 | 是否在文本消息下展示进入小程序的小尾巴 | true |
| entrance-path | string | 否 | 小尾巴跳转路径 | 聊天工具的 entryPagePath |
# 2.4 wx.shareImageToGroup
功能描述:将图片发送到绑定的聊天室,可携带返回聊天工具模式的小程序的小尾巴
请求参数:
| 属性 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| imagePath | string | 是 | 图片路径,可以是本地文件路径或临时路径 | |
| opengid | string | 否 | 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写 | |
| needShowEntrance | string | 否 | 是否在图片消息下展示进入小程序的小尾巴 | true |
| entrancePath | string | 否 | 小尾巴跳转路径 | 聊天工具的 entryPagePath |
返回参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| errMsg | string | 错误信息 |
# 2.5 wx.shareEmojiToGroup
功能描述:将表情发送到绑定的聊天室,可携带返回聊天工具模式的小程序的小尾巴
请求参数:
| 属性 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| imagePath | string | 是 | 表情路径,可以是本地文件路径或临时路径 | |
| opengid | string | 否 | 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写 | |
| needShowEntrance | string | 否 | 是否在表情消息下展示进入小程序的小尾巴 | true |
| entrancePath | string | 否 | 小尾巴跳转路径 | 聊天工具的 entryPagePath |
返回参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| errMsg | string | 错误信息 |
# 2.6 wx.shareVideoToGroup
功能描述:将视频发送到绑定的聊天室,可携带返回聊天工具模式的小程序的小尾巴
请求参数:
| 属性 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| videoPath | string | 是 | 视频路径,可以是本地文件路径或临时路径 | |
| opengid | string | 否 | 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过 wx.selectGroupMembers 选择单个聊天后,opengid 无需填写 | |
| thumbPath | string | 否 | 缩略图路径,若留空则使用视频首帧 | |
| needShowEntrance | string | 否 | 是否在视频消息下展示进入小程序的小尾巴 | true |
| entrancePath | string | 否 | 小尾巴跳转路径 | 聊天工具的 entryPagePath |
返回参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| errMsg | string | 错误信息 |
# 2.7 wx.shareFileToGroup
功能描述:将文件发送到绑定的聊天室,可携带返回聊天工具模式的小程序的小尾巴
请求参数:
| 属性 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| filePath | string | 是 | 文件路径,可以是本地文件路径或临时路径 | |
| opengid | string | 否 | 通过 wx.selectGroups 选择聊天后,opengid为必填;通过 wx.selectGroupMembers 选择单个聊天后,opengid 无需填写 | |
| needShowEntrance | string | 否 | 是否在文件消息下展示进入小程序的小尾巴 | true |
| entrancePath | string | 否 | 小尾巴跳转路径 | 聊天工具的 entryPagePath |
返回参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| errMsg | string | 错误信息 |
# 3. 动态消息能力
从聊天模式中发送的小程序卡片,可以获得动态消息能力,该能力的用户表现包括:
1. 小程序卡片上的辅标题可以动态更新
2. 可以在聊天中下发系统消息,内容为:成员A+“完成了”/"参与了"+成员B+“发布的”+打开小程序的文字链,如「alex 完成了 cindy 发布的 团建报名统计」
该功能的开发步骤包括:
1. 服务端通过创建activity_id接口创建 activity_id
2. 前端通过 wx.updateShareMenu 声明要分享的卡片为动态消息,请求参数如下:
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| withShareTicket | boolean | 是 | 是否使用带 shareTicket 的转发,固定为 true |
| isUpdatableMessage | boolean | 是 | 是否是动态消息,固定为 true |
| activityId | string | 是 | 动态消息的 activityId,通过步骤1中的接口获取 |
| useForChatTool | boolean | 是 | 聊天工具模式特殊动态消息 |
| chooseType | number | 是 | 指定成员的方式 |
| participant | string[] | 是 | 需参与用户此聊天室下的唯一标识列表 |
| templateInfo | Object | 是 | 动态消息的模板信息,固定为 {templateId: '4A68CBB88A92B0A9311848DBA1E94A199B166463'} 或 {templateId: '2A84254B945674A2F88CE4970782C402795EB607'} |
useForChatTool 为 true 时,chooseType 和 participant 才会生效
chooseType = 1,表示按指定的 participant 当作参与者
chooseType = 2,表示群内所有成员均为参与者(包括后加入群)
代码示例:
wx.updateShareMenu({
withShareTicket: true,
isUpdatableMessage: true,
activityId: 'xxx',
useForChatTool: true,
chooseType: 1,
participant: that.data.members,
templateInfo: {
templateId: '4A68CBB88A92B0A9311848DBA1E94A199B166463'
}
})
模版区别(target_state 与 participator_state 含义见步骤3):
| templateId | 4A68CBB88A92B0A9311848DBA1E94A199B166463 | 2A84254B945674A2F88CE4970782C402795EB607 |
|---|---|---|
| 动态消息发布者在小程序卡片中看到的辅标题 | target_state=1或2:X人已完成 target_state=3:已结束 | target_state=1或2:X人已参与 target_state=3:已结束 |
| 参与者在小程序卡片中看到的辅标题 | participator_state=0时: ● target_state=1:未完成 ● target_state=2:即将截止 ● target_state=3:已结束 participator_state=1时: ● target_state=1或2:已完成 ● target_state=3:已结束 | participator_state=0时: ● target_state=1:未参与 ● target_state=2:即将截止 ● target_state=3:已结束 participator_state=1时: ● target_state=1或2:已参与 ● target_state=3:已结束 |
| 非参与者在小程序卡片中看到的辅标题 | target_state=1或2:你无需完成 target_state=3:已结束 | target_state=1或2:你无需参与 target_state=3:已结束 |
| 参与者变为完成态下发的系统消息文案 | aaa 已完成 bbb 发布的 XXX | aaa 已参与 bbb 发布的 XXX |
1. 服务端通过 setChatToolMsg 接口更新活动状态或用户完成情况,调用方式:
POST https://api.weixin.qq.com/cgi-bin/message/wxopen/chattoolmsg/send?access_token=ACCESS_TOKEN
也可通过云开发调用,接口名 chattoolmsg.send
请求参数:
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| access_token | string | 是 | 接口调用凭证 |
| activity_id | string | 是 | 动态消息的 activityId,通过步骤1中的接口获取 |
| target_state | number | 是 | 活动状态,初始值为1(表示开始收集态),此处可设置为2(即将截止态)、3(已结束态) |
| participator_info_list | array | 否 | 更新后的聊天室成员状态,当target_state=1时必填,target_state=2或3时无需填写 |
| version_type | number | 是 | 系统消息文字链打开的小程序版本,0 正式版,1 开发版,2 体验版 |
participator_info_list参数如下:
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| group_openid | string | 是 | 聊天室成员在此聊天室下的唯一标识 |
| state | number | 是 | 用户对卡片事件的完成状态。所有参与者的初始值为0(未完成态),此处仅支持设置为1,表示完成态。 |
调用示例:
//变更单个成员状态
{
"activity_id": "xxx",
"target_state":1,
"version_type": 0,
"participator_info_list": [
{
"group_openid": "aaa",
"state": 1
},
{
"group_openid": "bbb",
"state": 1
}
]
}
//变更动态消息状态
{
"activity_id": "xxx",
"target_state":3,
"version_type": 0,
}
# 4. 聊天工具模式内禁用的能力
以下能力暂不支持聊天工具模式下使用,请开发者做好适配
| 能力项 | 禁用说明 |
|---|---|
<button open-type=share> | 聊天工具模式禁用普通转发能力,请使用上文「发送到聊天能力开放」中的接口实现 |
| 小程序右上角「…-发送给朋友」 | |
| navigateToMiniProgram | 聊天工具模式希望服务尽可能闭环在小程序中,外跳类接口暂不支持使用 |
| openEmbeddedMiniProgram | |
| openOfficialAccountArticle | |
| openChannelsUserProfile | |
| openChannelsLive | |
| openChannelsEvent | |
| openChannelsActivity | |
| ad | 聊天工具模式暂不支持广告 |
| ad-custom |


