智齿客服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包。

<iOS SDK V2.2.2>

<安卓SDK V2.2.2>

快速集成

一、将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);

results matching ""

    No results matching ""