Appearance
微信小程序
在微信小程序里嵌入对话页面。三家主流平台里微信的配置要求最严格,遇到问题也最多。
通用原理、前提条件和各平台对照见小程序接入总览。这一页只讲微信这边要做的事。
先确认用哪种做法
有企业微信的,微信小程序也可以接入微信客服,不用自备域名,客服回复时客户能收到微信消息提醒。要让客户留在小程序里,或者要用表单和商品订单选择器,就用这一页讲的嵌入对话页面。对比见微信小程序:两种做法。
微信特有的两条
默认链接在微信里本来就打不开。 合从主动拦截了微信、QQ 内置浏览器,所以在微信小程序里嵌入对话页面只能用自有域名部署。
页面里加载的资源不受业务域名限制。 业务域名只管 web-view 的地址本身,对话页面加载客服程序、连接服务端用到的地址都不用你操心,要配的就你自己这一个域名。
开始之前
- 小程序是企业主体。个人主体的小程序用不了
web-view组件,这是微信的规定,绕不过去 - 有一个已完成备案的域名,并且你能往它的根目录传文件
- 已经完成自有域名部署,用浏览器打开
https://你的域名/chat.html能正常对话
第一步:把域名配成业务域名
在小程序管理后台的开发设置里找到业务域名,添加你的域名。过程中微信会让你下载一个校验文件,把它传到域名根目录,确认能通过浏览器访问到,再回后台完成校验。
传校验文件和传 chat.html 是同一个操作,交给同一个人做就行。
几个微信侧的要求:域名必须是 HTTPS,必须已备案,一个小程序最多配 20 个业务域名。具体操作以小程序管理后台的提示为准。
第二步:单独建一个页面放 web-view
web-view 会铺满整个页面
一个小程序页面只能放一个 web-view,而且它会盖住页面上的其他组件,navigationStyle: custom 对它也不生效。不要试图把它塞进已有页面的一部分区域,要单独建一个页面专门放它。
新建页面的 wxml 里只放一行:
html
<web-view src="https://你的域名/chat.html"></web-view>然后在首页、个人中心或者任何你想放客服入口的地方跳转过来:
js
wx.navigateTo({ url: '/pages/support/index' })第三步:带上客户身份
小程序知道当前用户是谁,把这个信息传过去,客服就不是面对一个匿名访客。
在拼 web-view 地址时把客户信息带上就行,不用改对话页面:
js
Page({
data: { url: '' },
onLoad() {
const user = wx.getStorageSync('user')
const query = [
'u=' + encodeURIComponent(user.id),
'n=' + encodeURIComponent(user.name),
'p=' + encodeURIComponent(user.phone),
].join('&')
this.setData({ url: 'https://你的域名/chat.html?' + query })
},
})html
<web-view src="{{url}}"></web-view>客服那边就能看到这位客户的称呼和手机号。u 是必填的,其余资料要挂在它上面;同一个客户在小程序里、在浏览器里打开,只要 u 相同就认成同一个人,历史对话接得上。
姓名手机号这些参数在页面打开后会自动从地址栏抹掉,不会一直挂在那里。完整的参数清单、自定义业务字段的写法,以及哪些身份不该走网址传,见传客户资料给客服。
常见问题
小程序里打开是空白,或者提示不支持打开该页面
症状:web-view 页面打开后一片空白,或者微信提示无法打开。
成因:域名没有配置成业务域名,或者校验没有真正通过。开发者工具里可能正常,真机上就打不开。
解决:回到小程序管理后台确认域名已经在业务域名列表里,并且用浏览器访问一下校验文件的地址确认它还在。校验文件被删掉或者被网站的重写规则挡住,都会导致配置失效。
后台加不了业务域名
症状:小程序管理后台里找不到业务域名入口,或者添加时被拒绝。
成因:个人主体的小程序不能配置业务域名,域名未备案也无法添加。
解决:这两条都是微信的规定。小程序主体是个人的,需要先变更为企业主体;域名没备案的,先完成备案再配置。
客服入口页面上的其他按钮被挡住了
症状:在放 web-view 的页面上加了返回按钮或悬浮客服图标,真机上看不到。
成因:web-view 会铺满整个页面并覆盖其他组件,这是组件本身的行为。
解决:需要的操作放在跳转之前的那个页面上。返回用小程序自带的导航栏返回,或者在网页里通过微信的 JSSDK 触发返回。