6.2 代码快速集成

在会话界面需要添加SDK lib中的代码,将消息服务集成到您的项目中。具体接口调用和代码添加如下。

6.2.1 初始化SDK

SDK 初始化参考 5.1

6.2.2 开启消息服务

在会话界面 Activity 的 onCreate 中调用:

// 开启消息服务
V5ClientAgent.getInstance().start(Context context, V5MessageListener listener);

其中 V5MessageListener 是消息回调监听器:

public interface V5MessageListener {
    public void onConnect(int unreadSize); // 建立连接,参数:连接后获取到未读消息数量
    public void onMessage(String json); // 返回消息为json字符串(兼容后期接口类型扩展)
    public void onMessage(V5Message message); // 返回消息对象
    public void onError(V5KFException error); // 返回异常信息
    public void onServingStatusChange(ClientServingStatus status); // 客户服务状态改变
}

初始化内容包括:

  1. 设置消息回调监听器;
  2. 向 V5 认证服务进行客户端认证,根据 AndroidManifest 配置的站点信息和客户端生成的客户 ID 向认证服务器认证(这之前可进行客户端用户信息设置,参见 6.2.5),获取会话参数;
  3. 认证成功并返回参数后开启 V5ClientService 消息服务。

6.2.3 消息接口调用

获得开场白:

/**
 * 获得开场消息
 * @param mode 开场白模式(定义见5.4) 
 * @param param 可变参数
 */
public void getOpeningMessage(ClientOpenMode mode, String param)

发送消息调用:

V5ClientAgent.getInstance().sendMessage (V5Message message, MessageSendCallback callback);

发送消息的第一个参数是 V5Message 消息对象,支持发送文本消息、位置消息、图片消息、控制消息:

// 新建文本消息
V5TextMessage textMsg = V5MessageManager.getInstance().obtainTextMessage(“消息内容”);
// 新建位置消息
V5LocationMessage locationMsg = V5MessageManager.getInstance().
    obtainLocationMessage(
       double latitude,     // 纬度
       double longitude,    // 经度
       double accuracy,     // 精度,可为0
       String address);     // 地址描述,可为null

// 新建图片消息——发送本地图片
V5ImageMessage imageMsg = V5MessageManager.getInstance().obtainImageMessage(
        String filePath);   // 本地图片路径
// 新建图片消息——发送网络图片
V5ImageMessage imageMsg = V5MessageManager.getInstance().obtainImageMessage(
        String pic_url,     // 图片URL
        String media_id);   // 媒体ID,可为null
// 新建控制消息
V5ControlMessage controlMsg = V5MessageManager.getInstance().obtainControlMessage(
        int code,         // 代码
        int argc,         // 参数数量,可为0,即参数可为空
        String argv);     // 参数值(字符串),可为null
// 目前开放的控制消息为转人工客服消息:code = 1,其他参数为空,示例如下:
V5Message msg = V5MessageManager.getInstance().obtainControlMessage(1, 0, null);

发送消息的第二个参数 MessageSendCallback 为消息发送结果回调:

public interface MessageSendCallback {
    public void onSuccess(V5Message message); // 成功
    public void onFailure(V5Message message, int statusCode, String desc); // 失败 
}

转人工客服可调用:

// 请求人工客服服务
V5ClientAgent.getInstance().switchToArtificialService(MessageSendCal lback callback);

不需要客服消息服务时需要关闭消息服务:

V5ClientAgent.getInstance().onDestroy(); // 关闭消息服务

关闭消息服务表示用户下线,即无法继续接收消息,当用户再次进入会话界面时才能继续消息请求和接收,用户下线后消息将会缓存。若设置了离线消息的推送服务器地址,您的服务器将会收到用户下线后的离线消息,可选择自行推送到您的 APP,或者保存到您的服务端,此外可选择对接到第三方推送平台,目前已支持腾讯信鸽推送和百度云推送。

6.2.4 生命周期处理

添加到会话界面 Activity 中 onStartonStoponDestroy 中处理的代码:

@Override
protected void onStart() {
    super.onStart();
    V5ClientAgent.getInstance().onStart(); // 通知消息服务 onStart 
}
@Override
protected void onStop() {
    super.onStop();
    V5ClientAgent.getInstance().onStop(); // 通知消息服务 onStop
}

@Override
protected void onDestroy() { 
    super.onDestroy();
    V5ClientAgent.getInstance().onDestroy();// 关闭消息服务,通知消息服务onDestroy
}

6.2.5 用户信息设置

V5ClientConfig 的配置需要在执行 SDK 的 startChat*** 方法初始化之前设置,非必须,但设置易识别的用户信息有助于客服识别客户,提高客服效率和服务质量,具体代码如下:

V5ClientConfig config = new V5ClientConfig(Context context);

//当nickname、uid、avatar、device_token等配置项配置完下次需要修改并向座席更新时
//需要在之前调用shouldUpdateUserInfo(),这样才会向服务端更新这几个配置项
// config.shouldUpdateUserInfo();

//【建议】设置昵称
config.setNickname("昵称");
//【建议】设置头像URL
config.setAvatar("http://static.v5kf.com/images/web/fodder/xlogo.png");
/**
 *【建议】设置用户OpenId,以识别不同登录用户,不设置则默认由SDK生成,替代v1.2.0之前的uid,
 *  openId将透传到座席端(长度32字节以内,建议使用含字母数字和下划线的字符串,尽量不用特殊字符,若含特殊字符系统会进行URL encode处理,影响最终长度和座席端获得的结果)
 */
config.setOpenId("android_sdk_test");
//config.setUid(uid); //【弃用】请使用setOpenId替代
// 设置性别 0-未知 1-男 2-女
config.setGender(1);
// 设置用户VIP等级(0-5)
config.setVip(0);
// 设置device_token:集成第三方推送(腾讯信鸽、百度云推)时设置此参数以在离开会话界面时接收推送消息
config.setDeviceToken(String device_token);

推送消息接受会收到后,在通知栏点击时需要打开客服会话界面。若您使用第三方推送平台将会返回一组自定义参数 "v5_action" : "new_message",以此区分是否是来自 V5 智能客服系统的消息;若您使用自己的推送服务器,您可以在接收到消息后自行标记此消息并推送到客户端 APP(根据 device_token 识别接收客户端),然后启动您自定义的客服会话界面。

6.2.6 查询会话消息

  • 1.当开启消息缓存时,可以通过下面的接口查询缓存的历史消息:
V5ClientAgent.getInstance().getMessages(int offset, int size, OnGetMessagesCallback callback)

其中 offset 为请求起始位置,size 为最多返回消息数,返回的 finish 为 true 时说明已没有更多会话,offsetsize 均为 0 时表示查询当前会话全部消息。OnGetMessagesCallback 为获取历史消息的回调,以表示历史消息获取成功,参数为消息对象列表:

public interface OnGetMessagesCallback {
    // 执行完成
    public void complete(List<V5Message> msgs, int offset, int size, boolean finish);  
}

此外,提供清空历史消息缓存接口:

V5ClientAgent.getInstance().clearLocalHistoricalMessages(Context context);
  • 2.查询离线消息
V5ClientAgent.getInstance().getOfflineMessages(int offset, int size, OnGetMessagesCallback callback)

其中 offset 为请求起始位置,size 为最多返回消息数,返回的 finish 为 true 时说明已没有更多会话,offset 和 size 均为 0 时表示查询当前会话全部消息, OnGetMessagesCallback 为获取离线消息的回调,使用 UI 库开发时不需要设置此回调(设为 null),SDK 自行处理此回调获得的消息并显示在消息列表。

注: getOfflineMessages 接口的 offset 参数已被后台忽略,设置无效,一次查询全部离线消息,offset 和 size 均设定为 0 即可。

6.2.7 查询服务状态

获取会话服务状态:

V5ClientAgent.getInstance().getStatus();

状态返回在 V5MessageListeneronServingStatusChange 中回调:

public void onServingStatusChange(ClientServingStatus status);

客服状态值和含义如下:

public enum ClientServingStatus {
    clientServingStatusRobot, // 机器人服务 
    clientServingStatusQueue, // 排队中(等待人工客服,当前为机器人服务)
    clientServingStatusWorker, // 人工服务 
    clientServingStatusInTrust; // 人工交给机器人托管
}

6.2.8 其他设置

客户端的调试日志显示和其他配置(以下设置值为 SDK 内默认值):

// V5客服系统客户端配置(以下值均为默认值,仅作示例,不需修改可不必设置)
V5ClientConfig config = V5ClientConfig.getInstance(this);
V5ClientConfig.USE_HTTPS = true; // 使用加密连接,默认true
V5ClientConfig.SOCKET_TIMEOUT = 20000; // 默认设置请求超时时间20s

// 是否需要界面支持(涉及到离线消息自动获取和本地缓存)
V5ClientConfig.UI_SUPPORT = false; // 使用UI快速集成须设此项为true

// 是否允许本地缓存消息(UI_SUPPORT true时需设置此项为true)
config.setLocalMessageCacheEnable(true);

config.setHeartBeatEnable(true); // 允许发送心跳包保活
config.setHeartBeatTime(30000); // 心跳包间隔30000ms
config.setShowLog(true); // 显示日志,默认为true
config.setLogLevel(V5ClientConfig.LOG_LV_DEBUG); // 显示日志级别,默认 为全部显示
// 清除缓存,语音、图片等缓存在应用data/cache目录下
V5ClientAgent.clearCache(Context context);

results matching ""

    No results matching ""

    results matching ""

      No results matching ""