====== 客服AndroidAgentSDK API ====== ---- ===== 目录 ===== * [[#会话消息|会话消息]] * [[#会话标签管理类|会话标签管理类]] * [[#常用语管理类|常用语管理类]] * [[#坐席用户数据管理类|坐席用户数据管理类]] * [[#访客数据管理类|访客数据管理类]] * [[#留言消息管理类|留言消息管理类]] * [[#留言消息管理类|留言消息管理类]] * [[#消息中心管理类|消息中心管理类]] * [[#待接入会话管理类|待接入会话管理类]] * [[#历史会话管理类|历史会话管理类]] ===== 会话消息 ===== ==== 当前会话列表 ==== //获取进行中会话列表的消息 HDClient.getInstance().ongoingSessionManager().getSessionsFromServer(new HDDataCallBack>); ==== 消息管理类 ==== SessionManager sessionManager = new SessionManager(chatGroupId, sServiceId, toUser, new HDChatListener() { @Override public void onEnquiryChanged() { } @Override public void onNewMessage() { runOnUiThread(new Runnable() { @Override public void run() { mAdapter.refreshSelectLast(); } }); } @Override public void onClosed() { runOnUiThread(new Runnable() { @Override public void run() { ChatActivity.this.finish(); HDLog.d(TAG, "end Session:serviceId:" + sServiceId); } }); } @Override public void onClosedByAdmin() { runOnUiThread(new Runnable() { @Override public void run() { ChatActivity.this.finish(); HDLog.d(TAG, "endbyadmin Session:serviceId:" + sServiceId); } }); } }); **注意**:在Activity的onDestory中需要调用sessionManager.clear(); ==== 获取聊天消息 ==== sessionManager.asyncLoadRemoteMsg(new HDDataCallBack>); ==== 设置消息已读 ==== sessionManager.setMessageReadedMarkTag(new HDDataCallBack); ==== 加载常用语 ==== sessionManager.asyncGetPhraseValues(new HDDataCallBack>); ==== 获取聊天历史消息 ==== sessionManager.asyncLoadMoreMsg(new HDDataCallBack>); ==== 发送文本消息 ==== HDMessage messageEntity = HDMessage.createSendTextMessage(txtContent); sessionManager.sendMessage(messageEntity); mAdapter.refreshSelectLast(); ==== 发送文件消息 ==== //创建一个文件消息 filePath文件本地路径 HDMessage messageEntity = HDMessage.createSendFileMessage(filePath); sessionManager.sendMessage(messageEntity); mAdapter.refreshSelectLast(); ==== 发送语音消息 ==== // filePath为语音的本地路径 seconds为录制的时长 HDMessage messageEntity = HDMessage.createSendVoiceMessage(filePath, seconds); sessionManager.sendMessage(messageEntity); mAdapter.refreshSelectLast(); ==== 发送图片消息 ==== // filePath 图片本地路径 HDMessage messageEntity = HDMessage.createSendImageMessage(filePath); sessionManager.sendMessage(messageEntity); mAdapter.refreshSelectLast(); ==== 发送视频消息 ==== // videoPath 为视频的本地路径, thumbPath 为生成的微缩图本地路径, videoLenth为视频的长度 HDMessage message = HDMessage.createVideoSendMessage(videoPath, thumbPath, videoLength); sessionManager.sendMessage(message); mAdapter.refreshSelectLast(); ==== 重发消息 ==== // resendPos 重发的消息position sessionManager.resendMessage(resendPos); mAdapter.refreshSelectLast(); ==== 结束会话 ==== 结束正在聊天的会话 sessionManager.asyncStopSession(new HDDataCallBack); ==== 监听消息状态 ==== 通过 message 设置消息的成功失败监听 messageEntity.setMessageCallback(new HDDataCallBack); ==== 下载附件消息 ==== HDClient.getInstance().chatManager().downloadAttachment(message); ==== 获取未读消息数量 ==== CurrentSessionManager.getInstance().getTotalUnReadCount(); ==== 获取当前用户 ==== HDUser currentUser = HDClient.getInstance().getCurrentUser(); ==== 获取会话标签 ==== //获取session信息,查询会话是否已经设置,Tag标签 sessionManager.getCategorySummarys(new HDDataCallBack>; ==== 获取会话标签备注 ==== //获取Note信息 sessionManager.getCommentsFromServer(new HDDataCallBack; ==== 由标签ID获取会话标签 ==== //由标签ID获取会话标签, 一般标签需要传递页面可能会用到 List currentCategorySummarys = sessionManager.setCategorySummaryValue(ids); ===== 会话标签管理类 ===== //会话标签管理类,集中所有会话标签的相关API,其中sessionId为会话ID。 manager = new CategorySummaryManager(sessionId); //异步获取当前会话的会话备注信息 manager.asyncGetComment(new HDDataCallBack); //通过会话标签ID集合,获取对应的会话标签集合。 List list = manager.getCategorySummarysFromString(ids); //异步从服务器获取当前会话的会话标签集合 manager.asyncGetSessionSummary(new HDDataCallBack>); //获取当前会话的会话标签ID集合,一般用toString后传递。 manager.getCategorySummaryIds().toString(); //HDCategorySummary 是通过Serializable序列化,如果用intent是可以传递的。 HDCategorySummary entty = ... manager.addCategorySummary(entty);//向当前会话中添加一个会话标签,但这并不会保存到服务器,请查看下面的API解决。 //把本地缓存中的会话标签,保存到服务器 manager.asyncUpdateCategorySummarys(new HDDataCallBack; //把本地缓存中的会话标签备注信息,保存到服务器。 manager.asyncUpdateComment(tempString, new HDDataCallBack); //获取会话的标签备注信息,此方法为本地调用,只有调用过asyncGetComment后才能获取到。 manager.getComment(); //获取某个会话标签的所有子标签,用于会话标签筛选时使用。 manager.getChildCategorySummarys(entty.id); //获取根标签列表 manager.getRootCategorySummarys(); //获取所有的标签,常用语模糊搜索, 可能会比较耗时,建议放到子线程中调用 manager.getAllCategorySummarys(); HDCategorySummary entity = ... long parentId = entity.parentId;//获取父标签ID,从而拿到同级别的列表 manager.getChildCategorySummarys(parentId); ===== 常用语管理类 ===== //从网络获取常用语列表, 会返回一个list类型的数组,同时保存在数据库之中 HDClient.getInstance().phraseManager().getAllPhraseFromServer(new HDDataCallBack>); //从数据库加载常用语列表 HDClient.getInstance().phraseManager().getAllPhrase(); //读取一个常用语组 HDClient.getInstance().phraseManager().getPhrasesByParentId(parentId); //增加一个常用语 content是常用语的内容,parentId是常用语组的父节点id, leaf boolean类型是否是叶子节点 HDClient.getInstance().phraseManager().addShortCutMsgForServer(content, parentId, leaf, new HDDataCallBack); //删除一条常用语 entty为要删除的常用语实体 HDClient.getInstance().phraseManager().deleteCommonPhrase(entty, new HDDataCallBack); //更新一条常用语 entty为要删除的常用语实体 HDClient.getInstance().phraseManager().updateShortCutMsgForServer(mEntty, new HDDataCallBack); ===== 坐席用户数据管理类 ===== //获取坐席列表 坐席模式fromManager传false 管理员模式 fromManager传true(支持管理员模式的sdk以后会开放) HDClient.getInstance().agentManager().getAgentList(fromManager, new HDDataCallBack>); //获取技能组列表 HDClient.getInstance().agentManager().getSkillGroupsFromRemote(new HDDataCallBack>); //此方法用户获取管理员模式设置的一些配置参数 option为获取的配置选项名, HDClient.getInstance().agentManager().getOptionEntity(option); //设置坐席的最大接待人数 maxCount为接待人数 HDClient.getInstance().agentManager().setMaxAccessCountByServer(maxCount, new HDDataCallBack); //设置坐席的状态 status为枚举类型 HDClient.getInstance().agentManager().setStatusByServer(status, new HDDataCallBack); //获取客服问候语是否开启 HDClient.getInstance().agentManager().getAgentGreetingEnable(new HDDataCallBack); //设置客服问候语开启状态 eanble为boolean类型状态 HDClient.getInstance().agentManager().setAgentWelcomeMsgEnable(enable, new HDDataCallBack); //获取客服问候语内容 HDClient.getInstance().agentManager().getAgentGreetingContent(new HDDataCallBack); //更新客户问候语内容 HDClient.getInstance().agentManager().asyncUpdateAgentWelcontent(content, new HDDataCallBack); //获取坐席详细信息 以AgentProfileEntity实例的形式返回 HDClient.getInstance().agentManager().getAgentInfo(new HDDataCallBack); //更新坐席详细信息 以AgentProfileEntity实例形式 HDClient.getInstance().agentManager().saveUserProfile(entity, new HDDataCallBack); //上传头像到服务器 cropOutputPath为头像的路径 HDClient.getInstance().agentManager().uploadAvatarToServer(cropOutputPath, new HDDataCallBack); //获取访客账号的激活状态 HDClient.getInstance().agentManager().postAgentLinks(visitorId, new HDDataCallBack); ===== 访客数据管理类 ===== //创建会话 visitorId为访客Id HDClient.getInstance().visitorManager().getCreateSessionService(visitorId, new HDDataCallBack); //获取访客的详细信息 tenantId为租户ID, visitorId为访客Id HDClient.getInstance().visitorManager().getCustomerDetailInfo(tenantId, visitorId, new HDDataCallBack); //更新访客的详细信息 columnName为更新的列名, updateValue为更新的指 HDClient.getInstance().visitorManager().putCustomerDetailInfo(tenantId, customerId, columnName, updateValue, new HDDataCallBack); //从环信服务器下载文件 localName为文件的本地路径, remoteUrl为文件的服务器路径 HDClient.getInstance().visitorManager().downloadFile(localName, remoteUrl, new HDDataCallBack); //获取客户标签 以标签列表形式返回 HDClient.getInstance().visitorManager().getUserTag(visitorId, new HDDataCallBack>); //设置客户标签 trueOrFalse boolean值表示标签的开关, visitorId为访客Id, userTag 修改的tag实体 HDClient.getInstance().visitorManager().setTag(trueOrFalse, visitorId, userTag); HDClient.getInstance().visitorManager().setTag(trueOrFalse, visitorId, userTag, new HDDataCallBack); //创建一个环信kefu的访客账号 imAccount是IM的账号ID,nickName是昵称, techChannel是关联 回调返回是创建的访客id HDClient.getInstance().visitorManager().createVisitor(imAccount, nickname, techChannel, new HDDataCallBack); //获取坐席的客户 pageNum为页码, customersCenterEntity是配置选项实体 结果以list的形式返回 HDClient.getInstance().visitorManager().getAgentCustomersInfo(pageNum, customersCenterEntity, new HDDataCallBack>); //获取坐席的所有tag 以list形成callBack HDClient.getInstance().visitorManager().getUserTags(new HDDataCallBack>); ===== 留言消息管理类 ===== //获取留言数 (处理中、已解决、未处理) HDClient.getInstance().leaveMessageManager().getPendingTicketsCount(new HDDataCallBack); HDClient.getInstance().leaveMessageManager().getSolvedTicketsCount(new HDDataCallBack); HDClient.getInstance().leaveMessageManager().getOpenTicketsCount(new HDDataCallBack); //获取未分配的留言数 HDClient.getInstance().leaveMessageManager().getUnassignedTicketCounts(new HDDataCallBack); //获取留言列表 nextpage为加载的页码, configEntity为配置选项, agentUsers为坐席的列表 HDClient.getInstance().leaveMessageManager().getTicketsList(nextPage, configEntity, agentUsers, new HDDataCallBack); //获取可被分配的坐席列表 HDClient.getInstance().leaveMessageManager().getOtherAgents(new HDDataCallBack>); //分配留言 //分配留言给指定坐席 ticketEntity为留言实体 baseUser为坐席实体 HDClient.getInstance().leaveMessageManager().putTicketTask(baseUser, ticketEntity, new HDDataCallBack); //删除某条留言的负责人 ticketEntity是留言实体, HDClient.getInstance().leaveMessageManager().deleteTicketAssignee(ticketEntity, new HDDataCallBack); //批量分配留言 baseUser是留言的负责人, getSelectedListIds()是要被分配的留言Id的list HDClient.getInstance().leaveMessageManager().batAssignTicketAssignee(baseUser, getSelectedListIds(), new HDDataCallBack); //批量删除留言的负责人 getSelectedListIds()是要被分配的留言Id的list HDClient.getInstance().leaveMessageManager().batDeleteTicketAssignee(getSelectedListIds(), new HDDataCallBack); //修改留言 //获取某天留言的评论 ticketEntity是留言实体 结果以评论实体的list形式回调 HDClient.getInstance().leaveMessageManager().getTicketComments(ticketEntity, new HDDataCallBack>); //更改留言的状态 ticketEntity是修改的留言,status是修改后的留言状态 HDClient.getInstance().leaveMessageManager().putTicketStatus(ticketEntity, tempStatusList.get(position), new HDDataCallBack); //给留言加评论 content为文字评论, fileList为已经上传的文件列表, ticketEntity是修改的留言实体 HDClient.getInstance().leaveMessageManager().sendComment(content, fileList, ticketEntity, new HDDataCallBack); //评论上传文件 filePath为文件的本地路径 HDClient.getInstance().leaveMessageManager().sendTicketCommentFile(filePath, new HDDataCallBack); ===== 消息中心管理类 ===== 消息管理类可以记录当前页面的通知总数和未读通知数,包含获取通知的接口和标记通知已读的接口 //初始化消息中心实例 noticeManager = new NoticeManager(); // 通知总数 noticeManager.getTotal_count(); //未读通知数 noticeManager.getUnread_count(); //设置每页的加载个数 noticeManager.setPageCount(max); //由于有刷新功能,所以这里设计了2个加载数据的方法,loadTheFirstPageData加载第一页数据 loadMoreData加载后面页的数据 //typeSettings 是当前通知类型(包括3个typeAll,typeAgent,typeSystem) noticeManager.loadTheFirstPageData(typeSettings, isUnreadSettings, new HDDataCallBack>); noticeManager.loadMoreData(typeSettings, isUnreadSettings, new HDDataCallBack>); //标记通知为已读 noticeEntity是选择的通知实体 noticeManager.markNoticeRead(noticeEntity, new HDDataCallBack); //全部通知标记为已读 noticeEntities是未读的通知实体list noticeManager.makeAllMarkRead(noticeEntities, new HDDataCallBack); //获取未读的消息数,以列表形式返回,需要后期处理一下,请参考demo noticeManager.getUnReadCount(new HDDataCallBack>); ===== 待接入会话管理类 ===== //初始化消息中心实例 waitAccessManager = new WaitAccessManager(); //获取技能组信息 waitAccessManager.loadSkillGroup(new HDDataCallBack>); //设置每页的加载个数 waitAccessManager.setPageCount(max); //获取等待的会话 isSearch是否是筛选, agentList为技能组信息 pogeNum为加载的页码 waitAccessManager.getUserWaitQueues(isSearch, agentList, pageNum, new HDDataCallBack>); //结束等待的会话 bean是会话的实体 waitAccessManager.waitAbort(bean, new HDDataCallBack); //转接等待的会话 userId是转接坐席的id(字符串类型,没有填“”), queueId是转接的技能组id(long类型没有填-1) waitAccessManager.transferWaitAccess(bean, userId, queueId, new HDDataCallBack); //接入等待的会话 waitAccessManager.accessWaitUser(bean, new HDDataCallBack); //设置筛选的条件 参数为WaitAccessScreenEntity实体 waitAccessManager.setScreeningOption(screenEntity); //获取等待的会话总数 waitAccessManager.getTotal_count(); ===== 历史会话管理类 ===== //初始化历史会话实例 historySessionManager = new HistorySessionManager(); //设置每页的加载个数 historySessionManager.setPageCount(max); //从服务器获取的历史会话 historySessionManager.getFirstPageSessionHistory(new HDDataCallBack>); historySessionManager.loadMoreData(new HDDataCallBack>); //获取已加载历史会话列表 historySessionManager.getList(); //设置筛选数据 historySessionManager.setCurrentTimeInfo(currentTimeInfo.getStartTime(), currentTimeInfo.getEndTime()); //时间 historySessionManager.setScreenOption(screenEntity); //传入筛选选项实体 //获取历史会话总数 historySessionManager.getTotal_entries();