七鱼开发文档中心
总览服务端 APIWebiOSAndroid鸿蒙Uniapp微信小程序插件三方接入

会话列表[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
  }]
});

会话列表数据以对象数组形式提供,每个数组元素提供一下属性:

参数说明

属性类型说明
idNumber本条会话的id
shopObject本条会话的店铺相关信息
shop.idString店铺的id(打开会话的bid)
shop.nameString店铺名称
shop.logoString店铺的头像
unreadNumber本条会话的未读消息条数
startTimeNumber会话开始的时间戳
sessionStatusObject会话的连接状态 status -- 200连接中,206已关闭
sessionStatus.statusNumber会话的连接状态, 200连接中,206已关闭
sessionStatus.hasEvaluationNumber会话是否已经评价 0: 未评价, 1:已评价
sessionStatus.hasKefuEntryNumber是否接入客服 0:未接入, 1: 已接入
lastMessageObject会话的最后一条消息,企业可根据type来区分消息在会话列表中的展示形式
lastMessage.typeString最后一条消息的类型
lastMessage.timeNumber最后一条消息的发送时间
lastMessage.fromUserNumber发送主体是客服还是访客,0 -客服,1 -访客
lastMessage.contentString消息内容(复杂消息使用json字符串)

消息类型的枚举见 消息类型对照表,企业可以根据不同的类型做对应的显示, (后续可能有新增消息类型,建议对类型的判断增加兜底处理)

监听消息变化

监听新的消息推送,用来更新会话列表,以及列表的未读消息数量,七鱼提供以下方式来监听:

在有新消息的时候直接向你推送最新的消息内容,需要你接收到此消息推送时手动更新会话列表中对应会话的未读消息条数以及 lastMessage 内容等;

该接口只推送实时消息,不区分当前会话消息还是离线消息;

代码示例

ysf('onSessionMessage', function(result) {
  console.log(result);
})

推送的消息结构如下:

字段类型描述
fromString发送方
toString接受方id
typeString消息类型
contentString消息内容(复杂消息使用json字符串)
bidString商户id
timeNumber消息生成时间
sessionidNumber消息所在会话id
cmdNumber自定义消息类型 (type == custom时会给此字段)
  1. sessionid 可作为查找会话的唯一标识,企业可以将本消息插入会话列表对应 id 的会话中;
  2. 如果列表中没有此会话,则可以使用 ysf('getConversation')重新拉取会话列表;
  3. 消息的 type,以及 cmd的值见附录 cmd对照表

点击会话列表打开会话

打开聊天窗口相关 Api 见 聊天窗口自定义, 通过会话列表打开指定店铺的会话需要传入对应的 bid

代码示例

ysf('open', {
  bid: shop.id
})

附录

消息类型对照表

类型描述
text文本消息
image图片消息
file文件消息
video视频消息
audio音频消息
richtext富文本消息
qa机器人消息
gfw敏感词屏蔽消息
custom自定义消息, 根据 cmd 区分类型,详情见 cmd对照表
workflowbot消息(即一触即达消息)
tip目前用来承载“消息发送失败”之类的提示
ainvalid目前只有一个含义,表示“当前会话无访客消息,将默认分入无效会话类别”
cnotify提醒类的消息,如“当前会话无访客消息,将默认分入无效会话类别”
staffRejectTransfer转接失败消息,在历史会话中显示,如“转接失败,XXX拒绝转接”

cmd 对照表

cmd描述
-1000客服与客户的握手协议
2分配客服
6会话结束
9消息回执
15检查排队变化情况, 对每个商铺进行检查
17访客被认为已离线
23输入联想配置变化
25输入联想返回问题列表
28消息撤回
41Token失效提示
42服务器通知消息中包含敏感词,消息不会被发送
50收到评价邀请
55评价是否成功
57系统配置发生变化
59收到客服端输入的内容
60机器人问题列表
65富文本消息
70超时自动关闭提醒
72访客广播消息, 浮层模式需要用到
87访客留言结果回复
90企业设置了高级模式, 开启了多入口分配
95通知用户会话已经转接
108收到回合数大于设定值,显示评价按钮
104服务端通知访客上传文件是否超限
121客服推过来的商品链接
203BOT平台动态查询, 服务器端通知客户端
205BOT平台动态查询,服务器返回更多
211收到bot快捷入口
405BOT 超长消息通过自定义系统通知拆分发送
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浏览器,如果不需要请忽略
    });  
})(); 

这篇文档有帮助吗?

目录