说明

  • 初始默认服务地址为
    https://chat.looyu.com/mobile-sdk
  • 在初始化过程中,服务端可能会返回其他的服务地址,此时请到该地址重新初始化
  • 所有发送的数据需通过appSecret加密,加密方法见:数据加密
  • 服务端返回的json里,固定格式为:
    {
        id:100,// 当type
        type:'',//数据类型
        err:0, //该字段可能不存在,0表示成功。其他数据表示失败。
        data:{
        }
    }
  • 其中data字段会被加密
  • err数字的具体说明,请见:错误码

初始化

  • 服务路径:/app-user/${compId}/${appId}
  • method:post
  • 参数:
    {
        id:100,//req id
        type:'appUser',
        action:'create',
        param:{
            compId:100, //公司ID  
            version:100,//sdk版本(数字格式)
            platform:0,//0:pc 1:mobile 2:pad
            os:'', //操作系统,win,android,linux,ios,mac,winphone
            osVersion:'',//详细操作系统版本号
            device:'',//设备型号,例如小米5
            deviceId:'', //设备ID
            brand:'' ,//品牌,例如:小米,华为,苹果,vivo,oppo
            uniqueId:'' ,//永久ID
            viewerId:'' ,//访问ID
            times:'',//访问次数
            appVersion:'',//用户APP版本
            appViewerId:'',//用户APP内用户ID 

            customize:{ //自定义访客信息,所有key和value都为字符串
                'name':'value',
                    ...
            }  
        }    
    } 

  • 返回值:
    {
        id:100,//req id
        type:'resp',
        err:0, //错误码        
        data:{
            pushType:-1,//推送方式(-1:未配置或者自定义推送,0:ios,1:小米,2:华为,3:魅族,11:友盟)
            server:'', //特定的服务地址
            uplaod:'',//上传文件地址
            download:''//下载文件地址前缀
        }        
    }
  • 缓存每次返回的server(特定服务地址),以后访问失败时,可以尝试接入这些地址。

修改App用户自定义信息

  • 服务路径:/app-user/${compId}/${appId}
  • method:post
  • 参数:
    {
            id:100,
            type:'appUser'
            action:'update",
            param:{
                compId:100, //公司ID  
                uniqueId:'' ,//永久ID
                viewerId:'' ,//访问ID 
                appViewerId:'',//用户APP内用户ID  
                customize:{ //自定义访客信息,所有key和value都为字符串
                   'name':'value',
                       ...
                }      
            }

    } 

  • 服务端返回
    {
        id:100,//req id
        type:'resp',
        err:0, //错误码   
    }

更新pushToken

  • 服务路径:/app-user/${compId}/${appId}
  • method:post
  • 参数:
    {
            id:100,
            type:'appUser'
            action:'pushToken",
            param:{
                compId:100, //公司ID  
                uniqueId:'' ,//永久ID
                viewerId:'' ,//访问ID 
                appViewerId:'',//用户APP内用户ID  
                pushToken:''
            }

    } 

  • 服务返回:
    {
        id:100,//req id
        type:'resp',
        err:0, //错误码 

    }

用户类型

在对话过程中,会接触到发送方和接受方的身份类别,目前定义如下:

身份 定义
客服 0
访客 1
易购 2
微信公众号 3
小程序 4
用户APP 100

消息类型说明

类型 说明
0 普通消息
1 图片(接受png,gif,jpeg,jpg)
2 语音(接受mp3,amr(可为silk v3))
3 视频(接受h264编码,mp4后缀)
4 普通文件

支持的普通文件为:bmp,webp,ico,rar,zip,7z,doc,docx,xls,xlsx,ppt,pptx,et,txt,csv,wps,wav,mp3,amr,ogg,acc,mp4,mov

建立消息通道

  • 服务路径:/connect/${compId}/${appId}?appUser=${encryptedUserIfo}
  • method:wss
  • 参数:
        {
            uniqueId:'', //访客ID
            time:10000  //当前时间戳
        }

加密后做URL转码

  • 服务返回

如果存在错误,不如传入错误的appID,可能会从通道收到错误信息:

    {
        id:100,
        type:'resp',
        err:0
    }

创建对话

  • 通过websocket发送以下数据:
    {        
        id:100,
        type:'chat'
        action:'create",
        param:{
            groupId: 10004,//目标分组
            probeId:0 //使用探头ID      
            manual:0  //1:强制接通坐席,否则依赖探头配置看接通坐席还是机器人,默认为0
        }
    }
  • 服务端返回:
    {
        id:100,
        type:'resp',     
        err:0,   
        data:{          
            mode:0,//0:对话,1:自助  
            // 为0有效
            userId: '' //用户名
            userName: '' //外部名字
            photo:'' //头像 
            email:'',
            mobile:'',
            status:0, //客服状态,0:离线或忙碌,1:在线
            fromType:0, 
            fromAppId:'',//仅当fromType=100时有效
            /为1有效
            robotName:'',
            robotPhoto:'',
            robotStupid:''
        }
    }

心跳消息

    {        
        id:100,
        type:'appUser'
        action:'heartbeat"
    }

-服务端返回:

    {
        id:100,
        type:'resp',      
        err:0  
    }

发送消息

    {
        id:100, //一个自增ID
        type:'chat",
        action:'send",
        param:{            
            category:0, //见消息类型说明
            message:'' ,
            to:'' //目标客服,可能为空
            toType:0, //目标身份
            toAppId:'' ,//仅当toType=100有效
        }                                                  
    }

评价对话

    {
        id:100,
        type:'chat',
        action:'rating',
        param:{
            score:0, //-1:很差,1:不满意,2:一般,3:满意,4:很满意
            desc:'',//评价信息(可选)
        }
    }

离开对话

    {
        id:100,
        type:'chat',
        action:'leave'
        param:{}
    }

发送访客预知输入

    {
        id:100,
        type:'chat',
        action:'typing',
        param:{
            message:'' //正在输入的消息 
        }
    }

对话消息格式

    {
        id:100,//消息ID
        type:'chat",
        data:{
            from:'' //发送者        
            category:0//0:普通消息,1:图片(接受png,gif,jpeg,jpg),2:语音(接受mp3,amr(可为silk v3)),
                                                      3:视频(接受h264编码,mp4后缀),
                                                      4:附件(目前接受后缀:png,jpg,jpeg,bmp,gif,webp,ico,rar,zip,7z,doc,docx,xls,xlsx,ppt,pptx,et,txt,csv,wps,wav,mp3,amr,ogg,acc,mp4,mov)
            message:''
            fromType:0,//发送者身份
            time:1111111 //发送时间戳
        }                                                  
    }

自助答疑

    {
        id:100,//ID
        type:'robot",
        action:'send",
        param:{
            message:'' 
        }                                                  
    }

自助答疑响应

    {
        id:100,
        type:'resp',   
        err:0,     
        data:{      
            mode:0, //0:转人工客服,1:自助回答
            //0有效      
            answers:[
                {
                    id:1,
                    question:'',
                    answer:'',
                    files:[
                        {
                            name:'',
                            url:''
                        }...                    
                    ]

                }...
            ]
            //0有效
            user:{
                 userId: '' //用户名
                 userName: '' //外部名字
                 photo:'' //头像 
                 email:'',
                 mobile:'',
                 status:0, //客服状态,0:离线或忙碌,1:在线
                 fromType:0, 
                 fromAppId:'',//仅当fromType=100时有效
            }
        }
    }

状态事件

     {
            id: 100,//消息ID
            type:'status',
            data:{
                from:'' //客服ID
                /*-----用户类事件参数------*/
                event:0, //1xx:状态类消息 100:主动下线,101:从其他客户端登路下线,102:超时离线,
                            110:上线,111:自动从忙碌转为在线状态,120:主动忙碌,121:被动忙碌,130:主动离开,131:客户端长期未操作离开
            }
     }

对话事件

      {
            id:100, //消息ID
            type:'event',
            err:0,
            data:{
                from:'' //事件发出者,或者事件对话转移触发人。访客事件则为访客viewerId
                               /*-----对话类事件参数------*/             
                event:2xx //2xx对话类消息 202,对话关闭,203:对话转移,210:正在输入
                user:{ //仅当对话转移时有效
                     userId: '' //用户名
                     userName: '' //外部名字
                     photo:'' //头像 
                     email:'',
                     mobile:'' 
                }
            }              
       }

消息确认

通过通道发送的消息需要确认,格式为:
    {
        id:100,//请求ID
        type:'confirm',
        err:0
    }