小能在线客服开发文档
Android端SDK集成
集成前提
SDK 适用对象及重要提示
适用范围
1、该文档适用于APP集成小能客服AndroidSDK2.4及其以上版本。
2、该文档提供给与小能合作企业的Android技术开发人员使用。
3、AndroidSDK2.1及其以上版本支持API 14以上API 25以下的系统版本。
重要提示
1、建议先测试我们Demo,并仔细阅读我们Demo中的集成代码,会对您的对接过程有很大的帮助。
2、如需小能方周末提供对接支持,请至少提前一天提出邮件申请,我们好安排加班人员。
3、集成SDK后,请将集成后的安装包发给我们测试,双方测试通过后APP方能上线并进入售后流程。若没有提供给我方测试将APP上线,造成后果由集成方承担。
4、若需要小能协助测试,要发一封测试申请邮件并附带测试账号和测试安装包给技术支持。
5、集成过程中,遇到任何问题,请随时联系我们。
对接企业信息
在集成sdk之前请先与小能相关人员对接好您的企业信息,包括siteid,settingid,appkey等基本信息。
以上各字段的获取方式,详情请见:
参数具体说明
同步账号信息
小能sdk具有登录账号和退出账号的功能,目的是传递账号信息,请仔细阅读小能sdk对登录账号的字符限制,做好与您app账号的同步。
SDK导入
Android Studio 导入SDK Demo
1)进入android studio,点击import project(Eclipse ADT,Gradle,etc),如下图所示:
2)选择AndroidSDK文件夹下的XiaonengChatDemo,并点击 OK,如下图所示:
3)在弹出的Import Project from ADT页面中,填写项目导入后的目标路径,一直点击Next直到Finish,如下图所示:
4)点击Finish后,会弹出Gradle Project info Building界面,如下图所示:
5)Building结束后弹出import-summary.txt,表示导入成功,如下图所示:
6)最后在XiaonengChatUI 的build.gradle 中的defaultConfig 加入minSdkVersion 版本,与主项目中的版本保持一致,并点击Sync Now,如下图所示:
经过上面6步,就可以运行小能SDK Demo啦!
Eclipse 导入SDK用于集成
1)将工程XiaonengChatUI导入到你APP所在的工程中,如下图所示:
2)点击APP工程右键—>属性(Properties)—>Android,如下图所示:
3)点击Add,选中XiaonengChatUI,点击确定,如下图所示:
4)再点击应用,确定,完成引用,如下图所示:
Android Studio 导入SDK用于集成
1)点击File—>New—>Import Module,如下图所示:
2)选中XiaonengChatUI工程,一直点击next,如下图所示:
3)然后点击File→Project Structure→点击你的app→dependencies,点击加号“+”,选择Module dependency,如下图所示:
4)选中XiaonengChatUI,点击OK,如下图所示:
5)选中XiaonengChatUI,点击Flavors,设置Min Sdk Version和Target Sdk Version,与主项目的Min Sdk Version和Target Sdk Version保持一致,如下图所示:
经过以上5步就可以运行,运行成功说明小能sdk成功关联到您的app上啦!
配置清单文件
1)在你的清单文件AndroidManifest.xml里加入以下权限的配置。注意:不要与已有的权限冲突。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
2)在你的清单文件AndroidManifest.xml里加入以下Activity的配置。
<activityandroid:name="cn.xiaoneng.activity.ChatActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" /> <activityandroid:name="cn.xiaoneng.activity.LeaveMsgActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" /> <activityandroid:name="cn.xiaoneng.activity.ShowCameraActivity"android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|navigation|layoutDirection|touchscreen|locale|mnc|mcc|fontScale"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@style/MyDialogTopRight" > </activity> <activityandroid:name="cn.xiaoneng.activity.ShowAlbumActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" > </activity> <activityandroid:name="cn.xiaoneng.activity.ValuationActivity"android:screenOrientation="portrait"android:theme="@style/valuationdialog" > </activity> <activityandroid:name="cn.xiaoneng.activity.ShowPictureActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" > </activity> <activityandroid:name="cn.xiaoneng.activity.XNExplorerActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" > </activity> <activityandroid:name="cn.xiaoneng.video.VideoPreviewActivity"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" > </activity> <activityandroid:name="cn.xiaoneng.video.RecordVideoActivity"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" > </activity> <activityandroid:name="cn.xiaoneng.video.XNVideoPlayer"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" > </activity>
标准接口集成
初始化SDK
在整个应用程序中,我们建议您在 App 主进程初始化,您只需要调用一次 initSDK
方法。
如果在App开启时有多进程启动,需要将“initSDK”方法放到主进程中,保证打开App只会调用一次初始化,避免多进程启动导致Application的onCreate方法执行多次 样式代码
siteid、sdkkey、settingid参数的获取方式请见:
参数具体说明
/** * @params appContext * @params siteid: 企业id,即企业唯一标识。格式示例:kf_9979【必填】 * @params sdkkey: 企业key,即小能通行密钥【必填】 * @return int 0 表示初始化成功, 其他值请查看错误码 */ Ntalker.getBaseInstance().initSDK(Context appContext,String siteid, String sdkkey);
如果客户想要使用自己的机器码作为游客标识,则调用下面的initSDK
方法,如果是游客身份,使用外部传入的机器码id。
/** * @params appContext * @params siteid: 企业id,即企业唯一标识。格式示例:kf_9979【必填】 * @params sdkkey: 企业key,即小能通行密钥【必填】 * @params pcid: 外部传入的游客机器码,长度必须大于等于18位小于等于38位 * @return int 0 表示初始化成功, 其他值请查看错误码 */ Ntalker.getInstance().initSDK(Context appContext,String siteid, String sdkkey,String pcid);
登录与登出
重要提示
App集成小能SDK的登录接口, 需要注意以下三点:1. App完全退出(被杀掉进程), 再次进入时, 在SDK初始化之后, 如果是登录用户, 需要重新调用小能SDK登录接口. (用于2.5及以前版本的SDK)2. App访客登录账号的时候, App就调用小能SDK的登录接口, 访客登出账号的时候, 调用小能SDK的登出接口.3. 2.6及以后版本的SDK登录接口调用时机:在访客注册完成、点击登录按钮时分别调用小能SDK登录接口、在SDK初始化之后, 如果是登录用户, 需要调用小能SDK登录接口(保证老用户身份信息同步);访客登出账号的时候,调用小能SDK的登出接口.
用户登录
在访客登录的时候调用login
方法, 目的是传递账号信息,为客服显示用户信息,userid作为用户的唯一标识需要保证唯一性,username可根据需要传入手机号、昵称等信息
游客咨询不需要调用小能login方法,小能会自动生成一个游客身份标识(userid格式:guest开头+一串数字)和用户名(username格式:客人+4位数字)
userlevel传入1后,访客咨询时无视排队逻辑,在客服忙碌或者达到最大接待量仍能直接进入会话;如果需要走正常排队逻辑,userlevel建议传入0
/** * @params userid: 登录用户的id,只能输入数字、英文字母和“@”、“.”、“_”三种字符。长度小于40,并且不能重复, * 相同的userid会造成会话同步,切记不可重复 【必填】 * @params username: 登录用户名,长度小于32,显示于PC客服端,如未填写,系统随机会随机生成一个用户名,,如:客人9527 * @params userlevel: 登录用户的等级,普通用户“0”。默认写 0 【必填】 * @return int 0 表示登录成功, 1 表示登录失败可参照错误码修改, 2 表示重复登录无需再次登录, 如在登录错误的情况下,咨询客服,用户为游客状态,即非登录用户咨询. */Ntalker.getBaseInstance().login(String userid, String username, int userlevel);
用户登出
用户点击退出登录时调用logout
方法,调用之后用户身份置为游客状态。
Ntalker.getBaseInstance().logout();
打开聊窗
点击咨询入口时只需要调用startChat
方法,前提是已经执行了initSDK
方法;目的是加载咨询窗口,与客服进行会话。
settingid参数的获取方式请见:
参数具体说明
/** * @param appContext * @param settingid 有效接待组Id,该组内必须有客服存在,建议使用非管理员客服【必传】 * @param groupName 客服组名称,默认的企业客服名称,在异常情况下显示(如网络异常)【建议】 * @param chatparams 聊天参数体(带子参数,与多个功能有关,不用时传空) */ Ntalker.getBaseInstance().startChat(Context appContext, String settingid,String groupName,ChatParamsBody chatparams);
咨询发起页功能
咨询发起页,用于PC客服端显示和统计用户首次发起咨询的入口信息,代码示例如下:
ChatParamsBody chatparams = new ChatParamsBody(); chatparams.startPageTitle = ""; // 咨询发起页标题(必填) chatparams.startPageUrl = "";//咨询发起页URL,必须以"http://"开头 (必填)
以下功能为可选功能:
erp功能
用于传入ERP页面所需的扩展参数,最长64位,参数不够用时可以用逗号间隔
//erp参数, 被用参数,小能只负责经由SDK传到客服端,不做任何处理 chatparams.erpParam = "";
指定请求客服功能
//传入指定客服的格式:siteid_ISME9754_T2D_指定客服的id,客服id即客服登录客服端时的用户名,如:kf_9979_ISME9754_T2D_admin chatparams.kfuid = "";
然后将chatparams 参数传入到startChat
方法中。
Debug模式
是否开启小能sdk的特有log,方便查找对接过程中出现的问题,通常在App启动的时候实现,将isdebug置为true,集成上线时将isdebug置为false。
/** * @params isdebug: 是否开启debug模式, 默认false */ Ntalker.getBaseInstance().enableDebug(boolean isdebug);
商品展示集成
商品信息展示包括两方面:一是:APP用户聊窗内展示的商品信息; 二是:客服端展示咨询用户浏览的商品信息。
在APP端我们提供3种方式,在客服端我们提供2种方式,集成者可根据自己的需求通过传参实现。
APP端商品展示
1)不展示商品信息
chatparams.itemparams.appgoodsinfo_type = CoreData.SHOW_GOODS_NO;
2)使用商品id方式展示商品信息(推荐使用) 商品接口开发说明
/** * @param goods_id 商品id * @param itemparam 商品扩展参数 */ chatparams.itemparams.appgoodsinfo_type = CoreData.SHOW_GOODS_BY_ID; chatparams.itemparams.goods_id = "";//示例:ntalker_test,传入商品id chatparams.itemparams.itemparam = "";//示例:App,商品扩展参数(选填),所传参数由商品接口确定
3)以独立控件方式展示商品信息
独立控件方式只支持在SDK端展示商品
chatparams.itemparams.appgoodsinfo_type = CoreData.SHOW_GOODS_BY_WIDGET chatparams.itemparams.goods_name = ""; chatparams.itemparams.goods_price = ""; chatparams.itemparams.goods_image = ""; //URL必须以"http://"开头 chatparams.itemparams.goods_url = ""; //URL必须以"http://"开头
客服端商品展示
1)不展示商品信息
chatparams.itemparams.clientgoodsinfo_type = CoreData.SHOW_GOODS_NO;
2) 使用商品id方式展示商品信息(推荐使用)
需开发商品接口地址,并配置到小能客服端 商品接口开发说明
/** * @param goods_id 商品id * @param itemparam 商品扩展参数 */ chatparams.itemparams.clientgoodsinfo_type = CoreData.SHOW_GOODS_BY_ID; chatparams.itemparams.goods_id = "";//示例:ntalker_test,传入商品id chatparams.itemparams.itemparam = "";//示例:App,商品扩展参数(选填),所传参数由商品接口确定
轨迹的集成
商品详情页轨迹
标准集成方式: 建议在进入到商品详情页面时,调用商品详情页轨迹
/** * 商品详情页轨迹标准接口 * @param title 商品详情页的标题, 必传字段 * @param url 商品详情页的url, 必传字段,需要保证每个商品详情页的url唯一,可传入商品链接 * @param sellerid 商户id, B2C企业传空, B2B企业需要传入商户的id * @param ref 上一页url, 如没有可传空 * @return*/ Ntalker.getBaseInstance().startAction_goodsDetail(String title, String url,String sellerid, String ref);
订单页轨迹
标准集成方式: 建议在生成订单号和订单价格时调用订单页轨迹
/*** 订单页轨迹标准接口* @param title 订单页的标题, 必传字段* @param url 订单页的url, 必传字段,需要保证每个订单页的url唯一* @param sellerid 商户id, B2C企业传空, B2B企业需要传入商户的id* @param ref 上一页url, 如没有可传空* @param orderid 订单id, 必传字段* @param orderprice 订单价格, 必传字段* @return*/ Ntalker.getBaseInstance().startAction_order(String title, String url,String sellerid, String ref,String orderid, String orderprice);
支付成功页轨迹
标准集成方式:
/*** 支付成功页轨迹标准接口* @param title 支付成功页的标题, 必传字段* @param url 支付成功页的url, 必传字段,需要保证每个支付成功页的url唯一* @param sellerid 商户id, B2C企业传空, B2B企业需要传入商户的id* @param ref 上一页url, 如没有可传空* @param orderid 订单id, 必传字段* @param orderprice 订单价格, 必传字段* @return*/ Ntalker.getBaseInstance().startAction_paySuccess(String title, String url,String sellerid, String ref,String orderid, String orderprice);
基本事件监听
未读消息的监听
未读消息的监听接口为OnUnreadmsgListener ;
聊窗页面点击返回按钮或返回键后,在5分钟内,客服给访客发送消息,未读消息监听可生效
Ntalker.getExtendInstance().message().setOnUnreadmsgListener(OnUnreadmsgListener mListener);
代码示例:
/** * @param settingid: 接待组id * @param username: 客服名字 * @param msgcontent: 消息内容 * @param messagecount: 消息总数 */ @Override public void onUnReadMsg(final String settingid, String username, String msgcontent, final int messagecount){runOnUiThread(new Runnable() {@Overridepublic void run() {if (messagecount == 0){tv_unMsg1.setText("未读消息:0");return;}tv_unMsg1.setText(settingid + ":" + messagecount + "条新消息");} }); }
所有消息的监听
所有消息的监听接口为:OnChatmsgListener
Ntalker.getExtendInstance().message().setOnChatmsgListener(OnChatmsgListener mListener);
代码示例:
/** * * @param isSelfMsg 是否是自己发送的消息 * @param settingid 发送消息的客服组id * @param username 发送消息的客服名称 * @param msgcontent 消息内容 * @param msgtime 消息时间 * @param isunread 是否已读 * @param unreadcount 未读消息数量 * @param uicon 客服头像 */ @Override public void onChatMsg(boolean isSelfMsg, String settingid, String username, String msgcontent, long msgtime, boolean isunread, int unreadcount, String uicon) { runOnUiThread(new Runnable() {@Overridepublic void run() {} }); }
聊窗中url链接点击事件的监听
该接口是将访客和客服发送消息中的url点击事件暴漏出来,实现客户点击url链接的自定义跳转事件。
点击事件的监听接口为:OnMsgUrlClickListener
* 第一步:在chatparams参数体中设置url的打开方式
chatparams.clickurltoshow_type = CoreData.CLICK_TO_APP_COMPONENT;
* 第二步:注册监听 Ntalker.getExtendInstance().message().setOnMsgUrlClickListener(OnMsgUrlClickListener mListener);
* 第三步:在onClickUrlorEmailorNumber()方法中添加自定义点击事件
代码示例 :
@Override public void onClickUrlorEmailorNumber(int contentType, String urlorEmailorNumber) {if (contentType == 1){// 网址;Intent intent = new Intent(this, WebContentActivity.class);intent.putExtra("urlorEmailorNumber", urlorEmailorNumber);// 实际打开的链接startActivity(intent);} }
商品条点击事件的监听
需提前集成SDK商品展示
1) 商品详情的点击事件有两种方式,第一种是设置点击商品条在SDK内的Webview打开,是默认的打开方式,由小能实现。
2) 第二种继承XNClickGoodsListener(单独的商品详情点击接口),具体操作步骤如下:
需集成2.6.2及以上版本SDK
* 第一步:设置点击类型 只设置点击类型不实现监听可以屏蔽商品条点击事件
chatparams.itemparams.clicktoshow_type = CoreData.CLICK_TO_APP_COMPONENT
* 第二步:注册监听器,小能SDK提供XNClickGoodsListener监听接口,其中提供了点击商品展示的功能。
Ntalker.getExtendInstance().message().onClickShowGoods(XNClickGoodsListener xnclickgoods);
* 第三步:添加点击事件onClickShowGoods的响应
如果不设置商品详情的点击事件,直接将onClickShowGoods方法中不加任何操作即可。
/** * appgoodsinfo_type: 设置在SDK端是否显示商品 * clientgoodsinfo_type: 设置在客服端是否显示商品 * goods_id: 商品id * goods_name: 商品名称 * goods_price: 商品价格 * goods_image: 商品图片URL * goods_url: 商品URL(点击跳转) * goods_showurl 商品小页面URL(设置以商品URL显示时传入) */@Overridepublic void onClickShowGoods(int appgoodsinfo_type,int clientgoodsinfo_type, String goods_id, String goods_name,String goods_price, String goods_image, String goods_url,String goods_showurl) {}
错误码的监听
错误码的监听接口:XNErrorListener
Ntalker.getBaseInstance().setOnErrorListener(XNErrorListener OnErrorListener);
当发生错误时弹出显示错误码的系统提示,代码示例如下:
@Override public void onError(int errorcode) {Toast.makeText(getApplicationContext(), "警告!发生错误(" + errorcode + ")!",Toast.LENGTH_SHORT).show(); }
扩展事件监听
扩展监听使用规则
可以参考 XiaonengDemo中的 TestActivity类,增加所需要的扩展功能
扩展事件的使用前提是,新建一个Activity继承小能的ChatActivity,在新建的Activity中实现扩展接口并将此Activity作为最后一个参数传入到startChat方法中。
/** * @param appContext * @param settingid 有效客服组ID,该组内必须有客服存在,建议使用非管理员客服【必传】 * @param groupName 客服组名称,默认的企业客服名称,在异常情况下显示(如网络异常)【建议】 * @param chatparams 聊天参数体(带子参数,与多个功能有关,不用时填null) * @param chatWindowActivity 继承自ChatActivity */ Ntalker.getBaseInstance().startChat(Context context, String settingid,String settingname,ChatParamsBody chatParams,Class<?> chatWindowActivity);
导航条的扩展
导航条扩展的监听接口为:XNTitleButtonListener
如果需要导航条的扩展,首先需要修改(XiaonengChatUI\res\layout\xn_title.xml)文件,然后通过“setTitleViewListener”接口里面的view,来控制新增的控件,如:代码示例
Ntalker.getExtendInstance().titleBar().setOnViewInflatedListener(XNTitleButtonListener mTitleListener);
代码示例:
@Override public void setTitleViewListener(View view) {Button button = (Button)view.findViewById(R.id.button1);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(v.getContext(), "导航条的扩展", Toast.LENGTH_SHORT).show();}}); }
商品条的扩展
如采用商品条扩展的方式展示商品,SDK端的商品展示将不通过商品id的形式展示商品内容
商品条扩展的监听接口为:XNGoodsListener
商品条扩展分为两种方式,您可以根据需要使用其中一种:
方式一:在我们原有商品条布局(XiaonengChatUI\res\layout\xn_showgoods.xml)中增加控件,并调用“添加商品详情布局“的监听,然后通过“setViewByIDListener”接口里面的view,来控制新增的控件,如:代码示例
/** * 添加商品详情布局的监听 * @param goodsListener */ Ntalker.getExtendInstance().chatHeadBar().setOnViewClickListener(XNGoodsListener goodsListener);
方式二:重新添加一个布局传入“替换商品详情整个布局“的监听中,然后通过“setViewByIDListener”接口里面的view,来控制新增的控件,如:代码示例
/** * 替换商品详情整个布局的监听 * @param resID 替换的布局 * @param goodsListener */ Ntalker.getExtendInstance().chatHeadBar().setOnViewInflatedListener(R.layout.list_item2, XNGoodsListener goodsListener);
代码示例:
@Override public void setViewByIDListener(View view) {view.findViewById(R.id.tv_send).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(v.getContext(), "商品栏扩展", Toast.LENGTH_SHORT).show(); }}); }
除商品条扩展监听外,我们还提供一个商品详情发送接口,用于直接获取Chatparams参数中传入的商品名称、价格、图片URL
商品详情发送的监听接口为:XNSendGoodsBtnListener
/** * 添加商品详情布局的监听 * @param sendgoodsListener */ Ntalker.getExtendInstance().chatHeadBar().setOnSendGoodsListener(XNSendGoodsBtnListener sendgoodsListener);
代码示例:
/** * * @param View view * @param title 商品名称 * @param price 商品价格 * @param pic 商品图片url */ @Override public void setSendGoodsBtnListener(View view, final String title,final String price, final String pic) {view.findViewById(R.id.tv_sendgoods).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Ntalker.getExtendInstance().message().sendCustomMsg(2,new String[] { title, price, pic }); }}); }
+号功能区的扩展
+号功能区扩展的监听接口为:OnPlusFunctionClickListener
+号功能扩展首先需要在“addPlusFunction”监听中传入增加的功能类型、名称、资源图片,然后通过“onPlusFunctionClick”接口里面的functionName匹配扩展功能的名称,来实现相应功能,如:代码示例
需要调用的方法如下:
/** * 增加功能的点击事件 * @param onPlusFunctionClickListener */ Ntalker.getExtendInstance().extensionArea().setOnPlusFunctionClickListener(OnPlusFunctionClickListener onPlusFunctionClickListener); /*** 增加除默认功能之外的功能* @param plusFunctionType 增加功能的类型* @param functionName 增加功能的名字* @param functionIcon 增加功能的图片* @return*/ Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType plusFunctionType,String functionName, int functionIcon);
代码示例:
@Override public void onPlusFunctionClick(String functionName) {// TODO Auto-generated method stubString funname1 = "订单";String funname2 = "最近商品";if (functionName.equals(funname1)) { Toast.makeText(getApplicationContext(), "点击自定义功能:" + functionName, Toast.LENGTH_SHORT).show();Intent intent = new Intent(this, OrderListActivity.class);startActivity(intent);}if (functionName.equals(funname2)) {Toast.makeText(getApplicationContext(), "点击自定义功能:" + functionName, Toast.LENGTH_SHORT).show();Intent intent = new Intent(this, GoodsListActivity.class);startActivity(intent);} }
改变功能的顺序,需要的接口如下:
假设要将功能区的顺序改为评价,图片,拍照,视频,则代码如下:
Ntalker.getExtendInstance().extensionArea().removeAll();//首先先调用删除所有功能的接口,然后依次添加功能 Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_EVALUATE); Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_PICTRUE); Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_CAMERA); Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_VIDEO);
消息发送的扩展
发送消息的监听接口为:OnCustomMsgListener
通过消息发送扩展监听,可以在SDK端聊窗内点击指定功能按钮后,以文本或包装成卡片形式发送消息内容,在客服端以文本形式展示:
文本形式
其中sendType可传入1、2、3,在SDK端和PC客服端均会以纯文本形式展示
/** * * @param sendType 1为订单格式的消息;2为商品详情格式的消息;3为最近商品格式的消息 * @param msgs 发送的消息信息 */ Ntalker.getExtendInstance().message().sendCustomMsg(int sendType, String[] msgs);
卡片形式
如同时设置两或三种不同的卡片类型,需要统一在继承ChatActivity的Activity中添加监听与增加方法,可参考Demo中的TestChatActivity.class
第一步:使用消息扩展功能首先需要在“setOnCustomMsgListener”传入消息的msgType ,自定义布局、OnCustomMsgListener
/** * * @param msgType 1为订单格式的消息;2为商品详情格式的消息;3为最近商品格式的消息 * @param resId 自定义布局id * @param OnCustomMsgListener */ Ntalker.getExtendInstance().message().setOnCustomMsgListener(int msgType,int resId, OnCustomMsgListener customListener);
第二步:通过“setCustomViewFromDB”接口里面的view控制自定义布局中的的控件,来实现相应功能,如:代码示例
代码示例:
@Override public void setCustomViewFromDB(View view, int msgType, String[] msg) { if (msgType == 1) {TextView tv_orderid = (TextView) view.findViewById(R.id.tv_orderid_demo);TextView tv_ordernum = (TextView) view.findViewById(R.id.tv_ordernum_demo);TextView tv_orderprice = (TextView) view.findViewById(R.id.tv_orderprice_demo);TextView tv_ordertime = (TextView) view.findViewById(R.id.tv_ordertime_demo);ImageView pic = (ImageView) view.findViewById(R.id.iv_icon_demo);RelativeLayout rl_custom = (RelativeLayout) view.findViewById(R.id.rl_custom);tv_orderid.setText(msg[0]);tv_ordernum.setText(msg[1]);tv_ordertime.setText(msg[2]);tv_orderprice.setText(msg[3]);rl_custom.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(TestChatActivity.this, WebContentActivity.class);intent.putExtra("urlorEmailorNumber", "www.baidu.com");// 实际打开的链接startActivity(intent);} }); } }
第三步:最后在需要发送消息的位置调用“sendCustomMsg”传入相应的sendType和消息内容
/** * * @param sendType 1为订单格式的消息;2为商品详情格式的消息;3为最近商品格式的消息 * @param msgs 发送的消息信息 */ Ntalker.getExtendInstance().message().sendCustomMsg(int sendType, String[] msgs);
问候语头像(2.5及以上版本支持)
1.联系小能实施人员申请开通SDK端问候语服务
2.问候语头像默认加载的是小能SDK包中:XiaonengChatUI\res\drawable-hdpi\kefu.png
3.替换默认问候语头像时,头像尺寸建议为:120 x 120,替换头像图片后命名保持不变,仍为kefu.png
自定义访客头像
1.访客头像可根据传入的bitmap来显示,代码如下:
Ntalker.getExtendInstance().settings().setUsersHeadIcon(bitmap);
2.除Bitmap外可以传入url图片链接的形式进行显示,代码如下:
chatparams.headurl = ""; //必须以http://开头
访客圆形头像的设置
访客头像可根据下面的接口来显示为圆形:
/** * * @param context * @param yesOrNo true为圆形;false为方形 */ Ntalker.getExtendInstance().settings().setHeadIconCircle(Context context, boolean yesOrNo);
名片链接的设置
Ntalker.getExtendInstance().settings().setShowCard(boolean yesOrNo);
小视频功能的开启
Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_VIDEO);
关闭聊窗(2.6及以上版本)
调用后可关闭当前聊窗,同等于点击返回按钮
Ntalker.getExtendInstance().chatHeadBar().setBackButtonFunctions();
调用后可关闭当前聊窗,同等于点击关闭按钮
Ntalker.getExtendInstance().chatHeadBar().setFinishButtonFunctions();
关闭按钮扩展监听(2.6及以上版本)
实现点击聊窗内关闭按钮后,增加自定义的操作
关闭按钮扩展监听接口为:XNFinishButtonListener
Ntalker.getExtendInstance().chatHeadBar().setOnFinishButtonClickListener(XNFinishButtonListener finishListener);
代码示例:
@Override public void setFinishButtonListener() {}
返回按钮扩展监听(2.6及以上版本)
实现点击聊窗内返回按钮或物理返回键后,增加自定义的操作
返回按钮扩展监听接口为:XNBackButtonListener
Ntalker.getExtendInstance().chatHeadBar().setOnBackButtonClickListener(XNBackButtonListener buttonListener);
代码示例:
@Override public void setBackButtonListener() {}
咨询列表功能
显示一个客服组的列表,该列表是一个访客咨询过得所有客服组的信息列表。
具体实现方法,可以参考XiaonengDemo中的“SettingListActivity.class”和“ListviewAdapter.class”
SDK提供两个接口 1) 所有消息接口onChatMsg,该接口是用来刷新列表信息的。
/** * * @param isSelfMsg 是否是自己发送的消息 * @param settingid 发送消息的客服组id * @param username 发送消息的客服名称 * @param msgcontent 消息内容 * @param msgtime 消息时间 * @param isunread 是否已读 * @param unreadcount 未读消息数量 * @param uicon 客服头像 */ void onChatMsg(boolean isSelfMsg, String settingid, String username, String msgcontent, long msgtime, boolean isunread, int unreadcount, String uicon) ;
客户可以使用isSelfMsg,settingid,username,msgcontent这四个参数来刷新列表。
2) 客服组列表接口Ntalker.getExtendInstance().conversation().getList(),该接口是app首次显示客服组列表时调用的。数据结构是List<Map<String, Object»,key值有8个,包括settingid,isunread,isSelfMsg,textmsg,uname,msgtime,messagecount,uicon。
/** * @param isSelfMsg true:访客自己的消息false:客服的消息 * @param settingid 发送消息的客服组id * @param username 发送消息的客服名称 * @param msgcontent 消息内容 * @param msgtime 消息时间 * @param isunread 是否已读 * @param messagecount 未读消息数量 * @param uicon 客服头像 */ Ntalker.getExtendInstance().conversation().getList();
Android集成FAQ
Android6.0动态获取权限
可在小能initSDK方法后调用,或者在打开聊窗前调用,动态获取所需权限
String[] permissions = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA}; Ntalker.getExtendInstance().ntalkerSystem().requestPermissions(this, permissions);
Android7.0拍照适配
如在项目中已经适配了7.0拍照,可以将file_paths.xml中的内容与您项目中的path.xml合并为一个,同时将清单文件中Provider的android:authorities统一为项目包名+.fileprovider
1)在XiaonengChatUI的res/xml/file_paths.xml中标注位置更改为您自己的包名。
2)在您自己工程的AndroidManifest.xml中添加以下代码,并将其中的android:authorities中的包名改为您自己的包名+.fileprovider即可。
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.example.XNChatDemo3.fileprovider"android:exported="false"android:grantUriPermissions="true" ><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /> </provider>
添加表情白名单
若build.gradle文件中的shrinkResources为true,聊窗中的表情将显示为空白或者黑框,如图中所示:
需要在您主项目的res/raw中添加一个keep.xml,保留小能的emoji表情,文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"tools:keep="@drawable/xnemoji_*" />
混淆代码
2.6.0及之前版本混淆代码
-dontwarn cn.xiaoneng.** -dontwarn android.support.v4xn.** -dontwarn orgxn.fusesource.** -keep class cn.xiaoneng.** {*;} -keep class android.support.v4xn.** {*;} -keep class orgxn.fusesource.** {*;} -ignorewarnings
2.6.2及后续版本混淆代码
-dontwarn cn.xiaoneng.** -dontwarn android.support.v4xn.** -dontwarn org.fusesource.** -dontwarn net.sf.retrotranslator.** -dontwarn edu.emory.mathcs.backport.java.util.** -keep class cn.xiaoneng.** {*;} -keep class android.support.v4xn.** {*;} -keep class org.fusesource.** {*;} -keep class net.sf.retrotranslator.** {*;} -keep class edu.emory.mathcs.backport.java.util.** {*;} -ignorewarnings
旧版升级2.6.5说明
1)删除项目中旧版的SDK集成包
2)导入2.6.5新版本SDK集成包
3)如之前添加过小能混淆代码,需调整为2.6.2及后续版本的混淆代码进行集成 混淆代码
4)升级完成后需发送测试包,由小能技术测试完成后在上线使用
备注:
1)旧版包括2.6.0及之前的所有SDK版本,必需在完全删除原有SDK集成包的基础上进行升级,不能只替换libs文件夹中的jar包
2)旧版升级到2.6.5.2及后续版本SDK时,如果集成了小能IM推送,需要删除AndroidManifest清单文件中的XpushReceiver相关内容 配置修改
判断是否在主进程的样式代码
if(getApplicationContext().getPackageName().equals(getCurrentProcessName()) {//初始化SDK }private String getCurrentProcessName() {int pid = android.os.Process.myPid();String processName = "";ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);for (ActivityManager.RunningAppProcessInfo process : manager.getRunningAppProcesses()) {if (process.pid == pid) {processName = process.processName;}}return processName; }
错误码
各集成方法均有错误码,在注册XNErrorListener错误码监听接口后,可以统一从其实现的onError接口方法中获得错误码。
重要提示:
1)在集成发生错误时,集成方可首先利用此表自我纠错。
2)在寻求小能客服技术支持时,请先告知错误码,这样才能够快速的定位问题。
3)对于604错误,请检查“初始化”中的参数是否正确,ChatActivity是否注册。
SDK历史版本说明
Android访客SDK V2.6.5.3 2018-07-24
1、调整获取设备系统信息方法
2、优化url链接在聊窗渲染问题
3、优化DataBase数据库问题
Android访客SDK V2.6.5.2 2018-06-25
1、优化小能Xpush推送注册方式,改为动态注册BroadCastReceiver
2、修复一些bug
Android访客SDK V2.6.5.1 2018-06-12
1、适配Android8.0通知栏
2、修复一些bug
Android访客SDK V2.6.5 2018-05-21
1、支持设置用户标签
2、优化登录逻辑和聊窗列表刷新
3、优化商品请求
4、修复一些bug
Android访客SDK V2.6.2 2017-12-15
1、添加商品条点击跳转监听
2、添加“关闭聊窗”外部调用接口
3、优化统计请求逻辑
4、优化SDK登录逻辑
5、更新mqtt底层jar包
Android访客SDK V2.6.0 2017-09-25
1、优化SDK登录方法。
2、优化客服组列表功能,添加了客服头像和客服名字。
3、修复机器人回复消息不可点击的问题。
4、添加https重定向功能。
小能在线客服开发文档相关推荐
- 微信小程序客服介绍:如何设置小程序在线客服?
其实只需要解决2个问题 第一步,在微信小程序中添加联系在线客服按钮 第二步,接入在线客服功能,设置[自动/人工/转人工]回复等 一.添加小程序客服按钮 ① 在小程序中添加客服按钮功能,点此参考官方文档 ...
- 微信小程序在线客服系统都有哪些功能?
微信小程序的用户已经破6亿,不少企业都看准了小程序这块大蛋糕.但是想要把握住小程序红利,除了做好运营推广外,用户服务也是重中之重.微信小程序自带的客服系统却很难满足用户服务的需求,于是很多小程序使用者 ...
- 知乎爆赞!4504页《微信小程序零基础入门开发文档》+《小程序实战笔记》,你学废了吗?
前言 微信小程序作为近几年"微服务"的杰出代表,应用十分广泛.小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验 ...
- 小程序在线客服完整实现
1.先注册公众号>小程序(需实名认证) 2.开发>测试>上传>审核发布>发布>使用 3.公众号(订阅号或服务号)与小程序(此为在线客服)通过同一主体绑定可以打通调用 ...
- ttkefu迷你小窗口“在线客服咨询”文字怎么改?
登录网站后,左下角或右下角弹出的迷你对话框中,对话框的标题默认是中文"在线客服咨询",有客户问这个的标题可以修改吗,比如换成英文之类的,这个当然是可以的,那么要怎么修改呢?如图所示 ...
- 微信小程序在线客服聊天
1.分析 小程序给我们提供的在线聊天功能,在界面中只能通过按钮开放能力来打开. 只能在手机端中去使用,在模拟器中无法进行 2.代码: <!--联系客服--><buttonopen-t ...
- 微信小程序在线客服接入功能详解
步骤一::小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任选一种方法. 1.插入固定的接入样式 < ...
- 微信内置小程序在线客服功能
在小程序中加入客服消息按钮 小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可,不需要自行在小程序中实现. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任 ...
- 微信小程序在线客服接入
小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可,不需要自行在小程序中实现. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任选一种方法. 1.插入固定的 ...
- 微信小程序(天气预报)开发文档
相关Demo以放到github上 ---------飞机------------https://github.com/193Eric/XCXdemo.git 小程序技术文档 一.小程序应用分析 1. ...
最新文章
- 数据库的概念以及MYSQL的安装和卸载
- NCEPU:线下组队学习周报(008)
- 可视化的Redis数据库管理工具redis-desktop-manager的初步使用(图文详解)
- 动态规划--最长公共子序列
- flex使用FlexPrintJob打印问题
- VTK:Rendering之AmbientSpheres
- 三数之和为0(c语言实现)(改进)
- python-jieba分词模块
- 调用另外一个文件_从零开始学Python-Day52-文件读写
- 实验2-1-5 将x的平方赋值给y (5 分)
- scipy.stats —— 概率、随机变量与分布
- IE8 默认以Web Standards模式显示网页 全面遵循Web标准
- 经典:趣解什么叫网关?
- 【2018蓝桥省赛A组C/C++】全球变暖(两次bfs+状态标记 or 一次dfs)
- H5在微信下载app
- altium designer 快捷键
- 细说MySQL的时间戳(Timestamp)类型
- eclipse web项目启动后不自动打开浏览器,谷歌了一下终于找到设置了
- Google Adwords新手快速入门教程
- 数据库MySQL最大连接数、最大活跃连接数、最大并发数、并发会话数区别