差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
cs:300visitoraccess:androidsdkapi [2019/05/20 04:14]
liulj [发送扩展消息]
cs:300visitoraccess:androidsdkapi [2023/11/21 07:31] (当前版本)
lqyang [获取当前会话ID]
行 7: 行 7:
   * [[#​设置当前登录用户的推送昵称|推送昵称]]   * [[#​设置当前登录用户的推送昵称|推送昵称]]
   * [[#​实时音视频|实时音视频]]   * [[#​实时音视频|实时音视频]]
 +  * [[#​集成声网音视频|集成声网音视频]]
   * [[#​欢迎语|欢迎语]]   * [[#​欢迎语|欢迎语]]
-  * [[#高级功能|高级功能]]+  * [[#初始化访客语种|初始化访客语种]]
 ===== 消息 ===== ===== 消息 =====
  
行 88: 行 89:
 <code java> <code java>
 VisitorInfo info = ContentFactory.createVisitorInfo(null);​ VisitorInfo info = ContentFactory.createVisitorInfo(null);​
-info.nickName("​user nick")+info.nickName("​user nick"​) ​  //​nickname不能为空
     .name("​truly name")     .name("​truly name")
     .qq("​10000"​)     .qq("​10000"​)
行 94: 行 95:
     .description(""​)     .description(""​)
     .email("​abc@123.com"​);​     .email("​abc@123.com"​);​
 +
 +// 自定义字段传参集成用户信息 userDefineColumn 是 json 字符串 格式例如:"​{\"​WQQ\":​\"​帅哥\",​\"​QAZ\":​\"​LLLLLLLTTTTTTTT\"​}"​
 +JSONObject content = info.getContent();​
 +// 创建数据,将数据设置给userDefineColumn
 +JSONObject object = new JSONObject();​
 +// key是字段ID
 +object.put("​WQQ","​帅哥"​);​
 +object.put("​QAZ","​LLLLLLLTTTTTTTT"​);​
 +// 将userDefineColumn字段及对应的数据添加到VisitorInfo里
 +content.put("​userDefineColumn",​object.toString());​
 +
 Message message = Message.createTxtSendMessage(content,​ toChatUsername);​ Message message = Message.createTxtSendMessage(content,​ toChatUsername);​
 message.addContent(info);​ message.addContent(info);​
行 108: 行 120:
     .imageUrl("​https://​o8ugkv090.bkt.clouddn.com/​em_three.png"​)//​显示图片     .imageUrl("​https://​o8ugkv090.bkt.clouddn.com/​em_three.png"​)//​显示图片
     .itemUrl("​https://​www.baidu.com"​);​ //​点击会跳转到哪     .itemUrl("​https://​www.baidu.com"​);​ //​点击会跳转到哪
 +    ​
 +// 获取内容,添加key-value
 +JSONObject content = track.getContent();​
 +// 添加key-value
 +content.put("​android","​我是android表单预填写的值"​);​
 +
 Message message = Message.createTxtSendMessage(content,​ toChatUsername);​ Message message = Message.createTxtSendMessage(content,​ toChatUsername);​
 message.addContent(track);​ message.addContent(track);​
 +
 +HashMap<​String,​ Object> map = new HashMap<>​();​
 +//​预填工单功能 一定要添加如下代码 不然没有这个功能
 +map.put("​createTicketEnable",​true);​
 +// msgtype里添加值
 +message.addMsgTypeDictionary(map);​
 +
 ChatClient.getInstance().chatManager().sendMessage(message,​ new Callback() {}); ChatClient.getInstance().chatManager().sendMessage(message,​ new Callback() {});
 </​code>​ </​code>​
行 123: 行 148:
     .imageUrl(IMAGE_URL_1)     .imageUrl(IMAGE_URL_1)
     .itemUrl("​https://​www.baidu.com"​);​     .itemUrl("​https://​www.baidu.com"​);​
 +    ​
 +// 获取内容,添加key-value
 +JSONObject content = info.getContent();​
 +// 添加key-value
 +content.put("​android","​我是android表单预填写的值"​);​
 +
 Message message = Message.createTxtSendMessage(content,​ toChatUsername);​ Message message = Message.createTxtSendMessage(content,​ toChatUsername);​
 message.addContent(info);​ message.addContent(info);​
 +
 +HashMap<​String,​ Object> map = new HashMap<>​();​
 +//​预填工单功能 一定要添加如下代码 不然没有这个功能
 +map.put("​createTicketEnable",​true);​
 +// msgtype里添加值
 +message.addMsgTypeDictionary(map);​
 +
 ChatClient.getInstance().chatManager().sendMessage(message,​ new Callback() {}); ChatClient.getInstance().chatManager().sendMessage(message,​ new Callback() {});
 </​code>​ </​code>​
行 278: 行 316:
 </​code>​ </​code>​
  
 +==== 更新会话为已读 ====
 +
 +<code java>
 +/**
 + * 在线聊天,通知坐席,消息标记已读
 + * @param tenantId 租户id
 + * @param sessionId 会话id
 + * @param callBack 回调
 + */
 +ChatClient.getInstance().chatManager().asyncMarkAllMessagesAsRead(String tenantId, String sessionId, ValueCallBack<​String>​ callBack);
 +</​code>​
 ===== 满意度评价 ===== ===== 满意度评价 =====
  
行 298: 行 347:
  
 MessageHelper.sendEvalMessage(currentMessage,​ "​评价备注内容",​ currentDegree,​ selectedTags,​ new Callback());​ MessageHelper.sendEvalMessage(currentMessage,​ "​评价备注内容",​ currentDegree,​ selectedTags,​ new Callback());​
 +
 +
 +// evaluateWay 评价方式:由前端传入,visitor访客主动评价,agent坐席邀请,system强制邀请访客点击关闭窗口或会话结束
 +MessageHelper.sendEvalMessage(Message message, String evaluateWay,​ String detail, EvaluationInfo.Degree degree, List<​EvaluationInfo.TagInfo>​ selectedTags,​ List<​EvaluationInfo.ResolutionParam>​ resolutionParams,​ final Callback callback)
 +
 +</​code>​
 +详见:商城Demo:​ com.easemob.helpdeskdemo.ui.SatisfactionActivity
 +
 +==== 获取配置对应的接口 ====
 +<​code>​
 +// 问题解决评价 通过页面设置,满意度评价 --> APP,微信,网页,通过如下接口返回勾选的名称
 +AgoraMessage.asyncProblemSolvingOnServiceSessionResolved(String tenantId, final ValueCallBack<​String>​ callBack)
 +
 +
 +// 问题解决评价引导语,通过页面设置,通过如下接口获取设置值
 +AgoraMessage.asyncEvalSolveWord(String tenantId, String serviceSessionId,​ final ValueCallBack<​String>​ callBack)
 +
 +
 +// 问题解决评价,通过页面设置,通过如下接口获取设置值
 +AgoraMessage.asyncResolutionParams(String tenantId, String serviceSessionId,​ final ValueCallBack<​String>​ callBack)
 +
 +// 满意度评分引导语,通过页面设置,通过如下接口获取设置值
 +AgoraMessage.asyncGreetingMsgEnquiryInvite(String tenantId, String serviceSessionId,​ final ValueCallBack<​String>​ callBack)
 </​code>​ </​code>​
  
行 306: 行 378:
 <​code>​ <​code>​
  ​ChatClient.getInstance().chatManager().asyncSendInviteEvaluationMessage(toChatUsername,​ null);  ​ChatClient.getInstance().chatManager().asyncSendInviteEvaluationMessage(toChatUsername,​ null);
 +
 +// serviceSessionId根据当前会话,进行语种翻译
 +ChatClient.getInstance().chatManager().asyncSendInviteEvaluationMessage(final String toChatUsername,​ String serviceSessionId,​ final Callback callback)
 </​code>​ </​code>​
  
行 409: 行 484:
 IntentFilter callFilter = new IntentFilter(ChatClient.getInstance().callManager().getIncomingCallBroadcastAction());​ IntentFilter callFilter = new IntentFilter(ChatClient.getInstance().callManager().getIncomingCallBroadcastAction());​
 registerReceiver(new CallReceiver(),​ callFilter);​ registerReceiver(new CallReceiver(),​ callFilter);​
- 
 private class CallReceiver extends BroadcastReceiver { private class CallReceiver extends BroadcastReceiver {
- 
     @Override     @Override
     public void onReceive(Context context, Intent intent) {     public void onReceive(Context context, Intent intent) {
行 548: 行 621:
  
 </​code>​ </​code>​
 +
 +==== 共享桌面 ====
 +
 +1.在android 5.0以上可以使用共享桌面功能,共享桌面以单独的一路流发布出去。
 +
 +2.共享桌面的api在CallManager类中。发布共享桌面, 需要输入使用共享桌面功能的当前的activity.
 +callback会返回共享桌面操作是否成功。
 +<code java>
 +public void publishWindow(final Activity activity, final Callback callback)
 +</​code>​
 +
 +3.取消共享桌面
 +<code java>
 +public void unPublishWindow(final Callback callback)
 +</​code>​
 +4.可以参考访客demo中VideoCallActivity类中的实现。
 +===== 集成声网音视频(注意:SDK版本必须高于V1.3.0) =====
 +
 +==== 监听呼入通话 ​ ====
 +
 +通过注册相应 action 的 BroadcastReceiver ​
 +
 +<​code>​
 +// 通过注册相应 action 的 BroadcastReceiver 来监听呼叫过来的通话,接到广播后开发者可以调起 APP 里的通话 CallActivity页面
 +IntentFilter callFilter = new IntentFilter(ChatClient.getInstance().callManager().getIncomingCallBroadcastAction());​
 +callFilter.addAction("​calling.state"​);​
 +registerReceiver(new CallReceiver(),​ callFilter);​
 +
 +public class CallReceiver extends BroadcastReceiver {
 +    boolean mIsOnLine;
 +    @Override
 +    public void onReceive(Context context, Intent intent) {
 +        if (!ChatClient.getInstance().isLoggedInBefore()){
 +            return;
 +        }
 +        String action = intent.getAction();​
 +        if ("​calling.state"​.equals(action)){
 +            // 防止正在通话中,又新发来视频请求,isOnLine代表是否接通通话中
 +            mIsOnLine = intent.getBooleanExtra("​state",​ false);
 +        }else {
 +            //call type
 +            String type = intent.getStringExtra("​type"​);​
 +            boolean isVecVideo = intent.getBooleanExtra("​isVecVideo",​ false);
 +            if ("​video"​.equals(type)){//​ video call
 +                if (!mIsOnLine){
 +                    if (isVecVideo){
 +                        // 新版vec视频客服
 +                        VECKitCalling.callingResponse(context,​ intent);
 +                    }else {
 +                        // 旧版在线视频
 +                        Calling.callingResponse(context,​ intent);
 +                    }
 +                }
 +            }else if (AgoraMessage.TYPE_ENQUIRYINVITE.equalsIgnoreCase(type)){
 +                // 满意度评价
 +                VECKitCalling.callingEvaluation(context,​ intent.getStringExtra("​content"​));​
 +            }
 +        }
 +    }
 +}
 +
 +// 在线视频CEC。通话页面注册通知
 +AgoraMessage.newAgoraMessage().registerCecMessageNotify(String classKey, ICecMessageNotify message);
 +// 在线视频CEC。注销通知
 +AgoraMessage.newAgoraMessage().unRegisterCecMessageNotify(String classKey);
 +
 +// 在线视频VEC。通话页面注册通知
 +AgoraMessage.newAgoraMessage().registerVecMessageNotify(String classKey, IVecMessageNotify message);
 +// 在线视频VEC。注销通知
 +AgoraMessage.newAgoraMessage().unRegisterVecMessageNotify(String classKey);
 +</​code>​
 +相关方法使用和集成参考http://​docs.easemob.com/​cs/​300visitoraccess/​androidui-1
 +
 +或者 参考官网demo
  
  
行 556: 行 703:
 <​code>​ <​code>​
 ChatClient.getInstance().chatManager().getEnterpriseWelcome(new ValueCallBack<​String>​() {}); ChatClient.getInstance().chatManager().getEnterpriseWelcome(new ValueCallBack<​String>​() {});
 +
 +/**
 + * 获取企业欢迎语(根据语种自动翻译)
 + * String visitorUserName 访客登录用户名
 +*/
 +ChatManager.getInstance().getEnterpriseWelcome(String visitorUserName,​ final ValueCallBack<​String>​ callback);
 </​code>​ </​code>​
  
 +==== 获取机器人欢迎语 ====
 +注意:kefu-sdk-1.3.3.2版本以上(不包含1.3.3.2版本)使用如下方式获取机器人欢迎语接口
 +<​code>​
 +/**
 + * 获取机器人欢迎语接口(根据语种自动翻译)
 + * String imServiceNumber im服务号
 + * String visitorUserName 访客登录用户名
 + * ValueCallBack<​JSONObject>​ callBack 回调函数
 +*/
 +ChatClient.getInstance().chatManager().getRobotWelcome(imServiceNumber,​ visitorUserName,​ callBack);
 +注意:接口返回的数据需要自行解析,显示到到屏幕上。详细代码参考kefu-easeui模块ChatFragment类requestRobotWelcome()方法
 +</​code>​
 +==== 获取app关联中个性化会话设置的企业欢迎语 ====
 +
 +<​code>​
 +/**
 +  * APP关联设置中开启开关:个性化会话设置 --> 获取企业欢迎语
 +  * @param easeMobIMNumber IM服务号
 +  * @param visitorUserName 访客登录用户名
 +  * @param callback 回调函数
 +  */
 +ChatClient.getInstance().chatManager().getAppRelevanceEnterpriseWelcomeWithVisitorUserName(String easeMobIMNumber,​ String visitorUserName,​ final ValueCallBack<​String>​ callback);
 +</​code>​
 +==== 获取技能组菜单 ====
 +<​code>​
 +/**
 +  * 获取技能组菜单(根据语种自动翻译)
 +  * tenantId 租户id
 +  * visitorUserName 登录用户名
 +  * callBack 回调函数
 + */
 +AgoraMessage.getSkillGroupMenuWithVisitorUserName(String tenantId, String visitorUserName,​ ValueCallBack<​String>​ callBack);
 +</​code>​
 +
 +==== 获取app关联中个性化会话设置的欢迎语菜单指定技能组 ====
 +<​code>​
 +/**
 +  * APP关联设置中开启开关:个性化会话设置 --> 获取欢迎语菜单
 +  * @param easeMobIMNumber IM服务号
 +  * @param visitorUserName 登录用户名称
 +  * @param callBack 回调函数
 +  */
 +ChatClient.getInstance().chatManager().getAppRelevanceSkillGroupMenuWithVisitorUserName(String easeMobIMNumber,​ String visitorUserName, ​ final ValueCallBack<​String>​ callBack);
 +</​code>​
 ==== 获取当前会话ID ==== ==== 获取当前会话ID ====
 <​code>​ <​code>​
行 566: 行 763:
 </​code>​ </​code>​
  
 +==== 获取访客ID ====
 +<​code>​
 +// conversationId 为IM服务号,callBack回调函数
 +ChatClient.getInstance().chatManager().asyncVisitorId(conversationId,​ callBack);
 +</​code>​
 +
 +==== 关闭当前会话 ====
 +<​code>​
 +// tenantId 租户ID,visitorId访客ID,serviceSessionId会话ID,callBack回调函数
 +ChatClient.getInstance().chatManager().asyncCecClose(tenantId,​ visitorId, serviceSessionId,​ callBack);
 +</​code>​
 ===== 高级功能 ===== ===== 高级功能 =====
  
行 628: 行 836:
 // 在onDestroy中调用移除监听 ​   ​ // 在onDestroy中调用移除监听 ​   ​
 ChatClient.getInstance().chatManager().removeAgentInputListener(agentInputListener);​ ChatClient.getInstance().chatManager().removeAgentInputListener(agentInputListener);​
 +</​code>​
 +
 +===== 初始化访客语种 =====
 +
 +==== 初始化访客语种 ====
 +
 +<​code>​
 +/**
 +  * 初始化访客语种(登录成功后初始化语种)
 +  * @param tenantId 租户id
 +  * @param language 语言,参考文档 http://​docs.easemob.com/​cs/​100agentmode/​10conversation#​智能翻译
 +  * @param appKey appKey
 +  * @param visitorUserName 注册时的用户名
 +  * @param callBack 回调
 + */
 +AgoraMessage.asyncInitLanguage(String tenantId, String language, String appKey, String visitorUserName,​ ValueCallBack<​String>​ callBack);
 </​code>​ </​code>​