差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
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> |