# 会话列表

七鱼 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已关闭
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时会给此字段)
  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对照表
workflow bot消息(即一触即达消息)
tip 目前用来承载“消息发送失败”之类的提示
ainvaild 目前只有一个含义,表示“当前会话无访客消息,将默认分入无效会话类别”
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浏览器,如果不需要请忽略
    });  
})();