智齿客服SDK对接集成文档V2.2.2(准备工作及说明)
智齿客服SDK为企业提供了一整套完善的智能客服解决方案。智齿客服iOS SDK 既包含客服业务逻辑,也提供交互界面;企业只需简单两步,便可在App中集成智齿客服,让App拥有7*24小时客服服务能力。
<智齿客服SDK>
管理员可以在后台「设置-支持渠道-APP」添加APP,然后按照本接入文档说明完成SDK对接。
智齿客服SDK具有以下特性:
- 在线咨询:咨询机器人、咨询人工客服(收发图片、发送语音)、发送表情;
- 指定技能组接待;
- 排队或客服不在线时引导用户留言;
- 机器人优先模式下隐藏转人工按钮,N次机器人未知问题问题是显现;
- 客服满意度评价:用户主动满意度评价+用户退出时询问评价;
- 传入用户资料:用户对接ID+基础资料+自定义字段;
- 传入商品来源页:来源页标题+来源页URL;
- 高度自定义UI;
准备工作
一、注册智齿账号
请先确保已注册智齿客服账号(www.sobot.com)。
1 获取appKey
<管理后台-设置-支持渠道-APP>
二、下载智齿SDK
点击下载最新最新SDK包。
快速集成
一、将SDK添加至项目(必须)
1 AndroidStudio集成
(1)远程依赖
dependencies {
compile 'com.sobot.chat:sobotsdk:2.2.2'
}
如果有v4包冲突可以使用以下代码引入
dependencies {
compile ('com.sobot.chat:sobotsdk:2.2.2'){
exclude group: 'com.android.support'
}
}
(2)导入Module
解压下载的智齿Android_SDK_XXX.rar文件,将Android_SDK_XXX\SobotSDK_AndoridStudio\lib\sobotsdk文件导入您的项目中,操作方法 为:File-->New-->Import Module。
·添加项目依赖
将lib库添加到项目依赖、操作方法为:ctrl+alt+shift+s.在弹出的对话框中选择您的Module。选中右侧选项卡Dependencies,点击“+”选择Module dependency,在弹出的对话框中选择选中sobotsdk,点击“ok”。Build-->clean project。
·安卓6.0权限适配
如果您的项目需要适配6.0权限,首先需要将您项目中的targetSdkVersion修改为23,由于Google在安卓6.0中删除了Apache的类,因此如果还想继续使用Apache的类,就需要添加Apache的jar包。(sdk\platforms\android-23\optional\org.apache.http.legacy.jar)
注意:如果您的targetSdkVersion为23,那么所依赖的android-v4兼容包的版本也需要为23以上。
2 采用Eclipse集成方式
·导入lib库文件
首先解压下载的智齿Android_SDK_2.0.0.rar文件,将Android_SDK_2.0.0\SobotSDK_Ecplise\lib\sobotsdk文件拷贝到您项目的根目录下,然后进行项目依赖。
具体操作方法:选中您的项目,alt+enter 在弹出的对话框左侧选择Android,在右侧点击add按钮,在弹出的对话框中选择sobotsdk,选择点击Apply,点ok即可。
·android-support-v4依赖
接入本SDK需要依赖android-v4兼容包,直接使用lib中提供的v4兼容包即可
·安卓6.0权限适配
如果您的项目需要适配6.0权限,首先需要将您项目中的targetSdkVersion修改为23,由于Google在安卓6.0中删除了Apache的类,因此如果还想继续使用Apache的类,就需要添加Apache的jar包。(sdk\platforms\android-23\optional\org.apache.http.legacy.jar)
注意:如果您的targetSdkVersion为23,那么所依赖的android-v4兼容包的版本也需要为23以上。
·修改AndroidMainifest.xml文件
在清单文件AndroidMainifest.xml里加入以下权限、添加Activity标签 service标签。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.CAMERA" />
<activity
android:name="com.sobot.chat.activity.SobotChatActivity"
android:theme="@style/sobot_AppTheme"
android:configChanges="orientation|keyboardHidden"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.sobot.chat.activity.SobotPhotoActivity"
android:theme="@style/sobot_AppTheme"
android:configChanges="orientation|keyboardHidden"
android:hardwareAccelerated="false"
android:screenOrientation="portrait" />
<activity
android:name="com.sobot.chat.activity.WebViewActivity"
android:theme="@style/sobot_AppTheme"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.sobot.chat.activity.DCRCActivity"
android:screenOrientation="portrait"
android:theme="@style/sobot_dialog_dcrc"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.sobot.chat.activity.SobotSkillGroupActivity"
android:theme="@style/sobot_dialog_skill" />
<activity
android:name="com.sobot.chat.activity.SobotPostMsgActivity"
android:theme="@style/sobot_AppTheme"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<service
android:name="com.sobot.chat.core.channel.SobotTCPServer"
android:label="SobotChatTCPServer"
android:exported="false">
</service>
<service android:name="com.sobot.chat.server.SobotSessionServer"/>
二、在客服入口按钮的响应函数中加入初始化方法(必须)
Information info = new Information();
info.setAppkey("Your appkey");
/**
* @param context 上下文对象
* @param information 初始化参数
*/
SobotApi.startSobotChat(context, information);
完成以上步骤的对接后,用户则可通过App中的客服入口进入智齿客服的服务页面了。
当然,为了满足客户个性化的需要,智齿SDK提供了强大的UI自定义能力,支持对接登陆用户的身份资料,在特定服务场景下设置特定的客服方案。
注意:如果发生应用打开后自动回退到上一界面,请检查appkey是否正确,另外,sdk2.0版本以后不需要使用sysnum,应该重新获取appkey(获取方法参考准备工作中的1.获取appkey),将新应用的appkey传入。
初始化SDK(同时设定客服配置)
一、对接用户资料
开发者可以直接传入这些用户信息,供客服查看。
注意:uid为用户唯一标识,不能传入一样的值,如果传入值为""空串,那么会获取手机设备id作为uid
Information info = new Information();
//用户编号
//注意:uid为用户唯一标识,不能传入一样的值
info.setUid("");
//用户昵称,选填
info.setUname("");
//用户姓名,选填
info.setRealname("");
//用户电话,选填
info.setTel("");
//用户邮箱,选填
info.setEmail("");
//自定义头像,选填
info.setFace("");
//用户QQ,选填
info.setQq("");
//用户微信,选填
info.setWeixin("");
//用户微博,选填
info.setWeibo("");
//用户性别 0.男,1.女,3.未知
info.setSex(3);
//用户生日,选填
info.setBirthday("");
//用户备注,选填
info.setRemark("");
//对话页标题,选填
info.setVisitTitle("");
//对话页路径,选填
info.setVisitUrl("");
Map<String,String> customInfo = new HashMap<String, String>();
customInfo.put("your key", "your value");
....
//自定义用户资料
info.setCustomInfo(customInfo);
设置用户自定义字段
如果上述设置的用户资料不能满足您的需求,那么您可以在工作台自行配置所需要显示的字段,配置方法如下图:
设置好自定义的字段后,将自定义字段的id作为key以下面的形式传入:
注意:自定义字段在console页面添加新字段以后会在下面生成对应的字段ID。点击显示ID,就可以显示自定义key.添加以后可以删除。删除以后再添加一次的时候,这个key就会发生变化。需要谨慎操作。
//设置用户自定义字段
Map<String,String> customerFields = new HashMap<>();
customerFields.put("weixin","your wechat");
customerFields.put("weibo","your weibo");
customerFields.put("sex","女");
customerFields.put("birthday","2017-05-17");
info.setCustomerFields(customerFields);
二、自定义聊天页面标题样式
2.1 自定义标题栏背景
//设置标题栏的背景图片,选填
info.setTitleImgId(R.drawable.sobot_delete_hismsg_normal);
//设置标题栏的背景颜色,如果背景颜色和背景图片都设置,则以背景图片为准,选填
info.setColor("");
2.2 自定义标题栏显示文案
/**
* 设置聊天界面标题显示模式
* @param context 上下文对象
* @param mode titile的显示模式
* SobotChatTitleDisplayMode.Default:显示客服昵称(默认)
* SobotChatTitleDisplayMode.ShowFixedText:显示固定文本
* SobotChatTitleDisplayMode.ShowCompanyName:显示console设置的企业名称
* @param content 如果需要显示固定文本,需要传入此参数,其他模式可以不传
*/
SobotApi.setChatTitleDisplayMode(context,SobotChatTitleDisplayMode.Default,"");
三、自定义接入模式
根据自身业务的需求,可进行以下初始化参数配置,控制接入模式:
//默认false:显示转人工按钮。true:智能转人工
info.setArtificialIntelligence(false);
//当未知问题或者向导问题显示超过(X)次时,显示转人工按钮。
//注意:只有ArtificialIntelligence参数为true时起作用
info.setArtificialIntelligenceNum(X);
//是否使用语音功能 true使用 false不使用
info.setUseVoice(true);
//客服模式控制 -1不控制 按照服务器后台设置的模式运行
//1仅机器人 2仅人工 3机器人优先 4人工优先
info.setInitModeType(-1);
四、自定义客户转入的技能组
获取技能组编号:
企业可通过此配置实现在特定场景下,对特定用户群体以特定的客服模式接待。
//预设技能组编号
info.setSkillSetId("your skillCode");
//预设技能组名称,选填
info.setSkillSetName("your skillName");
五、发送商品页信息
在用户与客服对话时,经常需要将如咨询商品或订单发送给客服以便客服查看。咨询对象目前最多支持发送5个属性(title,imgUrl,fromUrl,describe,lable),其中(title,fromUrl)为必填字段,如下以商品举例说明:
//咨询内容
ConsultingContent consultingContent = new ConsultingContent();
//咨询内容标题,必填
consultingContent.setSobotGoodsTitle("XXX超级电视50英寸2D智能LED黑色");
//咨询内容图片,选填 但必须是图片地址
consultingContent.setSobotGoodsImgUrl("http://www.li7.jpg");
//咨询来源页,必填
consultingContent.setSobotGoodsFromUrl("www.sobot.com");
//描述,选填
consultingContent.setSobotGoodsDescribe("XXX超级电视 S5");
//标签,选填
consultingContent.setSobotGoodsLable("¥2150");
//可以设置为null
info.setConsultingContent(consultingContent);
六、设置留言提交校验逻辑
注意:在sdk2.1之前(包括2.1),留言提交校验逻辑为代码中本地配置,自sdk2.2版本起,此项配置修改为pc工作台配置,请旧版本用户升级时做好相应的设置。
留言中的邮箱、电话、附件这三个参数的校验和显示逻辑可在pc端console页面配置。
留言中提交的昵称字段为选填项。
注意:由于昵称字段在pc工作台没有相应的设置项,但是考虑到旧版本sdk依旧有使用这个配置项的用户,因此此项配置依旧使用本地代码设置。
设置昵称字段是否显示:
info.setShowNikeNameTv(flag);//true 表示显示false表示不显示
昵称设置为显示时,可设置昵称字段是否为必填字段:
info.setShowNikeName(boolean);//true 表示必填false表示选填
七、返回时要求用户评价
开启后,当用户从SDK会话页面中返回至App时,且用户达到评价标准却未评价时,给用户推送评价,可提升用户的评价率,具体配置如下:
//返回时是否弹出满意度评价
info.setShowSatisfaction(true);
八、自定义客户转入指定的机器人
选择机器人:
获取机器人编号:
企业可通过此配置实现在特定场景下,对特定用户群体以特定的机器人接待。
//设置机器人编号
info.setRobotCode("your robot code");
九、自定义客户转入指定的客服
选择客服:
获取客服编号:
企业可通过此配置实现在特定场景下,对特定用户群体以特定的客服接待。
//转接类型(0-可转入其他客服,1-必须转入指定客服)
info.setTranReceptionistFlag(1);
//指定客服id
info.setReceptionistId("your Customer service id");
API说明
一、启动聊天界面
/**
* @param context 上下文对象
* @param information 初始化参数
*/
SobotApi.startSobotChat(context, information);
二、启用或关闭离线消息功能
开启通道接收离线消息,开启后会在用户离线时收到的新消息以广播的形式发出。
注意:调用disSobotChannel(context)会造成通道连接断开,此时用户将无法收到消息。
/**
* @param context 上下文对象
*/
SobotApi.initSobotChannel(context);
/**
* @param context 上下文对象
*/
SobotApi.disSobotChannel(context);
三、注册广播、获取新收到的信息和未读消息数
注册广播后,当消息通道连通时,可以获取到新接收到的消息。
1 注册广播
/**
* action:ZhiChiConstants.sobot_unreadCountBrocast
*/
IntentFilter filter = new IntentFilter();
filter.addAction(ZhiChiConstant.sobot_unreadCountBrocast);
contex.registerReceiver(receiver, filter);
2 接收新信息和未读消息数
在BroadcastReceiver的onReceive方法中接收信息。
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int noReadNum = intent.getIntExtra("noReadCount", 0);
String content = intent.getStringExtra("content"); //未读消息数
unread_msg_num.setText(noReadNum + "");
//新消息内容
LogUtils.i("新消息内容:"+content);
}
}
四、获取未读消息数
当用户不处在聊天界面时,收到客服的消息会将未读消息数保存在本地,如果需要获取本地保存的未读消息数,那么在需要的地方调用该方法即可。如下:
/**
* @param context 上下文对象
* @return int
*/
SobotApi.getUnreadMsg(context);
五、设置是否开启消息提醒
当用户不处在聊天界面时,收到客服的消息,APP 可以在通知栏或者聊天入口给出提醒。通知栏提醒可以显示最近一条消息的内容,并提供给用户快速进入 APP 的入口。
/**
* 设置是否开启消息提醒 默认不提醒
* @param context
* @param flag
* @param smallIcon 小图标的id 设置通知栏中的小图片,尺寸一般建议在24×24
* @param largeIcon 大图标的id
*/
public static void setNotificationFlag(Context context,boolean flag,int smallIcon,int largeIcon);
六、自定义超链接的点击事件
如想自定义聊天内容中超链接的点击事件,需要使用以下监听方式:
SobotApi.setHyperlinkListener(new HyperlinkListener() {
@Override
public void onUrlClick(String url) {
LogUtils.i("点击了超链接,url="+url);
}
@Override
public void onEmailClick(String email) {
LogUtils.i("点击了邮件,email="+email);
}
@Override
public void onPhoneClick(String phone) {
LogUtils.i("点击了电话,phone="+phone);
}
});
七、自定义聊天记录显示的时间范围
如想设置用户只能看到xx天内的聊天记录,那么可以调用以下方法进行设置
/**
* 控制显示历史聊天记录的时间范围
* @param time 查询时间(例:100-表示从现在起前100分钟的会话)
*/
SobotApi.hideHistoryMsg(context,time);
八、配置用户提交人工满意度评价后释放会话
/**
* 配置用户提交人工满意度评价后释放会话
* @param context 上下文对象
* @param flag true 表示释放会话 false 表示不释放会话
*/
SobotApi.setEvaluationCompletedExit(context,flag);
九、设置通告
sdk中可以设置通告消息,如有此需求,可以使用如下方法进行设置:
/**
* @param context Context 对象
* @param isShowAnnoun 是否显示通告
* @param clickGone 点击通告之后是否隐藏
* @param annTitle 通告标题
* @param annLinkUrl 通告链接地址
*/
SobotApi.setAnnouncement(context,isShowAnnoun,clickGone,annTitle,annLinkUrl);
十、自定义自动应答语
sdk中的自动应答语可以在pc工作台进行动态设置,如果pc工作台的设置满足不了您的需求,那么您可以使用以下接口在代码中进行本地配置
SobotApi.setCustomAdminHelloWord(context,"自定义客服欢迎语");
SobotApi.setCustomRobotHelloWord(context,"自定义机器人欢迎语");
SobotApi.setCustomUserTipWord(context,"自定义用户超时提示语");
SobotApi.setCustomAdminTipWord(context,"自定义客服超时提示语");
SobotApi.setCustomAdminNonelineTitle(context," 自定义客服不在线的说辞");
SobotApi.setCustomUserOutWord(context," 自定义用户超时下线提示语");
十一、注销
用户在应用中退出登陆时需要调用 SDK 的注销操作(只在切换账号时调用),该操作会通知服务器进行推送信息的解绑,避免用户已退出但推送依然发送到当前设备的情况发生。当用于用户退出登录时调用以下方法:
注意:调用此方法会造成通道连接断开,此时用户将无法收到消息。
/**
* @param context 上下文对象
*/
SobotApi.exitSobotChat(context);