二、下发条件说明

当用户和微信小程序客服产生特定动作的交互时(具体动作列表请见下方说明),微信小程序可向用户下发客服消息。

目前允许的动作列表如下,不同动作触发后,允许下发消息条数和下发时限不同。下发条数达到上限后,会返回错误码。

用户动作 允许下发条数限制 下发时限
用户发送信息 5 条 48 小时
用户进入客服消息 2 条 1 分钟

可发送客服消息条数不累加,上述用户动作会触发可下发条数及可下发时限的更新,可下发消息条数更新为当前可下发条数限制的最大值,有效下发时间限制也更新为最长有效时间。

三、调用客服消息接口发送客服消息

当用户给微信小程序客服发消息,微信服务器会将消息(或事件)的数据包(JSON或者XML格式)POST到开发者填写的URL。开发者收到请求后可以调用接口进行异步回复。

如果微信小程序的客服消息权限集已授权给第三方平台,那么所有的客服消息都会推送到第三方平台的服务器,而不再推送到开发者的服务器或网页版客服工具。

3.1 填写消息推送配置

登录微信小程序,在“设置-开发设置-消息推送”中启用消息推送功能,并完成相关信息配置(包括服务器地址、Token、以及加密方式等)。

启用并设置服务器配置后,用户发送的消息以及开发者需要的事件推送,都会被微信转发到开发者的URL中。

3.2 接口调用

微信小程序客服消息API文档

四、客服工具

微信小程序也可以直接使用网页端微信小程序客服或者移动端「客服小助手」微信小程序进行客服消息回复。

以下是客服小助手微信小程序码:

微信小程序没有启用消息推送,则用户发送的消息将会被转发至网页端微信小程序客服和移动端「客服小助手」,客服人员可在网页端微信小程序客服和移动端「客服小助手」中接入并回复用户。

如微信小程序的客服消息权限集已授权给第三方平台,则所有的客服消息将推送到第三方平台的服务器,不再推送到开发者的服务器或推送到网页版客服工具。

注意:“用户通过客服消息按钮进入会话”事件将不会转发至网页端客服工具。

4.1 绑定客服人员

使用网页端与移动端微信小程序客服工具前,微信小程序管理员需在微信小程序后台完成客服人员的绑定。目前微信小程序支持绑定不多于100个客服人员。

4.2 移动端「客服小助手」微信小程序

登录并接入

已被绑定的微信小程序客服人员可微信搜索「客服小助手」或扫码登录「客服小助手」微信小程序,并选择对应的微信小程序账号,登录后即可看到与微信小程序对话的用户,可选择接入对话。

切换客服状态

点击在线状态,可以选择客服在线状态、客服离线状态:

  • 选择客服在线状态后,即使退出客服微信小程序,仍可在“服务通知”中接收到用户咨询的消息提醒;
  • 选择客服离线状态后,将无法收到客服消息与消息提醒。

接收与发送消息

打开「客服小助手」微信小程序后,进入“待接入列表”可选择用户会话进行接入; 已经接入的会话,客服人员可以在48小时内和用户进行对话,目前支持发送文本、图片、微信小程序卡片类型的消息。

4.3 网页端微信小程序客服工具使用说明

登录并接入

已被绑定的微信小程序客服人员可扫码登录网页端微信小程序客服,并选择对应的微信小程序账号,登录后即可看到与微信小程序对话的用户,可选择接入对话。

切换客服状态

点击在线状态,可以选择在线状态、离线状态

接收消息

手动接入:客服人员上线后,可在“待接入”列表中,手动接入待回复的用户会话。

自动接入:当待接入的用户会话太多时,可以在设置-接入与回复中,开启自动接入。

发送消息

已经接入的会话,客服人员可以在48小时内和用户进行对话,目前支持发送文本、图片、微信小程序卡片类型的消息。

五、使用规范

微信小程序客服消息的使用,除了必须遵守《微信小程序平台运营规范》外,还不能违反以下规则,包括但不限于:

  1. 不允许恶意诱导用户进行可能触发客服消息下发的操作,以达到可向用户下发客服消息的目的
  2. 不允许恶意骚扰,下发与用户发送的消息没有关联的、对用户造成骚扰的消息
  3. 不允许恶意营销,下发内容涉嫌虚假夸大、违法类营销信息
  4. 不允许使用客服消息向用户下发虚假、色情、暴力等违反国家法律规定的信息

六、开发文档

6.1 在页面使用客服消息

需要将 button 组件 open-type 的值设置为 contact,当用户点击后就会进入客服会话,如果用户在会话中点击了微信小程序消息,则会返回到微信小程序,开发者可以通过 bindcontact 事件回调获取到用户所点消息的页面路径 path 和对应的参数 query,开发者需根据路径自行跳转。此外,开发者可以通过设置 session-from 将会话来源透传到客服。

示例代码

<button open-type="contact" bindcontact="handleContact" session-from="sessionFrom"></button>
Page({
    handleContact (e) {
        console.log(e.detail.path)
        console.log(e.detail.query)
    }
})

返回参数说明

参数 类型 说明
path String 微信小程序消息指定的路径
query Object 微信小程序消息指定的查询参数

6.2 后台接入消息服务

用户向微信小程序客服发送消息、或者进入会话等情况时,开发者填写的服务器 URL (如果使用的是云开发,则是配置的云函数)将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应。接入和使用方式请参考消息推送。

6.3 后台接入消息报错自查

报错表现: 用户发送消息出现系统文案 “该微信小程序提供的服务出现故障,请稍后再试”。

报错原因: 微信小程序配置callback后,用户发送的消息会推送到第三方服务器,如推送失败就会报错。

自查方式:

  1. 微信小程序开启消息推送(微信小程序后台-开发管理-开发设置-消息推送)
  2. 微信小程序把「客服权限」授权给第三方平台(微信小程序后台-设置-第三方设置-第三方平台授权管理)

特殊情况:对于开启云函数且没开启云托管的微信小程序,用户发送的消息会推送到云函数,不会走到微信小程序客服系统,也不会callback给第三方服务器或者微信小程序消息推送的服务器地址。

6.4 将消息转发到客服

如果微信小程序处于开发模式,普通微信用户向微信小程序客服发消息时,微信服务器会先将消息POST到开发者填写的url上,如果希望将消息转发到客服系统,则需要开发者在响应包中返回MsgType为transfer_customer_service的消息,微信服务器收到响应后会把当次发送的消息转发至客服系统。

用户被客服接入以后,客服关闭会话以前,处于会话过程中时,用户发送的消息均会被直接转发至客服系统。当会话超过30分钟客服没有关闭时,微信服务器会自动停止转发至客服,而将消息恢复发送至开发者填写的url上。

用户在等待队列中时,用户发送的消息仍然会被推送至开发者填写的url上。

这里特别要注意,只针对微信用户发来的消息才进行转发,而对于其他任何事件都不应该转接,否则客服在客服系统上就会看到一些无意义的消息了。

调用说明

<xml>
  <ToUserName><![CDATA[touser]]></ToUserName>
  <FromUserName><![CDATA[fromuser]]></FromUserName>
  <CreateTime>1399197672</CreateTime>
  <MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>

请求参数说明

参数 是否必须 描述
ToUserName 接收方OpenID账号
FromUserName 开发者微信号
CreateTime 消息创建时间戳(整型)
MsgType transfer_customer_service

6.5 客服管理服务端

  • 获取所有客服账号
  • 获取在线客服列表
  • 添加客服账号
  • 删除客服账号
  • 设置客服管理员
  • 取消客服管理员

七、客服子商户

7.1 功能介绍

客服子商户能力,是微信公众平台为综合服务平台型微信小程序提供的客服能力支持。

一个微信小程序账号可为平台内的商户创建多个子商户账号,创建后在微信小程序客服组件唤起子商户单独的会话。多个子商户会话独立,可为用户提供更优质的客服体验。

7.2 开放范围

对【电商平台】类目微信小程序开放。权限开通流程登录微信小程序管理后台,进入“设置-接口设置”,开通能力。子商户账号数量上限开通后,单个微信小程序账号可申请子商户账号上限为500个,如需申请上调,请以《微信小程序客服子商户数量上调申请_微信小程序名称》为主题,发送邮件至placeofminiprogram@qq.com,邮件内注明微信小程序账号appid、微信小程序名称、使用背景、需要申请的账号量、业务下已有产品(包括app/网站/公众号)信息。审核通过后可提高子商户数量上限。

7.3 服务端接口

  • 客服子商户 API 文档
  • 发送客服消息
  • 客服输入状态

有些接口和普通账号共用,在正常参数的基础上加上参数 businessid

7.4 接收消息推送

具体说明可以参考客服消息接收消息和事件 推送时会增加一个参数BusinessId,代表消息是从子商户的会话中过来的。 以发送文本消息为例:

JSON格式示例

{
    "ToUserName": "toUser",
    "FromUserName": "fromUser",
    "CreateTime": 1482048670,
    "MsgType": "text",
    "Content": "this is a test",
    "MsgId": 1234567890123456,
    "BusinessId": 1
}

XML格式示例

<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>1482048670</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[this is a test]]></Content>
    <MsgId>1234567890123456</MsgId>
    <BusinessId>1</BusinessId>
</xml>

7.5 微信小程序组件发起子商户客服会话

button 增加一个属性 business-id,表示子商户 ID。

一、功能介绍

普通链接二维码,是指开发者使用工具对网页链接进行编码后生成的二维码。

线下商户不需要更换线下二维码,只需在微信小程序后台完成配置,用户扫描普通链接二维码时就能打开微信小程序,并使用微信小程序的功能。

对于普通链接二维码,目前支持使用微信“扫一扫”或在微信内长按识别二维码来跳转到微信小程序

三、二维码跳转规则

注意:从2017年5月开始,微信客户端支持二维码规则根据“子路径匹配”。如原有二维码链接为 http://www.qq.com/a/123456 ,其中123456为业务参数,则可配置规则 http://www.qq.com/a/ 实现扫码打开微信小程序

微信客户端扫码将按以下匹配规则控制跳转:

  1. 二维码链接的协议、域名与已配置的二维码规则一致。
  2. 二维码链接属于后台配置的二维码规则的子路径。(如需支持子路径匹配,请确认后台配置的二维码规则以/结尾)
  3. 如果二维码规则包含参数,链接?后为参数部分,参数要求前缀匹配。

常见匹配错误类型:

后台已配置的二维码规则 线下二维码完整链接 错误原因
http://www.qq.com/a/b https://www.qq.com/a/b 协议不一致
https://www.qq.com/a/b https://www.weixin.qq.com/a/b 域名不一致
https://www.qq.com/a/b?id=123 https://www.qq.com/a/b?id=132 参数不满足前缀匹配
https://www.qq.com/a/b https://www.qq.com/a/bc 不属于子路径
https://www.qq.com/a/b https://www.qq.com/a/b/123 规则没有以/结尾,不支持子路径匹配
https://www.qq.com/a/(已发布)
https://www.qq.com/a/b(未发布)
https://www.qq.com/a/b 命中未发布规则不会跳转微信小程序

四、二维码内容获取

在微信小程序后台配置二维码跳转微信小程序规则之后即可使用微信(6.5.6及其以上客户端版本)扫码打开微信小程序。

二维码链接内容会以参数 q 的形式带给页面,在onLoad事件中提取 q 参数并自行 decodeURIComponent 一次(对于小游戏可使用 wx.getEnterOptionsSync 接口获取),即可获取原二维码的完整内容。同时会附加一个参数 scancode_time(UNIX 时间戳,单位秒),表示用户扫码的时间。

Page({
  onLoad(query) {
    const q = decodeURIComponent(query.q) // 获取到二维码原始链接内容
    const scancode_time = parseInt(query.scancode_time) // 获取用户扫码时间 UNIX 时间戳
  }
})