会话列表[H5]
七鱼 Web SDK 提供会话相关信息,对于平台电商企业支持多会话,SDK提供以下对多会话的管理能力,供平台电商相关企业按需接入。
接入说明
以下接入方式仅提供平台电商企业使用,非平台电商企业接入无效;且需要平台企业配置 connectYunxin 才会生效
代码示例
ysf('config', {
connectYunxin: true
});获取会话列表
企业可以使用 ysf('getConversation') 来查询当前访客端的会话列表;七鱼提供当前连接中的会话,七天内的已关闭的会话(按会话结束时间计算)。其中包含会话电商的信息,最后一条消息的类型和内容,以及未读消息的总数等。
代码示例
ysf('getConversation', function(result){
result = [{
id: 15442102,
lastMessage: {
content: "测试服网页平台子企业欢迎语[惊讶]",
fromUser: 0,
time: 1620629768269,
type: "richtext",
},
sessionStatus: {
hasEvaluation: 1,
hasKefuEntry: 0,
status: 200
},
shop: {
id: "ptqy",
logo: "https://hddd6-ptqy.qiyukf.net/e30641a82249cd0a2d9537abd82efa87",
name: "七鱼专卖店"
},
startTime: 1620629768091,
endTime: 1620629768091,
unread: 2
}]
});会话列表数据以对象数组形式提供,每个数组元素提供一下属性:
参数说明
| 属性 | 类型 | 说明 |
|---|---|---|
| id | Number | 本条会话的id |
| shop | Object | 本条会话的店铺相关信息 |
| shop.id | String | 店铺的id(打开会话的bid) |
| shop.name | String | 店铺名称 |
| shop.logo | String | 店铺的头像 |
| unread | Number | 本条会话的未读消息条数 |
| startTime | Number | 会话开始的时间戳 |
| sessionStatus | Object | 会话的连接状态 status -- 200连接中,206已关闭 |
| sessionStatus.status | Number | 会话的连接状态, 200连接中,206已关闭 |
| sessionStatus.hasEvaluation | Number | 会话是否已经评价 0: 未评价, 1:已评价 |
| sessionStatus.hasKefuEntry | Number | 是否接入客服 0:未接入, 1: 已接入 |
| lastMessage | Object | 会话的最后一条消息,企业可根据type来区分消息在会话列表中的展示形式 |
| lastMessage.type | String | 最后一条消息的类型 |
| lastMessage.time | Number | 最后一条消息的发送时间 |
| lastMessage.fromUser | Number | 发送主体是客服还是访客,0 -客服,1 -访客 |
| lastMessage.content | String | 消息内容(复杂消息使用json字符串) |
消息类型的枚举见 消息类型对照表,企业可以根据不同的类型做对应的显示, (后续可能有新增消息类型,建议对类型的判断增加兜底处理)
监听消息变化
监听新的消息推送,用来更新会话列表,以及列表的未读消息数量,七鱼提供以下方式来监听:
在有新消息的时候直接向你推送最新的消息内容,需要你接收到此消息推送时手动更新会话列表中对应会话的未读消息条数以及 lastMessage 内容等;
该接口只推送实时消息,不区分当前会话消息还是离线消息;
代码示例
ysf('onSessionMessage', function(result) {
console.log(result);
})推送的消息结构如下:
| 字段 | 类型 | 描述 |
|---|---|---|
| from | String | 发送方 |
| to | String | 接受方id |
| type | String | 消息类型 |
| content | String | 消息内容(复杂消息使用json字符串) |
| bid | String | 商户id |
| time | Number | 消息生成时间 |
| sessionid | Number | 消息所在会话id |
| cmd | Number | 自定义消息类型 (type == custom时会给此字段) |
- sessionid 可作为查找会话的唯一标识,企业可以将本消息插入会话列表对应 id 的会话中;
- 如果列表中没有此会话,则可以使用 ysf('getConversation')重新拉取会话列表;
- 消息的 type,以及 cmd的值见附录 cmd对照表
点击会话列表打开会话
打开聊天窗口相关 Api 见 聊天窗口自定义, 通过会话列表打开指定店铺的会话需要传入对应的 bid
代码示例
ysf('open', {
bid: shop.id
})附录
消息类型对照表
| 类型 | 描述 |
|---|---|
| text | 文本消息 |
| image | 图片消息 |
| file | 文件消息 |
| video | 视频消息 |
| audio | 音频消息 |
| richtext | 富文本消息 |
| qa | 机器人消息 |
| gfw | 敏感词屏蔽消息 |
| custom | 自定义消息, 根据 cmd 区分类型,详情见 cmd对照表 |
| workflow | bot消息(即一触即达消息) |
| tip | 目前用来承载“消息发送失败”之类的提示 |
| ainvalid | 目前只有一个含义,表示“当前会话无访客消息,将默认分入无效会话类别” |
| cnotify | 提醒类的消息,如“当前会话无访客消息,将默认分入无效会话类别” |
| staffRejectTransfer | 转接失败消息,在历史会话中显示,如“转接失败,XXX拒绝转接” |
cmd 对照表
| cmd | 描述 |
|---|---|
| -1000 | 客服与客户的握手协议 |
| 2 | 分配客服 |
| 6 | 会话结束 |
| 9 | 消息回执 |
| 15 | 检查排队变化情况, 对每个商铺进行检查 |
| 17 | 访客被认为已离线 |
| 23 | 输入联想配置变化 |
| 25 | 输入联想返回问题列表 |
| 28 | 消息撤回 |
| 41 | Token失效提示 |
| 42 | 服务器通知消息中包含敏感词,消息不会被发送 |
| 50 | 收到评价邀请 |
| 55 | 评价是否成功 |
| 57 | 系统配置发生变化 |
| 59 | 收到客服端输入的内容 |
| 60 | 机器人问题列表 |
| 65 | 富文本消息 |
| 70 | 超时自动关闭提醒 |
| 72 | 访客广播消息, 浮层模式需要用到 |
| 87 | 访客留言结果回复 |
| 90 | 企业设置了高级模式, 开启了多入口分配 |
| 95 | 通知用户会话已经转接 |
| 108 | 收到回合数大于设定值,显示评价按钮 |
| 104 | 服务端通知访客上传文件是否超限 |
| 121 | 客服推过来的商品链接 |
| 203 | BOT平台动态查询, 服务器端通知客户端 |
| 205 | BOT平台动态查询,服务器返回更多 |
| 211 | 收到bot快捷入口 |
| 405 | BOT 超长消息通过自定义系统通知拆分发送 |
| 1002 | 隐藏发送语音按钮 |
| 11045 | 增加消息卡片 |
| 11047 | 收到客服邀请提供单信息 |
| 11049 | 访客分流超时失效 |
| 11051 | 工单列表 |
| 11053 | 工单详情 |
| 11055 | 催单是否成功 |
| 11056 | 白名单的url |
| 11063 | 收到联系商家消息 |
| 10100 | 机器人邀请评价 |
| 10102 | 机器人评价是否成功 |
| 其他 | 业务迭代可能会新增其他的 cmd 类型 |
Q&A
Q: 为什么在有些浏览器返回到会话列表页会收不到消息推送?
A: 现在大多浏览器支持Back-Forward Cache(往返缓存), 可以保存DOM和js的状态,但是socket的连接却会被断开;因此要回退重新初始化,可以使用pageShow事件
代码示例
(function () {
var isPageHide = false;
window.addEventListener('pageshow', function (e) {
if (e.persisted || isPageHide) {
// 兼容uc浏览器,如果不需要请忽略
var time = ~navigator.userAgent.indexOf('UCBrowser') ? 500 : 0;
setTimeout(function() {
window.location.reload();
}, time)
}
});
window.addEventListener('pagehide', function () {
isPageHide = true; // isPageHide是兼容安卓的360浏览器,如果不需要请忽略
});
})(); 这篇文档有帮助吗?