# 小程序聊天工具开放模式开发指南

# 一、功能介绍

聊天工具模式是为了帮助小程序更好与微信聊天结合而推出的模式,可用于实现群问卷、群拼单、群接龙等功能。其与小程序普通模式区别在于:

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