网页插件配置方式升级。支持在客服工作台创建多个网页插件,分别设置每个网页插件的功能,并对网页聊天窗口的实际效果进行预览。
网页插件支持管理员直接设置聊天窗口的各种功能并预览;(注:旧版网页插件已停止维护,如您仍在使用,请尽快联系我们为您免费升级至新版网页插件。
新版网页插件有如下特点:
网页插件依赖环信客服云中的APP关联收发消息。
可以在客服工作台设置网页插件的接入方式、样式设置、功能设置、信息栏设置。除特殊说明外,以下设置对PC端、移动端聊天窗口和H5网页均生效。
支持集成网页插件和集成网页链接两种方式。
在“管理员模式 > 渠道管理 > 网页 > 接入方式”页面,将网页插件的代码复制并粘贴到您的网站的</body>标签之后,保存并发布。
英文版集成网页插件:
在您的网站上插入代码示例(请将configId换成您自己租户上的h5渠道对应的configId值):
<script src='//kefu.sh.absoloop.com/webim/easemob.js?configId=c612d953-f3a9-4aaa-aab7-c027cbebc1b2'></script>
最简集成完成Demo样例如下: 配置示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>环信客服云-h5渠道最简接入Demo</title>
</head>
<body>
<!-- 此处展示您的网站内容 -->
</body>
<!-- 注:请将下面这行的configId值换成您自己租户里的h5对应渠道的configId值 -->
<script src='//kefu.sh.absoloop.com/webim/easemob.js?configId=c612d953-f3a9-4aaa-aab7-c027cbebc1b2'></script>
</html>
您可以直接将h5网页的链接挂载在您现有的网站上,可通过a链接或者按钮等绑定,当访客点击按钮或链接时,即可打开我们的网页访客端,通过这种网页链接的方式将客服聊天页面快速便捷地集成到您到网站。
网页链接示例:
https://kefu.sh.absoloop.com/webim/im.html?configId=c612d953-f3a9-4aaa-aab7-c027cbebc1b2
最简集成完成Demo样例如下: 配置示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>环信客服云-h5渠道最简接入Demo</title>
</head>
<body>
<a href="https://kefu.sh.absoloop.com/webim/im.html?configId=c612d953-f3a9-4aaa-aab7-c027cbebc1b2" target="_blank" title="联系客服">联系客服</a>
</body>
</html>
注意:
文本模式:
开关开启,可以设置广告消息,并展示在聊天窗口。
导航菜单模式:
支持将文本信息栏切换为自定义导航菜单,并展示在聊天窗口。自定义导航菜单包含一级菜单和二级菜单,可创建最多3个一级菜单,每个一级菜单下可创建最多5个二级菜单。可在菜单上设置图文消息(从素材库选择),当访客点击菜单项时,自动向访客发送对应的图文消息。
开关打开时,同时将访客对导航菜单的选择作为轨迹消息发送给客服,并创建会话。
访客端示例(导航菜单显示在聊天窗口上方):
注:自定义导航菜单为企业版、旗舰版功能。
开关开启,可以设置企业品牌广告,并展示在聊天窗口。
选择聊天窗口和悬浮按钮的颜色主题。
设置H5网页在浏览器页签中显示的名称。
注:该功能只对H5网页生效。
开关开启,网页访客端可自动弹出邀请窗口,邀请访客加入会话。
配置窗口可配置邀请机制及邀请样式。
注意:
开关开启,将在聊天窗口显示“留言”按钮,允许客户在聊天过程中提交留言。
设置下班后,关闭客服或机器人接待时,访客点击联系客服按钮:
可选择“发送系统消息”或“主动弹出邀请”两种邀请评价方式。
开关开启将允许客户在聊天过程中发送附件(不限类型的文件)。
开关开启,将在聊天窗口显示“评价客服”按钮,允许客户在聊天过程中主动进行满意度评价。
开关开启,将允许客户在聊天窗口查看会话事件,如会话开始、转接、结束等。
开关开启,将允许客户打开多个窗口时收到新消息通知。
开关开启,将在聊天窗口显示“最小化”按钮,允许客户最小化窗口。
注:H5网页不支持。
开关开启,将在聊天窗口显示“提示音”按钮,访客收到新消息时会有声音提示。该按钮允许客户开启/关闭提示音。
注:移动端浏览器不支持。
开关开启,将允许客户拖拽聊天窗口。
注:H5网页、移动端浏览器不支持。
开关开启,机器人接待会话时,将在聊天窗口显示“转人工”按钮,允许客户点击按钮联系人工客服。
若指定技能组,客户发起的会话由指定的技能组接待。若不指定,客户发起的会话按系统默认规则分配。
若指定关联,该网页插件由该关联接入客服云。若不指定,该网页插件由系统分配的关联接入客服云。
支持自定义访客端输入框上方快捷操作,最多可配置16个操作,支持跳转链接、发送消息、转人工、评价行为,可将访客常见问题或快捷业务入口配置在这里。
h5访客端弹窗显示效果如下(如需做复杂场景下的开发,请联系商务人员进行对接支持):
网页插件-侧边栏设置,可设置侧边栏宽度、常见问题、自助服务及iframe页面。开启后,访客端右侧可显示自助服务及常见问题,节省人力,提高客户服务效率。 侧边栏配置完成后,打开侧边栏开关,侧边栏即可生效。
pc端访客端样式:
移动端访客端样式:
网页插件-侧边栏设置,用户可手动添加常见问题,常见问题支持2种类型
常见问题仅支持文字类型(问题描述最多20个字符,答案描述最多1000个字符)。
开关打开时,访客端会自动显示常见问题。关闭时,不显示常见问题。
开启常见问题后,访客端样式请参考:访客端信息栏样式
网页插件-侧边栏设置,新增自助服务功能,用户可通过设定业务名称、业务链接、业务图标添加自助服务。
开关打开时,访客端会自动显示自助服务。关闭时,不显示自助服务。最多可以配置 8 个自助服务。
开启自助服务后,访客端样式请参考:访客端信息栏样式
添加自助服务:
PC端样式说明:
移动端样式说明:
在基础设置和样式显示设置的基础上,还可以为网页插件配置以下高级功能。
如果默认的“联系客服”按钮不符合您网站的整体风格,您可以将该按钮隐藏,更换为新的按钮。
具体实现方法:设置 hide 参数为 true,并将 easemobim.bind 方法绑定到 A 标签。
配置示例:
<a href='javascript:;' onclick='easemobim.bind({configId: "304fe7b6-3046-416b-b169-0398f647b90e"})'>快联系我</a>
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
hide: true,
autoConnect: false
};
</script>
<script src='//kefu.sh.absoloop.com/webim/easemob.js'></script>
⚠️注意:当设置 hide 为 true 时,建议同时设置 autoConnect 为 true,以便访客端聊天窗口最小化时,收到新消息提醒。
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
hide | Boolean | 否 | 是否隐藏小的悬浮按钮,默认值:false(不隐藏) |
autoConnect | Boolean | 否 | 自动连接,例如:false |
支持设置“联系客服”按钮的文字、聊天窗口的尺寸和位置。
配置示例:
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
configId: '304fe7b6-3046-416b-b169-0398f647b90e',
buttonText: '联系客服',
dialogWidth: '360px',
dialogHeight: '550px',
dialogPosition: { x: '10px', y: '10px' }
};
</script>
<script src='//kefu.sh.absoloop.com/webim/easemob.js'></script>
注:设定的“联系客服”按钮的文字、聊天窗口的尺寸和位置,仅PC端浏览器生效。
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
buttonText | String | 否 | 设置小按钮的文案,例如:'联系客服' |
dialogWidth | String | 否 | 聊天窗口宽度,默认值:'360px' |
dialogHeight | String | 否 | 聊天窗口高度,默认值:'550px' |
dialogPosition | Object | 否 | 聊天窗口初始位置,坐标以视口右边距和下边距为基准,默认值:{ x: '10px', y: '10px' } |
展示样式:
为聊天窗口指定技能组,使客户发起的会话分配到该技能组进行接待。
<script>
function sendCrmExt(){
window.easemobim.sendExt(
{
// 技能组
ext:{
weichat:{
queueName:"技能组名称",
queueId:"技能组ID"
}
}
}
}
为聊天窗口指定客服,使客户发起的会话均由该客服接待。
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
configId: '304fe7b6-3046-416b-b169-0398f647b90e',
agentName: 'kefu@123.com'
};
</script>
<script src='//kefu.sh.absoloop.com/webim/easemob.js'></script>
特殊说明:
1、“指定客服”比“指定技能组”的优先级高。
2、若同时指定客服和技能组,则会话分配给指定的客服。只要指定的客服已登录,无论该客服处于各种状态下,且无论是否配置机器人优先接待,此会话均会强制直接分配给此客服接起。
3、对应的指定客服处于未登录状态下,该会话依然会被正常创建并指向给该坐席。
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
agentName | String | 否 | 指定客服,例如:'kefu@123.com' |
当访客发起咨询时(前提为已登录用户),网站可自动将该用户信息(如名称、手机、邮箱、QQ 等)发送给客服,并显示在聊天窗口右侧。
管理员模式 >设置 > 功能设置 >允许访客端修改客户信息 要打开,nickName不能为空。
配置示例:
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
configId: '304fe7b6-3046-416b-b169-0398f647b90e',
visitor: {
userNickname: 'Tom King', // 昵称
trueName: 'Tom', // 姓名
qq: '131218512', // QQ
weixin:'dyj13121166188', //微信号
phone: '13121166188', // 手机
email: 'xiaoleng@easemob.com', //邮箱
companyName: 'easemob', // 公司
description: '意向客户', //描述
userDefineColumn: '{"ext01":"扩展字段01","ext02":"扩展字段02"}'
tags:[
'vip1',
'vip2'
]
}
};
</script>
<script src='//kefu.sh.absoloop.com/webim/easemob.js'></script>
注意:
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
visitor | Object | 否 | 访客信息 |
配置示例
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
configId: '304fe7b6-3046-416b-b169-0398f647b90e',
visitor: {
trueName: '112222',//值外层必须要有单引号以字符串格式传输否则传输失败
userNickname: '1234',
description: '0909',
email: '',
userDefineColumn: '{"WQQ":"帅哥","QAZ":"LLLLLLLTTTTTTTT"}',
},
userDefineColumn里边的key必须是客服系统添加的自定义字段ID才会生效。 比如:
集成用户体系,指将您的用户的环信username和password,以及昵称等信息写入网页插件,以便用户发起咨询时,能够在环信客服云识别对应的用户。
执行以下步骤:
配置示例:
<script src='//kefu.sh.absoloop.com/webim/easemob.js'></script>
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
configId: '304fe7b6-3046-416b-b169-0398f647b90e',
// 用户所在的 appKey 需要与 configId 中指定的关联的 appKey 一致
user: {
// username 必填,password 和 token 任选一项填写
username: 'webim-test-user',
password: 'GQWWERP46V',
token: 'YWMtzGo52JaqEeeELnmPrOc5h15sv_A0eRHkoOT3YpQCxx70JPTKiW4R56U-k0L6lDp3AwMAAAFebzmSdABPGgCyzGooJgc5V4LBxr0TtaAsXQld8naV_3qc-8GEDDMAHw'
},
// 访客信息(可选)
visitor: {
trueName: '黎小冷',
qq: '12345678',
phone: '18812345678',
companyName: '环信',
userNickname: '小冷',
description: '意向客户',
email: 'xiaoleng@easemob.com'
}
}
</script>
获取用户Token:根据username和password获取access_token。
Request body:
{
"grant_type":"password",
"username":"user",
"password":"pwd"
}
Response示例
{
"access_token": "YWMtI5JsbKhHEem57CF4KOxCxnljbbBGLhHpjpSjqzuD_CB4YttqkNER6YIJEZ8gpOpaAwMAAAFr_hTkLQBPGgB7xNZ6-mjCRkn_nivCNcB01uiyS9Yt9pdiU_6LH579zA",
"expires_in": 5184000,
"user": {
"uuid": "7862db6a-90d1-11e9-8209-119f20a4ea5a",
"type": "user",
"created": 1560756495382,
"modified": 1560765534117,
"username": "test1",
"activated": true,
"device_token": "Getg6CgqFanQ4dwAvn9/qxoa5crWpNSkiVFcVt3eDr1S6xqz5X2sm0dbi1yNAQsl",
"notifier_name": "2882303761517507836"
}
}
注意:
window.easemobim.bind(config)
来初始化网页插件window.easemobim.bind(config)
之前要确保 easemob.js
已加载参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
user | Object | 否 | 用户信息,用于集成用户体系 |
visitor | Object | 否 | 访客信息 |
通过在onready方法下调用sendExt接口发送订单或轨迹消息。
发送订单消息,请参考下文示例:
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
configId: '304fe7b6-3046-416b-b169-0398f647b90e',
//聊天窗口加载成功回调
onready: function () {
传递访客的订单消息
easemobim.sendExt({
ext:{
"imageName": "mallImage3.png",
"type": "custom", //custom代表自定义消息,无需修改
"msgtype": {
"order": {
"img_url": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F0502648b-4c64-4040-8751-325cba157ed0%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1696555838&t=dbe8e5c6025acb5f90f3a5fad0721b59", //订单显示的图片
"title": "1-3岁宝宝上衣", //订单标题
"desc": "适合1-3岁的宝宝穿的连体衣", //订单描述
"order_title":"订单号:123456789012345678901234567890",
"price": "59.90元", //订单价格,不需要本项时可以直接注释掉本行
"item_url": "https://www.baidu.com?s=order_sn/123123" //点击订单后跳转地址
}
}
}
});
},
};
</script>
<script src='//kefu.sh.absoloop.com/webim/easemob.js'></script>
发送轨迹消息,请参考下文示例:
<script>
window.easemobim = window.easemobim || {};
easemobim.config = {
configId: '304fe7b6-3046-416b-b169-0398f647b90e',
//聊天窗口加载成功回调
onready: function () {
easemobim.sendExt({
ext:{
"imageName": "mallImage3.png",
"type": "custom", //custom代表自定义消息,无需修改
"msgtype": {
"track":{
"title":"我正在看:", //消息标题
"price":"¥: 235.00", //价格,不需要可以直接注释掉本行
"desc":"女装小香风气质蕾丝假两件短袖", //描述内容
"img_url": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F0502648b-4c64-4040-8751-325cba157ed0%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1696555838&t=dbe8e5c6025acb5f90f3a5fad0721b59", //显示的图片地址
"item_url":"https://www.yourdomain.com/item/a.html" //消息链接点击后的跳转地址
}
}
}
});
},
};
</script>
<script src='//kefu.sh.absoloop.com/webim/easemob.js'></script>
订单/轨迹消息在PC端浏览器里展示样式如下所示:
订单/轨迹消息在手机端浏览器里展示样式如下所示:
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
onready: function () { } | Function | 否 | 聊天窗口加载成功回调 |
onmessage: function ( message ) { } | Function | 否 | 收消息回调,只对当前打开的聊天窗口有效,当访客收到来自系统消息、机器人消息、坐席消息均会触发此回调 |
onsessionclosed: function () { } | Function | 否 | 会话结束事件回调 |
onsessioncreat: function () { } | Function | 否 | 会话创建事件回调 |
注意事项:
此功能可以实现访客进入聊天页面时,自动弹出例如订单列表弹窗,当访客不需时可以关闭弹窗,也可以在会话过程中,访客自行打开弹窗,点击弹窗内容实现消息上屏等操作,弹窗iframe支持动态传参、自行控制初始打开或关闭等多种操作。(注:iframe页面内部显示内容需业务系统自行开发,如有需要请联系环信商务人员为您提供对接技术支持。)
访客端在集成时候在easemob.config里增加字段 routingRuleFlag:“”
配置示例:
easemobim.config ={
//增加业务标识路由字段
configId: '84a85315-4ce7-4f5c-8fac-17e0bccbece0',
routingRuleFlag:"测试的业务标识路由",
}
客服系统侧业务标识路由规则配置:
1、如果您希望访客进入到你们系统中以后,当需要发起聊天后,可以直接进入到聊天详情页,跳转事件和时机由你们自由控制,且访客退出聊天页面时,可以自由返回到任何的你们指定的页面,那么我们也提供这种场景下的集成
配置示例:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,user-scalable=no">
<title>JS方式集成H5访客端直接渲染内容</title>
</head>
<body>
</body>
<script>
console.log("JS代码开始加载");
//访客端初始化集成代码如下
window.easemobim = window.easemobim || {};
easemobim.config = {
hide: true,
autoConnect: true,
/* 控制窗口的宽高显示 */
dialogWidth: '100%',
dialogHeight: '100%',
dialogPosition: {
x: '0px',
y: '0px'
},
hideKeyboard: true, //true会隐藏右上角的键盘上下调整图标
routingRuleFlag: "D0", //此处对应业务信息指定里配置的 路由标识
/* 此处负责传递用户信息 */
visitor: {
userNickname: '王老师', // 昵称
trueName: '黄金001', // 姓名
qq: '12345678', // QQ
weixin: 'lixiaohuan', //微信
phone: '18812345678', // 手机
companyName: '环信', // 公司
email: 'xiaoleng@easemob.com', //邮箱
description: '卖家;LV1;普通卖家;', //描述
userDefineColumn: '{"Platformlicensing":"Platformlicensing","sellerId":"sellerId111","itemcode":"itemcode111"}', //针对自定义字段的内容传输,需要客服系统中先行配置扩展字段
},
//捕捉各种回调事件
onopen: function() {
console.log("【onopen】聊天窗口打开");
},
//聊天窗口加载成功回调
onready: function() {
console.log("【onready】聊天窗口加载完成");
/* 传订单-支持发送多个信息,此种方式为自动发送,不需要自动发送,直接注释掉代码即可*/
easemobim.sendExt({
ext: {
"imageName": "mallImage3.png",
//custom代表自定义消息,无需修改
"type": "custom",
"msgtype": {
"order": {
"title": "已完成的订单",
"price": "198元", //价格
"desc": "端午节粽子", //订单描述
"order_title": "订单号:123456789012345678901234567890",
"img_url": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F0502648b-4c64-4040-8751-325cba157ed0%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1696555838&t=dbe8e5c6025acb5f90f3a5fad0721b59",
"item_url": "https://www.baidu.com?s=order_sn/123123"
}
}
}
});
//传递访客端浏览轨迹
easemobim.sendExt({
ext: {
"imageName": "mallImage3.png",
"type": "custom", //custom代表自定义消息,无需修改
"msgtype": {
"track": {
"title": "我正在看:", //消息标题
"price": "¥: 235.00", //价格,不需要可以直接注释掉本行
"desc": "女装小香风气质蕾丝假两件短袖", //描述内容
"img_url": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F0502648b-4c64-4040-8751-325cba157ed0%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1696555838&t=dbe8e5c6025acb5f90f3a5fad0721b59", //显示的图片地址
"item_url": "https://www.yourdomain.com/item/a.html" //消息链接点击后的跳转地址
}
}
}
});
},
/* 聊天窗口关闭回调 */
onclose: function() {
console.log("【onclose】窗口即将关闭,感谢您的咨询");
},
/* 满意度评价提交回调 */
onEvaluationsubmit: function() {
console.log("onEvaluationsubmit")
},
/* 收消息回调,只对当前打开的聊天窗口有效 */
onmessage: function() {
console.log("收到 onmessage");
},
/* 会话结束回调 */
onsessionclosed: function() {
console.log("onsessionclosed")
},
// 会话创建成功的回调
onsessioncreat: function() {
console.log("oncreat");
}
};
</script>
<script>
//增加一个监听,确保easemob.js文件加载之后再执行
function onScriptLoad() {
console.log('easemob.js文件已加载完成!');
easemobim.bind({
configId: "b8062fff-aa52-4cea-929a-547366bfc6e2"
}); //执行关键的configId绑定操作,此处的configId请换成您自己的网站渠道ID
}
</script>
<!-- 核心js文件加载 -->
<script src='//kefu.sh.absoloop.com/webim/easemob.js' defer onload="onScriptLoad()"></script>
</html>
注意事项:
在基础设置和样式显示设置的基础上,还可以为H5网页配置以下高级功能。
在H5网页地址中指定客服,使客户发起的会话均由该客服接待。
配置示例:
https://kefu.sh.absoloop.com/webim/im.html?configId={configId}&agentName=kefu@123.com
注:“指定客服”比“指定技能组”的优先级高。若同时指定客服和技能组,则会话分配给指定的客服。
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
agentName | String | 否 | 指定客服,例如:'kefu@123.com' |
H5网页右上角默认有一个键盘图标,用于切换输入框的位置。如不需要该功能,可将图标隐藏。
配置示例:
https://kefu.sh.absoloop.com/webim/im.html?configId={configId}&hideKeyboard=true
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
hideKeyboard | Boolean | 否 | 是否隐藏H5右上角的键盘图标,默认值:false(不隐藏) |
当前,微信的H5页面,并不会传微信公众号信息到客服端,所以客服端显示的访客ID是webim id(环信ID)。
如果您需要H5页面将微信的openid等公众号信息传至客服端,使客服端显示的访客ID包含微信的openid,可以配置参数wechatAuth=true和appid={appid}。其中,appid为微信公众号的ID。
配置示例:
https://kefu.sh.absoloop.com/webim/im.html?configId={configId}&wechatAuth=true&appid=wx1e7ed77036581061
注意:当您配置wechatAuth和appid这两个参数时,还需要在客服云的“管理员模式 > 渠道管理 > 微信”页面通过授权的方式绑定您的微信公众号。
参数解释:
参数 | 类型 | 必选 | 描述 |
---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 |
wechatAuth | Boolean | 否 | 是否获取微信授权,例如:true |
appid | String | 否 | 微信公众号的ID,例如:'wx1e7ed77036581061' |
使用定制开发模式时,“管理员模式 > 渠道管理 > 网页”页面上,“网页插件”(与configId对应)的配置对桌面网页和移动端网页的聊天窗口依然生效。额外可配置的参数如下表。
如果您的网页支持在移动端浏览,访客在移动端点击“联系客服”按钮会生成H5网页,该H5网页支持的参数也如下表所示。
参数 | 类型 | 必选 | 描述 | 桌面网页是否支持 | 移动端网页是否支持 |
---|---|---|---|---|---|
configId | String | 是 | 设置为您的网页插件页面显示的configId的值 | 是 | 是 |
domain | String | 否 | 环信客服云域,必须配置为'//kefu.sh.absoloop.com' | 是 | 是 |
agentName | String | 否 | 指定坐席,例如:'kefu@123.com' | 是 | 是 |
user | Object | 否 | 用户信息,用于集成用户体系 | 是 | 是 |
visitor | Object | 否 | 访客信息 | 是 | 是 |
language | String | 否 | 访客端展示语言,不填写时默认为中文,例如需要英文展示传en即可 | 是 | 是 |
autoConnect | Boolean | 否 | 自动连接,例如:false | 是 | 是 |
buttonText | String | 否 | 设置小按钮的文案,例如:'联系客服' | 是 | 是 |
hide | Boolean | 否 | 是否隐藏小的悬浮按钮,默认值:false(不隐藏) | 是 | 是 |
hideKeyboard | Boolean | 否 | 是否隐藏H5右上角的键盘图标,默认值:false(不隐藏) | 否 | 是 |
dialogWidth | String | 否 | 聊天窗口宽度,默认值:'360px' | 是 | 否 |
dialogHeight | String | 否 | 聊天窗口高度,默认值:'550px' | 是 | 否 |
dialogPosition | Object | 否 | 聊天窗口初始位置,坐标以视口右边距和下边距为基准,默认值:{ x: '10px', y: '10px' } | 是 | 否 |
onmessage: function ( message ) { } | Function | 否 | 收消息回调,只对当前打开的聊天窗口有效,,当访客收到来自系统消息、机器人消息、坐席消息均会触发此回调 | 是 | 是 |
onready: function () { } | Function | 否 | 聊天窗口加载成功回调 | 是 | 是 |
onopen: function () { } | Function | 否 | 聊天窗口打开回调 | 是 | 是 |
onclose: function () { } | Function | 否 | 聊天窗口关闭回调 | 是 | 是 |
onsessioncreat: function () { } | Function | 否 | 会话创建事件回调,例如访客发送首条消息后会话成功建立起来后会触发此回调事件 | 是 | 是 |
onsessionclosed: function () { } | Function | 否 | 会话结束事件回调 | 是 | 是 |
onEvaluationsubmit:function(){} | Function | 否 | 满意度评价提交回调 | 是 | 是 |
package com.example.zarah.testmyself;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.JsResult;
import android.webkit.PermissionRequest;
import android.webkit.ValueCallback;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.TextView;
import java.io.FileInputStream;
public class WebViewActivity extends Activity {
public ValueCallback<Uri> mUploadMessage;
public ValueCallback<Uri[]> mUploadMessageForAndroid5;
public final static int FILECHOOSER_RESULTCODE = 1;
public final static int FILECHOOSER_RESULTCODE_FOR_ANDORID_5 = 2;
ProgressDialog progressBar;
private WebView webview;
private ImageButton btnBack;
private TextView titleBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
initView();
}
private void initView() {
webview = findViewById(R.id.webview);
titleBar = findViewById(R.id.title);
btnBack = findViewById(R.id.back);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
progressBar = new ProgressDialog(this);
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
webview.getSettings().setJavaScriptEnabled(true);
// webview.addJavascriptInterface();//本地java对象映射给js调用
webview.getSettings().setAppCacheEnabled(false);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
// 设置可以支持缩放
webview.getSettings().setSupportZoom(true);
// 设置出现缩放工具
webview.getSettings().setBuiltInZoomControls(true);
//扩大比例的缩放
webview.getSettings().setUseWideViewPort(true);
//自适应屏幕
webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webview.loadUrl("https://kefu.easemob.com/webim/im.html?configId=14bdb04a-bdea-45f5-8560-a2656b4dd7be");
// webview.reload();
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
// Log.e("WebviewActivity",request+"");
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
//提示错误
}
});
webview.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
//实现下载
//跳转浏览器下载,也可以自己去实现下载类去下载
Uri uri = Uri.parse("");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
});
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onPermissionRequest(final PermissionRequest request) {
WebViewActivity.this.runOnUiThread(new Runnable(){
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
request.grant(request.getResources());
}
});
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
//title显示
// if(title.equals("kefu.easemob.com/webim/im.html?configId=14bdb04a-bdea-45f5-8560-a2656b4dd7be"))
titleBar.setText(title);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框
}
super.onProgressChanged(view, newProgress);
}
//扩展支持alert事件
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("提示").setMessage(message).setPositiveButton("确定", null);
builder.setCancelable(false);
builder.setIcon(R.mipmap.ic_launcher);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();
return true;
}
//扩展浏览器上传文件
//3.0++版本
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
openFileChooserImpl(uploadMsg);
}
//3.0--版本
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
openFileChooserImpl(uploadMsg);
}
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
openFileChooserImpl(uploadMsg);
}
// For Android > 5.0
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams fileChooserParams) {
openFileChooserImplForAndroid5(uploadMsg);
return true;
}
});
}
private void openFileChooserImpl(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
}
private void openFileChooserImplForAndroid5(ValueCallback<Uri[]> uploadMsg) {
mUploadMessageForAndroid5 = uploadMsg;
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
contentSelectionIntent.setType("image/*");
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDORID_5);
// Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机
// Uri photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()+ "/" + "temp.png")); // 传递路径
// intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);// 更改系统默认存储路径
// startActivityForResult(intent, FILECHOOSER_RESULTCODE_FOR_ANDORID_5);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (webview.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
//获取历史列表
WebBackForwardList mWebBackForwardList = webview.copyBackForwardList();
//判断当前历史列表是否最顶端,其实canGoBack已经判断过
if (mWebBackForwardList.getCurrentIndex() > 0) {
webview.goBack();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
} else if (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDORID_5) {
FileInputStream fis = null;
String path = Environment.getExternalStorageDirectory().getPath()+ "/" + "temp.png";
//
if (null == mUploadMessageForAndroid5)
return;
// try {
// fis = new FileInputStream(Environment.getExternalStorageDirectory().getPath()+ "/" + "temp.png");
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
Uri result = (intent == null || resultCode != RESULT_OK) ? null : intent.getData();
if (result != null) {
mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});
} else {
mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});
}
mUploadMessageForAndroid5 = null;
}
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {//定义一个Handler, 用于处理下载线程与UI间通讯
if (!Thread.currentThread().isInterrupted()) {
switch (msg.what) {
case 0:
progressBar.show();//显示进度框
break;
case 1:
progressBar.hide();//隐藏进度对话框不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动
break;
}
}
super.handleMessage(msg);
}
;
};
}