<meta-data
android:name="EWEI_APPSECRET"
aandroid:value="{当前服务商AppSecret}" />
3、在Application进行初始化。
// 初始化
EweiSdkInitializer.initialize(this, "{当前服务商域名}");
// 是否调试日志
EweiSdkInitializer.enableDebug(true);
// 设置系统主题色
EweiSdkInitializer.setKeyColor("#0099FF");
用户名匹配顺序: email -> mobilePhone -> externalId。
EweiConfig.initUserAccount("xxx@test.com");
如果你的 apk 最终会经过代码混淆,请在 proguard 配置文件中加入以下代码。
-dontwarn class com.ewei.sdk.** {*;}
-keep class com.ewei.sdk.** {*;}
当sdk初始化成功之后,会启动EweiWebSocket接受消息,分发广播。你可以在需要监听的位置添加你的广播接收类,继承EweiReceiver。重写对应方法,进行消息拦截与处理。
添加监听(EweiWebSocket类下方法)
添加会话订阅,对应会话ID和自身拟定key(消息通知返回标识)
public void addChatSubscribe(@NonNull String chatId, @NonNull String msgKey, ChatInterface chatInterface)
移除会话渠道订阅
public void removeChatSubscribe(@NonNull String chatId)
添加工单渠道订阅,对应工单ID和自身拟定key(消息通知返回标识),ticketInterface为消息返回回调
public void addTicketSubscribe(@NonNull String ticketId, @NonNull String msgKey, TicketInterface ticketInterface)
删除工单渠道订阅
public void removeTicketSubscribe(@NonNull String ticketId)
消息接收(继承EweiReceiver)
Token身份信息(一般用户身份信息过期,重新获取身份信息)
public void onTokenMessage(String messageInfo)
长链接连接
public void onSocketOpenMessage()
长链接断开
public void onSocketCloseMessage()
工单消息回调(TicketInterface)
工单状态变更
public void onTicketChange(String messageKey, String pushType, Integer[] ticketIds)
接收工单回复通知
public void onTicketComment(String messageKey, String pushType, TicketCommentPush pushInfo)
接收工单日志消息
public void onTicketLog(String messageKey, String pushType, TicketLogPush pushInfo)
会话消息回调
会话转接消息通知
public void onChatTransfer(String messageKey, String pushType, ChatTransfer pushInfo)
会话结束消息通知
public void onChatClose(String messageKey, String pushType, ChatClose pushInfo)
会话转工单消息通知
public void onChatToTicket(String messageKey, String pushType, ChatToTicket pushInfo)
会话日志消息通知
public void onChatLog(String messageKey, String pushType, ChatLog pushInfo)
会话消息通知
public void onChatMessage(String messageKey, String pushType, ChatMessage pushInfo)
会话消息提醒
public void onChatNotice(String messageKey, String pushType, Integer chatId, User user)
会话消息撤回
public void onChatLogDelete(String messageKey, String pushType, String chatLogUid)
帮助中心
我们开放帮助中心板块、文章、论坛相应接口,可直接调用数据返回,可根据自身App风格设置界面,详情参考demo。
文章/论坛详情
在ArticleDetailWebBrowserActivity中直接调用。
public static void startActivity(@NonNull Context context, String title, @NonNull String topicType, @NonNull Integer articleId)
工单列表
现阶段我们开发获取工单列表接口,并返回相应参数,可根据自身App风格设置界面,详情参考demo。
提交工单
目前由于提交工单涉及逻辑较为复杂,我们暂不开放接口,提供UI界面,可直接调用。
SubmitTicketActivity.startActivity(MainActivity.this);
工单详情
目前由于工单逻辑较为复杂,我们暂不开放接口,提供UI界面,可直接调用。我们提供head自定义话,详情参考demo程序。
public static void startTicketActivity(Activity context, Ticket ticket, Class<? extends BaseTicketActivity> cls, int requestCode)
会话信息
目前由于会话逻辑较为复杂,我们暂不开放接口,提供UI界面,可直接调用,也可自定义消息内容样式。由工具类ChatUtils直接调用启动。
开启会话
public static void starChatActivity (BaseActivity context, Class<? extends BaseChatActivity> cls)
我们提供工单头部消息,以及会话回复消息格式样式的定制,后期会增加更多的定制功能。
工单(参考demo程序)
工单信息赋值
@Override
protected void refreshHeadControl(Ticket mTicket)
附件信息点击
@Override
protected void onClickAttachment(Attachment attachment, String localUrl, String fileType)
文章信息点击
@Override
protected void onClickArticle(Article article)
会话信息点击
@Override
protected void onClickChat(int chatId)
地图信息点击
@Override
protected void onClickMap(double latitude, double longitude, String addressStr)
工单内工单跳转
protected void onClickTicket(int ticketId)
是否开始定位发送
protected Boolean isOpenLocation()
发送地图选择
protected void clickMapLocation()
地图信息发送
protected void addLocationReply(String path, double latitude, double longitude, String address)
参数说明:地图截图图片位置,经纬度,地址信息
重设工单显示标题
protected void setTicketTitle(String titleStr)
会话(参考demo程序)
文章信息点击
@Override
protected void onClickArticle(Article article)
附件信息点击
@Override
protected void onClickAttachment(Attachment attachment, String localUrl, String fileType)
添加文本类消息样式
protected View addTextView(ChatLogMessage chatLog, boolean isLeft)
添加附件类消息样式
@Override
protected View addFileView(ChatLogMessage chatLog, boolean isLeft)
添加语言消息样式
@Override
protected View addAudioView(ChatLogMessage chatLog, boolean isLeft)
添加视频消息样式
@Override
protected View addVideoView(ChatLogMessage chatLog, boolean isLeft)
添加图片消息样式
@Override
protected View addImageView(final ChatLogMessage chatLog, boolean isLeft)
添加知识库文章消息样式
@Override
protected View addKnowledgeView(ChatLogMessage chatLog, boolean isLeft)
添加未识别消息样式
@Override
protected View addUnknownView(ChatLogMessage chatLog, boolean isLeft)
是否开始定位发送
protected Boolean isOpenLocation()
发送地图选择
protected void clickMapLocation()
地图信息发送
protected void addLocationReply(String path, double latitude, double longitude, String address)
参数说明:地图截图图片位置,经纬度,地址信息
添加地图布局
@Override
protected View addLocationView(ChatLogMessage chatLog, boolean isLeft)
添加对应key
在自身App对应AndroidManifest.xml文件中添加百度地图key
<!-- 在百度开发者中心查询应用的API Key -->
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="${lbsapi_key}" />
添加对应lib包、so文件至资源目录
初始化百度地图模块
/**
* 初始化百度定位组件
*/
SDKInitializer.initialize(getApplicationContext());
帮助中心知识库(ArticleHttp)
版块目录查询
方法名:listTopics
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
languageType | 语言类型 | 枚举LanguageType | 否 | ZH_CN(中文)EN_US(英文),空值默认中文 |
isArticle | 是否为文章 | Boolean | 是 | true:文章版块false:帖子版块 |
requestListener | 请求回调 | RequestListener<TopicPageModel> | 否 | 请求回调 |
根据版块查询文章(帖子)列表
方法名:listArticleByTopic
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
page | 分页信息 | Page类 | 是 | |
topicId | 版块Id | Integer | 是 | |
pageSort | 排序 | 枚举PageSort | 否 | UPDATEDAT(更新时间)、 CREATEDAT(创建时间)、COMMENTCOUNT(回复数量) 、VOTECOUNT(点赞数量)、RECOMMENDINDEX(推荐指数)、DEFAULT(默认排序 |
requestListener | 请求回调 | RequestListener< ArticlePageModel > | 否 | 请求回调 |
文章高级查询
方法名:listArticleSearch
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
page | 分页信息 | Page类 | 是 | |
searchKey | 关键字 | String | 是 | |
topicType | 版块类型 | 枚举TopicType | 否 | ARTICLE(文章)QUESTIONS(帖子) |
languageType | 语言类型 | 枚举LanguageType | 否 | ZH_CN(中文)EN_US(英文),空值默认中文 |
pageSort | 排序 | 枚举PageSort | 否 | UPDATEDAT(更新时间)、 CREATEDAT(创建时间)、 COMMENTCOUNT(回复数量) 、VOTECOUNT(点赞数量)、RECOMMENDINDEX(推荐指数)、DEFAULT(默认排序 |
requestListener | 请求回调 | RequestListener< ArticlePageModel > | 否 | 请求回调 |
推荐文章列表
方法名:listRecommendArticle
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
page | 分页信息 | Page类 | 是 | |
languageType | 语言类型 | 枚举LanguageType | 否 | ZH_CN(中文)EN_US(英文),空值默认中文 |
requestListener | 请求回调 | RequestListener< ArticlePageModel > | 否 | 请求回调 |
推荐帖子列表
方法名:listRecommendQuestion
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
page | 分页信息 | Page类 | 是 | |
languageType | 语言类型 | 枚举LanguageType | 否 | ZH_CN(中文)EN_US(英文),空值默认中文 |
requestListener | 请求回调 | RequestListener< ArticlePageModel > | 否 | 请求回调 |
热门帖子列表
方法名:listHotQuestion
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
page | 分页信息 | Page类 | 是 | |
languageType | 语言类型 | 枚举LanguageType | 否 | ZH_CN(中文)EN_US(英文),空值默认中文 |
requestListener | 请求回调 | RequestListener< ArticlePageModel > | 否 | 请求回调 |
获取文章/帖子详情
方法名:getArticleDetail
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
id | 文章/帖子Id | String | 是 | |
includeFields | 限制返回 | String | 是 | 可以自定义返回哪些字段,用英文逗号分隔。为空时,系统默认返回所有字段,如果选择返回的字段为一个对象时,请指定该对象的基本属性。 |
requestListener | 请求回调 | RequestListener< Article > | 否 | 请求回调 |
获取访问Url链接
方法名:getArticleUrlAddress
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
id | 文章/帖子Id | String | 是 | |
topicType | 版块 | String | 是 | 对应Article类中,Topic的type属性 |
工单接口(TicketHttp)
获取当前客户工单列表
方法名:requestClientTicketList
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
mPage | 当前页 | int | 是 | 当前页数 |
mCount | 每页数量 | int | 是 | 每页数量 |
includeFields | 限制返回 | String | 否 | 可以自定义返回哪些字段,用英文逗号分隔。为空时,系统默认返回所有字段,如果选择返回的字段为一个对象时,请指定该对象的基本属性。 |
requestListener | 请求回调 | RequestListener< TicketListResult > | 否 | 请求回调 |
获取工单类型信息
方法名:getTypeList
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
requestListener | 请求回调 | RequestListener< TicketListResult > | 否 | 请求回调 |
获取服务目录顶级目录
方法名:getTopServiceCatalog
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
requestListener | 请求回调 | RequestListener< ServiceCatalogResult > | 否 | 请求回调 |
获取服务目录子目录
方法名:getChildServiceCatalog
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
requestListener | 请求回调 | RequestListener< ServiceCatalogResult > | 否 | 请求回调 |
用户接口(UserHttp)
获取当前客户工单列表
方法名:getUserInfo
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
requestListener | 请求回调 | RequestListener< User > | 否 | 请求回调 |
提交工单开源接口(TicketLogic)
获取工单优先级
方法名:getTicketPriorityField
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
requestListener | 请求回调 | RequestListener< List<NameValue>> | 否 | 请求回调 |
无表单提交工单
方法名:createTicketWithOutForm
参数:
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
ticket | 工单信息 | Ticket | 是 | |
requestListener | 请求回调 | RequestListener< List<NameValue>> | 否 | 请求回调 |
Ticket字段支持参数
参数名 | 参数信息 | 参数类型 | 是否必填 | 备注 |
subject | 工单主题 | String | 是 | 最长128位 |
description | 工单描述 | String | 否 | |
priority | 工单优先级 | String | 否 | getTicketPriorityField接口所对应数据key |
serviceCatalog | 工单服务目录 | ServiceCatalog | 否 | 请参考demo服务目录控件返回 |
ticketType | 工单类型 | TicketType | 否 | 接口TicketHttp.getTypeList对应返回 |
tags | 标签 | Array<String> | 否 | |
customFields | 自定义字段 | List<TicketCustomField> | 否 |
3.3.1 更新日志
1. 在线客服支持排队安抚语、接通欢迎语;
2. 机器人应答,相似问题支持转人工引导;
3. 自动应答支持配置超链接;
1. 全面升级 会话 / 工单 界面交互,提升用户体验;
2. 支持表情键盘;
3. 适配智能机器人;
4. 会话适配客服端消息撤回;
5. 支持主题色设置;
1、工单 / 会话支持上传文件
2、工单 / 会话中的附件 ICON 根据文件类型适配
3、开源提交工单接口与智能分派联用
4、修改提交工单界面
5、修改监听消息回调,排除当前用户发出的消息
6、优化混淆信息
1、音频支持适配 MP3,需要能兼容老的 AMR 数据
2、图片压缩统一为 800,与 App 处理类似
3、图片 / 视频 cell size 适应规则
4、服务目录改用自写控件
5、兼容Android6.0权限问题
6、常规bug修复
1. 添加地图模块,sdk支持发送地理位置
2. 工单、会话支持语音发送
3. 工单、会话视频选择方式变更。
4. 修改会话缓存缓慢
5. 开放工单标题自定义
6. 添加6.0权限申请检测
7. 优化长连接,常规bug修复。
1. 全新的 SDK 业务架构;
2. 开放工单、文章等 API;
3. 在线客服、提交工单、工单详情采用原生编码,大大提高兼容性;