目录

Android sdk 集成说明

优质
小牛编辑
132浏览
2023-12-01

相关限制及注意事项

1、Android SDK 新版支持 api17 以上版本,支持竖屏和横屏。

2、开发工具AS建议升级到3.0以上版本

3、Android SDK 目前仅仅支持超链接标签,其他html标签和属性均不识别

4、Android SDK 需要申请存储、麦克风、拍照危险权限,否则部分功能无法使用

【注意:安卓系统9.0(api 28)以后,默认不再支持Http请求,需要通过配置network_security_config.xml文件解决。如果您的项目中添加此文件并配置后,智齿SKD2.7.9之前的版本出现突然不能使用的情况,您可使用智齿官网上的最新版本,新版本中我们已优化了该配置的影响。

具体情况可查看详情文档

智齿客服SDK为企业提供了一整套完善的智能客服解决方案。智齿客服 SDK 既包含客服业务逻辑,也提供交互界面;企业只需简单两步,便可在App中集成智齿客服,让App拥有7*24小时客服服务能力。

图片

<智齿客服SDK>

管理员可以在后台「设置-支持渠道-APP」添加APP,然后按照本接入文档说明完成SDK对接。

智齿客服SDK具有以下特性

  • 在线咨询:咨询机器人、咨询人工客服(收发图片、发送语音)、发送表情;
  • 指定技能组接待;
  • 排队或客服不在线时引导用户留言;
  • 机器人优先模式下隐藏转人工按钮,N次机器人未知问题问题是显现;
  • 客服满意度评价:用户主动满意度评价+用户退出时询问评价;
  • 传入用户资料:用户对接lD+基础资料+自定义字段;
  • 传入商品来源页:来源页标题+来源页URL;
  • 高度自定义UI;

1.1 集成流程示意图

图片

1.2.文件说明

SDK包含sobotsdkSobot_Sdk_Demo_Android、和Doc相关说明文档。

2.1 手动集成

3.0.4版本

普通版:

下载链接:Android_SDK_3.0.4

androidX普通版:

下载链接:Android_SDK_X_3.0.4

电商版:

下载链接:Android_SDK_MALL_3.0.4

androidX电商版:

下载链接:Android_SDK_MALL_X_3.0.4

导入Module

解压下载的智齿Android_SDK_XXX.zip文件,将 sobotsdk 文件直接复制到您的项目中,

然后 Build-->clean projecty一下,之后在build.gradle添加项目依赖

完成上述步骤之后build.gradle中如下所示:

dependencies {
      implementation project(':sobotsdk')
      implementation 'com.squareup.okhttp3:okhttp:4.4.0'
      implementation 'com.android.support:appcompat-v7:28.0.0'
      implementation 'com.android.support:recyclerview-v7:28.0.0'
      //目前支持常见的3种图片加载库,必须在下面的图片加载库中选择一个添加依赖
      //implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
      //implementation 'com.squareup.picasso:picasso:2.5.2'
      implementation 'com.github.bumptech.glide:glide:4.9.0'
      //在使用4.9.0以上版本的glide时,需额外添加依赖,之前的版本不需要
      implementation 'com.sobot.chat:sobotsupport-glidev4:2.1'
}

【注意】由于glide v3版本和v4版本的接口完全不同,因此我们为了方便您的使用,采用了特殊的集成方式使sdk可以支持任意版本的glide。正常情况下,您使用glide 时,直接添加glide依赖和sobotsdk的依赖,sdk即可正常使用。如果报错,那么把glide 升级到4.4.0版本以上即可。

如果项目启动时,出现imageloader或者glide相关引用找不到情况,可以添加以下依赖:

implementation 'com.sobot.chat:sobotsupport-glidev4:2.0'

如果使用的是4.9.0以上版本的glide时,添加以下依赖:

implementation 'com.sobot.chat:sobotsupport-glidev4:2.1'

2.2 依赖集成

由于JCenter平台已停止服务,智齿sdk 从2.9.7版本开始依赖库发布到MavenCental()平台。如果您需要对接2.9.7以上版本,需要在您的APP根项目下的build.gradle文件中添加MavenCental的引用

3.0.4版本

// 普通版:
implementation  'com.sobot.chat:sobotsdk:3.0.4'
// 普通版 androidX:
implementation  'com.sobot.chat:sobotsdk_x:3.0.4'

// 电商版:
implementation 'com.sobot.chat:sobotsdk-mall:3.0.4'
// 电商版 androidX:
implementation  'com.sobot.chat:sobotsdk-mall-x:3.0.4'

在build.gradle中如下所示:

dependencies {
      implementation 'com.sobot.chat:sobotsdk:3.0.4'
      implementation 'com.squareup.okhttp3:okhttp:4.4.0'
      implementation 'com.android.support:appcompat-v7:28.0.0'
      implementation 'com.android.support:recyclerview-v7:28.0.0'
      //目前支持常见的3种图片加载库,必须在下面的图片加载库中选择一个添加依赖
      //implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
      //implementation 'com.squareup.picasso:picasso:2.5.2'
      implementation 'com.github.bumptech.glide:glide:4.9.0'
      //在使用4.9.0(包含4.9.0)以上版本的glide时,需额外添加依赖,之前的版本不需要
      implementation 'com.sobot.chat:sobotsupport-glidev4:2.1'
}

【注意】由于glide v3版本和v4版本的接口完全不同,因此我们为了方便您的使用,采用了特殊的集成方式使sdk可以支持任意版本的glide。正常情况下,您使用glide 时,直接添加glide依赖和sobotsdk的依赖,sdk即可正常使用。如果报错,那么把glide 升级到4.4.0版本以上即可。

如果项目启动时,出现imageloader或者glide相关引用找不到情况,可以添加以下依赖:

implementation 'com.sobot.chat:sobotsupport-glidev4:2.0'

如果使用的是4.9.0(包含4.9.0)以上版本的glide时,添加以下依赖:

implementation 'com.sobot.chat:sobotsupport-glidev4:2.1'

混淆相关:

参照混淆文件(Android_SDK_x.x.x\Sobot_Sdk_Demo_Android\sobotsdkdemo\proguard-rules.pro)中的混淆配置添加混淆规则。

-keep class com.sobot.** {*;}

【注意】为保持移动端两端方法名一致,方便对接,2.8.5版本后SobotApi类改名ZCSobotApi,部分方法名更改,但是原有SobotApi的方法都可继续使用。

3.1 域名设置

域名说明:

  • 默认SaaS平台域名为: https://api.sobot.com

  • 如果您是腾讯云服务,请设置为: https://www.soboten.com

  • 如果您是本地化部署,请使用自己的部署的服务域名

示例代码:

【注意:设置域名一定要在所有接口请求之前设置,即在初始化之前就必须设置完】

SobotBaseUrl.setApi_Host("域名");

3.2 获取appkey

登录 智齿科技管理平台 获取,如图

图片

3.3 初始化

3.3.1 普通版

初始化参数和调用方式:

【注意:启动智齿SDK之前,需要调用初始化方法initSobotSDK,否则将无法启动SDK】

接口:

/**
* 初始化sdk
* @param Context applicationcontext 上下文  必填
* @param appkey  用户的appkey  必填 如果是平台版用户需要传总公司的appkey
* @param uid     用户的唯一标识,不能传一样的值,可以为空
*/
ZCSobotApi.initSobotSDK(Context application,String appkey,final String uid);

//2.8.5以前版本方法
SobotApi.initSobotSDK(Context application,String appkey,final String uid);

示例代码:

private void initSobotApp() {  
      ZCSobotApi.initSobotSDK(your application,"your appkey", "");
}

3.3.2 电商版

初始化参数和调用方式:

【注意:启动智齿SDK之前,需要调用初始化方法initPlatformUnion和initSobotSDK,否则将无法启动SDK】

接口:

/**
* 初始化平台Id
* @param Context applicationcontext 上下文  必填
* @param platformUnionCode   平台Id  必填  请联系对应的客服申请
* @param platformSecretkey 平台标识 秘钥 请联系对应的客服申请
*/
ZCSobotApi.initPlatformUnion(Context application, String platformUnionCode,String platformSecretkey);

//2.8.5以前版本方法
SobotApi.initPlatformUnion(Context application, String platformUnionCode,String platformSecretkey);

//商户对接id (仅电商版适用,如果没有app_key则必须提供)
//info.setCustomer_code("商户id");

接口(可选):

//设置溢出商城主站公司id
ZCSobotApi.setFlow_Company_Id(context,"your flowCompanyId");
//设置溢出商城主站公司技能组Id
ZCSobotApi.setFlow_GroupId(context,"your flowGroupId");
//设置是否溢出到主商户flowType  0-不溢出 , 1-全部溢出,2-忙碌时溢出,3-不在线时溢出,默认不溢出
ZCSobotApi.setFlow_Type(context,"your flowType");

//2.8.5以前版本方法
SobotApi.setFlow_Company_Id(context,"your flowCompanyId");
SobotApi.setFlow_GroupId(context,"your flowGroupId");
SobotApi.setFlow_Type(context,"your flowType");

示例代码:

    private void initApp() { 
        ZCSobotApi.initSobotSDK(your application, getResources().getString(R.string.sobot_appkey), "");
        // initPlatformUnion()在initSobotSDK()之后调用
        ZCSobotApi.initPlatformUnion(your application, "your platformUnionCode", ""); // platformUnionCode - 平台id
     }

3.4 启动智齿页面

3.4.1 启动智齿页面

普通版本和电商版本启动方式一样

接口

Information info = new Information();
//appkey 必传
info.setApp_key("Your appkey");
/**
* @param context 上下文对象
* @param information 初始化参数
*/
ZCSobotApi.openZCChat(context, information);

//2.8.5以前版本方法
SobotApi.startSobotChat(context, information);
参数名类型描述
contextContext上下文
informationUIViewController初始化参数自定义设置

示例代码:

Information info = new Information();
// appkey 必填 
info.setApp_key(et_appkey.getText().toString());
//注意:用户唯一标识,不能传入一样的值,选填,最大长度限制为300
info.setPartnerid("");
//用户昵称,选填
info.setUser_nick("");
//用户姓名,选填
info.setUser_name("");
//用户电话,选填
info.setUser_tels("");
//用户邮箱,选填
info.setUser_emails("");
//自定义头像,选填
info.setFace("");
//用户QQ,选填
info.setQq("");
//用户备注,选填
info.setRemark("");
//访问着陆页标题,选填
info.setVisit_title("");
//访问着陆页链接地址,选填
info.setVisit_url("");
ZCSobotApi.openZCChat(context, info);

如有特殊需求,SDK 还提供了以 fragment 嵌入的方式集成会话界面,开发者可以更灵活的使用 SDK。示例代码如下(也可参考SobotChatActivity中的实现)

Bundle informationBundle = new Bundle();
informationBundle.putSerializable(ZhiChiConstant.SOBOT_BUNDLE_INFO, info);
SobotChatFragment fragment = SobotChatFragment.newInstance(informationBundle);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
// containerId 为 ViewGroup 的 resId
transaction.replace(containerId, fragment);
try {
    transaction.commitAllowingStateLoss();
} catch (Exception e) {
}

3.4.2 启动商家列表(仅电商版)

/**
 * 启动商家列表
 *
 * @param context 上下文对象
 * @param uid 用户唯一标识 与information中传的uid一致
 */
ZCSobotApi.openZCChatListView(Context context,String uid);

//2.8.5以前版本方法
SobotApi.startMsgCenter(Context context,String uid)

设置消息中心item回调

SobotOption.sobotConversationListCallback = new SobotConversationListCallback(){
   @Override
   public void onConversationInit(Context context,Information info) {
      //点击会话列表中的单个会话,启动聊天页面
     //由于默认的启动方式无法获取客服聊天的配置,因此需要手动设置此回调
     /**
      *例如:
      *  //用户昵称,选填
      *  info.setUser_nick("");
      *  .....
      *  ZCSobotApi.openZCChat(context, info);
      **/
   }
};

3.4.3 启动客户服务中心

Information info = new Information();
info.setApp_key("Your AppKey");  //分配给App的的密钥

//2.9.3新增客服中心电话按钮,电话号码和显示文案都不为空才能显示
info.setHelpCenterTel("18510000000");//电话号码
info.setHelpCenterTelTitle("联系电话");//打电话按钮显示文案

/**
* @param context 上下文对象
* @param information 初始化参数
*/
ZCSobotApi.openZCServiceCenter(context, information);

//2.8.5以前版本方法
SobotApi.openSobotHelpCenter(context, information);

效果图如下:

图片

3.5 结束会话

用户在应用中退出登陆时需要调用 SDK 的注销操作(只在切换账号时调用),该操作会通知服务器进行推送信息的解绑,避免用户已退出但推送依然发送到当前设备的情况发生。当用于用户退出登录时调用以下方法:

注意:调用此方法会造成通道连接断开,此时用户将无法收到消息。

/**
* @param context 上下文对象
*/
ZCSobotApi.outCurrentUserZCLibInfo(context);

//2.8.5以前版本方法
SobotApi.exitSobotChat(context);

4.1 机器人客服

4.1.1 对接指定机器人

在后台获取机器人编号:

图片

在 SDK 代码中配置:

//设置机器人编号
info.setRobotCode("your robot code");

//设置机器人编号对应的别名  2.8.6新增
//指定别名和指定的编号id效果一样
info.setRobot_alias("your robot alias");

4.1.2 自定义接入模式

根据自身业务的需要,可进行以下初始化参数配置,控制接入模式:

//默认false:显示转人工按钮。true:智能转人工
info.setArtificialIntelligence(false);
//当未知问题或者向导问题显示超过(X)次时,显示转人工按钮。
//注意:只有ArtificialIntelligence参数为true时起作用
info.setArtificialIntelligenceNum(X);
//是否使用语音功能 true使用 false不使用   默认为true
info.setUseVoice(true);
//是否使用机器人语音功能 true使用 false不使用 默认为false,需要付费才可以使用
info.setUseRobotVoice(false);
//客服模式控制 -1不控制 按照服务器后台设置的模式运行
//1仅机器人 2仅人工 3机器人优先 4人工优先
info.setService_mode(-1);
//设置机器人模式下输入关键字转人工
HashSet<String> tmpSet = new HashSet<>();
tmpSet.add("转人工");
tmpSet.add("人工");
info.setTransferKeyWord(tmpSet);

4.1.3 自定义转人工事件

sdk可以配置转人工拦截器,在转人工前做一些额外的逻辑处理,例如自定义技能组选择dialog。

1.设置拦截器

SobotOption.transferOperatorInterceptor = new SobotTransferOperatorInterceptor() {
    @Override
    public void onTransferStart(final Context context, final SobotTransferOperatorParam param) {
        //do something
    }
};

2、修改转人工参数SobotTransferOperatorParam,以下为可修改参数介绍:

//技能组id 
String groupId;
//技能组名称
String groupName;
//转人工后是否提示
boolean isShowTips;
//商品卡片信息
ConsultingContent consultingContent;

3、使用转人工参数主动调用转人工接口:

/**
 * 外部主动调用转人工
 * @param context
 * @param param 转人工参数
 *        ConsultingContent consultingContent 商品信息        
 */
ZCSobotApi.connectCustomerService(context, param);

//2.8.5以前版本方法
SobotApi.transfer2Operator(context, param);

4.1.4 设置转人工溢出

注意:如果设置了指定客服或者指定技能组接待,则溢出配置不生效。

1.配置参数对象示例

Information info = new Information();
//设置溢出技能组或客服,最多四层,
List<SobotTransferAction> datas = new ArrayList<>();
//例如:设置专员客服接待;溢出规则和技能组一样
SobotTransferAction firstData = new SobotTransferAction.ServiceBuilder()
        .conditionIntelligentudgement()
        .overflow()
        .designatedServiceId("d679e5b8d45b484e9475a2ca051b44a0")//专员客服ID
        .ServiceBuilder();
//例如:贵宾技能组
SobotTransferAction guibinData = new SobotTransferAction.Builder()
        .designatedSkillId("ae654754311e4fa59sdfdsafdsffc")
        .conditionIntelligentudgement()
        .overflow()
        .Build();

//例如:vip技能组
SobotTransferAction vipData = new SobotTransferAction.Builder()
        .designatedSkillId("ae654754311e4fa590b0e3a4298672fc")
        .conditionIntelligentudgement()
        .overflow()
        .Build();
//例如:普通技能组
SobotTransferAction data = new SobotTransferAction.Builder()
        .designatedSkillId("a71100c5463d42bfb467762bccfef511")
        .conditionIntelligentudgement()
        .overflow()
        .Build();
datas.add(firstData);
datas.add(guibinData);
datas.add(vipData);
datas.add(data);
JSONArray jsonArray = GsonUtil.praseList2Json(datas);
info.setTransferAction(jsonArray.toString());

2.配置参数说明

①、设置是否溢出
//设置溢出
overflow()
//设置不溢出
no_overflow()
②、设置指定的技能组
designatedSkillId("技能组id")
   设置指定的客服
designatedServiceId("客服id")


③、设置溢出条件
//指定客服组时:技能组无客服在线
conditionServiceOffline()
//指定客服组时:技能组所有客服忙碌
conditionServiceBusy()
//指定客服组时:技能组不上班
conditionServiceOffWork()
//指定客服组时:智能判断
conditionIntelligentudgement()

4.1.5 机器人咨询模式下可隐藏加号菜单栏的按钮

//隐藏留言功能,人工和机器人模式下都会隐藏 true 隐藏,false 显示,默认false
info.setHideMenuLeave(true);
//隐藏评价功能 true 隐藏,false 显示,默认false 
info.setHideMenuSatisfaction(true);

4.1.6 指定常见问题引导

//2.9.2 新增 不同场景进入可以配置faqid指定机器人对应的常见问题引导
  info.setFaqId("robot faqid");

4.2 人工客服

4.2.1 对接指定技能组

在后台获取技能组编号:

图片

在 SDK 代码中配置技能组ID:

//预设技能组编号
info.setGroupid("your groupId");
//预设技能组名称,选填
info.setGroup_name("your groupName");

注意:此字段可选,如果传入技能组ID那么SDK内部转人工之后不在弹技能组的选择框,直接跳转到传入ID所对应的技能组中

4.2.2 对接指定客服

在后台获取指定客服ID:

图片

图片

在 SDK 代码中设置:

//转接类型(0-可转入其他客服,1-必须转入指定客服)
info.setTranReceptionistFlag(1);
//指定客服id
info.setChoose_adminid("your Customer service id");

注意: 1 choose_adminid :指定对接的客服,如果不设置,取默认

2 tranReceptionistFlag :设置指定客服之后是否必须转入指定客服

0 :可转入其他客服,

1: 必须转入指定客服,

注意:如果设置为1 ,当指定的客服不在线,不能再转接到其他客服

4.2.3 设置用户自定义资料和自定义字段

开发者可以直接传入这些用户信息,供客服查看。

在工作台自行配置所需要显示的字段,配置方法如下图:

图片

//设置用户自定义字段,key必须是后端字段对应的ID
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.setCustomer_fields(customerFields);

用户自定义资料

//自定义用户料
Map<String, String> customInfo = new HashMap<>();
customInfo.put("资料", "aaaaa");
info.setParams(customInfo);

效果图如下: 图片

4.2.4 设置转接成功后自动发消息

sdk可以设置转接成功后自动发消息,每通会话只会发送一次; (2.9.3新增)可设置是否每次进入聊天页面都自动发送一次,默认只发送一次;

//发送文字消息
//设置发送模式 
//SobotAutoSendMsgMode.Default  默认 不发送
//SobotAutoSendMsgMode.SendToRobot  只给机器人发送
//SobotAutoSendMsgMode.SendToOperator   只给人工客服发送
//SobotAutoSendMsgMode.SendToAll   全部发送
//setIsEveryTimeAutoSend 是否每次进入聊天页都发送
info.setAutoSendMsgMode(SobotAutoSendMsgMode.SendToAll.setContent("your msg").setIsEveryTimeAutoSend(false));

//2.8.6 新增转人工成功后可发送文字、图片、视频、文件(只限人工模式下),需要设置文件本地路径和发送类型
//SobotAutoSendMsgMode.ZCMessageTypeText   文本(默认)
//SobotAutoSendMsgMode.ZCMessageTypePhoto  图片
//SobotAutoSendMsgMode.ZCMessageTypeFile   文件
//SobotAutoSendMsgMode.ZCMessageTypeVideo  视频
String path = CommonUtils.getSDCardRootPath() + File.separator + "2.jpg";
//path =  "发送内容";
//path =  CommonUtils.getSDCardRootPath() + File.separator + "3.mp4";
//path = CommonUtils.getSDCardRootPath() + File.separator + "1.txt";
info.setAutoSendMsgMode(SobotAutoSendMsgMode.SendToOperator.setContent(path).setAuto_send_msgtype(SobotAutoSendMsgMode.ZCMessageTypePhoto));

4.2.5 设置指定客户排队优先接入

sdk可以设置当前用户排队优先,当此用户进入排队状态时,将会被优先接待。

//设置排队优先接入 true:优先接入  false:默认值,正常排队
info.setIs_Queue_First(true);

4.2.6 设置服务总结自定义字段

sdk可以配置服务总结自定义字段,可以使客服更快速的对会话进行服务总结。

1、获取自定义字段id

图片

图片

2、设置服务总结自定义字段 (转人工支持传入服务总结参数)

//服务总结自定义字段
Map<String, String> summaryInfo = new HashMap<>();
summaryInfo.put("your keyId", "your value");
info.setSummary_params(summaryInfo);

4.2.7 设置多轮会话接口参数

在使用多轮会话功能时,每一个接口我们都会传入 uid 和 mulitParams 两个固定的自定义参数,uid 是用户的唯一标识,mulitParams是自定义字段json字符串、如果用户对接了这两个字段,我们会将这两个字段回传给第三方接口、如果没有我们会传入空字段。

//多轮会话自定义参数
info.setMulti_params("{\"key1\",\"val1\"}");

4.2.8 商品的咨询信息并支持直接发送消息卡片,仅人工模式下支持

在用户与客服对话时,经常需要将如咨询商品或订单发送给客服以便客服查看。咨询对象目前最多支持发送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");
//转人工后是否自动发送
consultingContent.setAutoSend(true);
//3.0.3新增 每次返回再次进入聊天页面是否都重新发送 true 每次都发,false 只发一次,默认只发一次 
consultingContent.setEveryTimeAutoSend(false);
//启动智齿客服页面 在Information 添加,转人工发送卡片消息
info.setConsultingContent(consultingContent);

效果图如下: 图片

4.2.9 发送订单卡片,仅人工模式下支持,订单卡片点击事件可拦截

用法一:启动智齿客服时,自动发送订单卡片消息

List<OrderCardContentModel.Goods> goodsList = new ArrayList<>();
goodsList.add(new OrderCardContentModel.Goods("苹果", "https://img.sobot.com/chatres/66a522ea3ef944a98af45bac09220861/msg/20190930/7d938872592345caa77eb261b4581509.png"));
goodsList.add(new OrderCardContentModel.Goods("苹果1111111", "https://img.sobot.com/chatres/66a522ea3ef944a98af45bac09220861/msg/20190930/7d938872592345caa77eb261b4581509.png"));
goodsList.add(new OrderCardContentModel.Goods("苹果2222", "https://img.sobot.com/chatres/66a522ea3ef944a98af45bac09220861/msg/20190930/7d938872592345caa77eb261b4581509.png"));
goodsList.add(new OrderCardContentModel.Goods("苹果33333333", "https://img.sobot.com/chatres/66a522ea3ef944a98af45bac09220861/msg/20190930/7d938872592345caa77eb261b4581509.png"));
OrderCardContentModel orderCardContent = new OrderCardContentModel();
//订单编号(必填)
orderCardContent.setOrderCode("zc32525235425");
//订单状态
//待付款:1 待发货:2 运输中:3  派送中:4  已完成:5  待评价:6 已取消:7
orderCardContent.setOrderStatus(1);

//2.9.7版本新增自定义订单状态名称 只有订单状态是0时才有效,其他值还按照原有逻辑
//orderCardContent.setOrderStatus(0);
//orderCardContent.setStatusCustom("您的自定义状态");                 

//订单总金额(单位 分)
orderCardContent.setTotalFee(1234);
//订单商品总数
orderCardContent.setGoodsCount("4");
//订单链接
orderCardContent.setOrderUrl("https://item.jd.com/1765513297.html");
//订单创建时间
orderCardContent.setCreateTime(System.currentTimeMillis() + "");
//转人工后是否自动发送
orderCardContent.setAutoSend(true);
//3.0.3新增 每次返回再次进入聊天页面是否都重新发送 true 每次都发,false 只发一次,默认只发一次 
orderCardContent.setEveryTimeAutoSend(false);
//订单商品集合
orderCardContent.setGoods(goodsList);
//订单卡片内容
info.setOrderGoodsInfo(orderCardContent);

用法二:转人工后,加号中可添加一个订单按钮,点击后给客服发送一条订单消息

final String ACTION_SEND_ORDERCARD = "sobot_action_send_ordercard";
ChattingPanelUploadView.SobotPlusEntity ordercardEntity = new ChattingPanelUploadView.SobotPlusEntity(ResourceUtils.getDrawableId(getApplicationContext(), "sobot_ordercard_btn_selector"), ResourceUtils.getResString(getApplicationContext(), "sobot_ordercard"), ACTION_SEND_ORDERCARD);
tmpList.add(ordercardEntity);
SobotUIConfig.pulsMenu.operatorMenus = tmpList;
//sSobotPlusMenuListener 只能有一个,否则,下边的会覆盖上边的(例如:加号中
//同时自定义添加位置和订单按钮后,可根据action 判断点击的是哪个按钮,做对应的处理)
SobotUIConfig.pulsMenu.sSobotPlusMenuListener = new SobotPlusMenuListener() {
    @Override
    public void onClick(View view, String action) {
        if (ACTION_SEND_ORDERCARD.equals(action)) {
            Context context = view.getContext();
            List<OrderCardContentModel.Goods> goodsList = new ArrayList<>();
            goodsList.add(new OrderCardContentModel.Goods("苹果", "https://img.sobot.com/chatres/66a522ea3ef944a98af45bac09220861/msg/20190930/7d938872592345caa77eb261b4581509.png"));
            OrderCardContentModel orderCardContent = new OrderCardContentModel();
            //订单编号(必填)
            orderCardContent.setOrderCode("zc32525235425");
            //订单状态
            //待付款:1 待发货:2 运输中:3 派送中:4 已完成:5 待评价:6 已取消:7
            orderCardContent.setOrderStatus(1);

            //2.9.7版本新增自定义订单状态名称 只有订单状态是0时才有效,其他值还按照原有逻辑
            //orderCardContent.setOrderStatus(0);
            //orderCardContent.setStatusCustom("您的自定义状态");   

            //订单总金额(单位是分)
            orderCardContent.setTotalFee(1234);
            //订单商品总数
            orderCardContent.setGoodsCount("4");
            //订单链接
            orderCardContent.setOrderUrl("https://item.jd.com/1765513297.html");
            //订单创建时间
            orderCardContent.setCreateTime(System.currentTimeMillis() + "");
            //订单商品集合
            orderCardContent.setGoods(goodsList);
            ZCSobotApi.sendOrderGoodsInfo(context, orderCardContent);
        }
    }
};

配置订单卡片拦截,也可使用ZCSobotApi.setNewHyperlinkListener()进行拦截;setOrderCardListene拦截后setNewHyperlinkListener就不会在拦截了

ZCSobotApi.setOrderCardListener(new SobotOrderCardListener() {
    @Override
    public void onClickOrderCradMsg(OrderCardContentModel orderCardContent) {
        ToastUtil.showToast(getApplicationContext(), "点击了订单卡片" );
    }
});

效果图如下: 图片

4.2.10 查看商户客服是否正在和用户聊天 (仅电商版可用)

/**
 * 判断当前用户是否正在与当前商户客服聊天
 *
 * @param appkey 当前商户的appkey
 * @return true 表示正在与当前商户客服聊天
 *           false 表示当前没有与所选商户客服聊天
 */
ZCSobotApi.isActiveOperator(appkey);

4.2.11 设置用户是否是vip和用户vip级别

//可在启动智齿客服时设置
//指定客户是否为vip,0:普通 1:vip
 info.setIsVip("1");
//vip级别可在智齿管理端(系统设置>自定义字段>客户字段)中编辑,拿到等级对应的ID或者名称
 info.setVip_level("尊贵");//通过名称设置vip等级

4.2.12 设置用户自定义标签

//可在启动智齿客服时设置
//用户标签可在智齿管理端(系统设置>自定义字段>客户字段)中编辑,拿到用户标签对应的ID或者名称
//可添加多个用户标签,多个标签ID或者名称之间用,分割
info.setUser_label("明星,记者");

4.2.13 转人工后可隐藏“+”号菜单栏中的按钮

//隐藏留言功能,人工和机器人模式下都会隐藏 true 隐藏,false 显示,默认false
info.setHideMenuLeave(true);
//隐藏留言功能,只有人工模式下会隐藏 true 隐藏,false 显示,默认false
info.setHideMenuManualLeave(true);
//隐藏评价功能 true 隐藏,false 显示,默认false
info.setHideMenuSatisfaction(true);
//隐藏图片功能 true 隐藏,false 显示,默认false
info.setHideMenuPicture(true);
//隐藏视频功能 true 隐藏,false 显示,默认false
info.setHideMenuVedio(true);
//隐藏文件功能 true 隐藏,false 显示,默认false
info.setHideMenuFile(true);
//隐藏拍摄功能 true 隐藏,false 显示,默认false
info.setHideMenuCamera(true);

4.3 留言工单相关

4.3.1 工作台设置留言界面

在工作台可以设置留言界面

图片

4.3.2 留言页面用户信息自定义配置

留言中的邮箱、电话、附件这三个参数的校验和显示逻辑可在pc端console页面配置。

图片

4.3.3 跳转到留言页面

/**
 * 跳转到留言界面
 *
 * @param context   上下文  必填
 * @param info     用户的appkey  必填 如果是平台用户需要传总公司的appkey
 * @param isOnlyShowTicket true只显示留言记录界面,false 请您留言和留言记录界面都显示
 */
 ZCSobotApi.openLeave(Context context,Information info,boolean isOnlyShowTicket);

//2.8.5以前版本方法
SobotApi.startToPostMsgActivty(Context context,Information info,boolean isOnlyShowTicket);

示例代码:

Information info = new Information();
info.setApp_key(et_appkey.getText().toString());/* 必填 */
//工单技能组
info.setLeaveMsgGroupId("6576d173af904d97b1d5d01a11cc66f5");
Map<String,String> map=new HashMap<>();
//自定义字段,key和后端添加字段ID的对应
map.put("834b34870b2e47daa1904d8f63ee55c2","zzz");
info.setLeaveCusFieldMap(map);
//2.9.5添加 指定留言模版id,跳转到指定的留言界面
info.setLeaveTemplateId("7800560a37784ce1be064915c8389d28");
ZCSobotApi.openLeave(SobotStartActivity.this, info, false);

4.3.4 留言页面事件拦截

sdk中留言可跳转到自定义页面,如有此需求,可以使用如下方法进行设置:

ZCSobotApi.setSobotLeaveMsgListener(new SobotLeaveMsgListener() {
    @Override
    public void onLeaveMsg() {
      ToastUtil.showToast(getApplicationContext(),"在这里实现方法,跳转页面");
   }
});

4.3.5 已完成状态的留言详情界面的回复按钮可通过参数配置是否显示

//已完成状态的留言,是否可持续回复 true 持续回复 ,false 不可继续回复 ;
//默认 true 用户可一直持续回复
ZCSobotApi.setSwitchMarkStatus(MarkConfig.LEAVE_COMPLETE_CAN_REPLY,true);

4.3.6 获取留言回复

  /**
   * 获取未读留言回复列表,如果获取到有未读的留言回复,把最新的一条展示在通知栏中,点击通知栏通知,跳转到留言详情页面
   *
   *如果您通过类似定时任务的方式实时获取最新的留言回复,两次请求间隔时间需大于60s,接口才会有数据返回
   *
   * @param context   上下文  必填
   * @param partnerId 用户唯一标识 与information中传的partnerId一致
   * @param noReadLeaveReplyListener 获取未读留言回复列表回调,SobotLeaveReplyModel:单个留言回复对象
   */
 ZCSobotApi.getLastLeaveReplyMessage(SobotStartActivity.this,"your partnerid", new SobotNoReadLeaveReplyListener() {
                @Override
                public void onNoReadLeaveReplyListener(List<SobotLeaveReplyModel> sobotLeaveReplyModelList) {
                    if(sobotLeaveReplyModelList!=null&&sobotLeaveReplyModelList.size()>0){
                    // 发送留言回复通知,点击通知栏通知后,跳转到留言详情页面
                    ZCSobotApi.sendLeaveReplyNotification(SobotStartActivity.this, sobotLeaveReplyModelList.get(0), R.drawable.sobot_logo_small_icon, R.drawable.sobot_logo_small_icon);
                    }
                
                }
            });

4.3.7 添加留言评价主动提醒开关

//已完成留言详情界面-未评价:返回时是否弹出服务评价窗口(只会第一次返回弹,下次返回不会再弹) 默认false(不弹)
info.setShowLeaveDetailBackEvaluate(true);

4.3.8 添加留言扩展参数

 //添加留言对接字段
 List<SobotLeaveMsgFieldModel> leaveParamsExtends = new ArrayList<>();
//SobotLeaveMsgFieldModel属性说明;id:对接字段系统自动生成的id;value:传递的数据;params:显示的字段ID,例如city、address,与id对应;数据从后端工作台配置得到
 leaveParamsExtends.add(new SobotLeaveMsgFieldModel("your id", "your value", "your params"));
 info.setLeaveParamsExtends(leaveParamsExtends);

 //添加留言技能组
info.setLeaveMsgGroupId("your groupId");

//添加留言自定义字段,key和后端添加字段ID的对应
Map<String,String> map=new HashMap<>();
map.put("your field key","zzz");
info.setLeaveCusFieldMap(map);

4.4 评价

4.4.1 设置评价界面

在工作台可以设置 满意度评价界面

图片

4.4.2 导航栏左侧点击返回时是否弹出满意度评价

注意:只有用户发送过消息,满意度评价窗口才能弹出

//点击返回时是否弹出弹窗(您是否结束会话?)
info.setShowLeftBackPop(true);
//导航栏左侧点击返回时是否弹出满意度评价。true弹出,false不弹;默认false
info.setShowSatisfaction(false);

效果图如下: 图片图片

4.4.3 导航栏右侧关闭按钮是否显示和点击时是否弹出满意度评价

注意:只有用户发送过消息,满意度评价窗口才能弹出

//设置是否显示导航栏右侧关闭按钮,true显示,false隐藏;默认false
info.setShowCloseBtn(false);
//导航栏右侧点击关闭按钮时是否弹出满意度评价。true弹出,false不弹;默认false
info.setShowCloseSatisfaction(false);

4.4.4 配置用户提交人工满意度评价后释放会话

/**
 * 配置用户提交人工满意度评价后释放会话
 * @param context 上下文对象
 * @param flag true 表示释放会话  false  表示不释放会话
 */
ZCSobotApi.setEvaluationCompletedExit(context,flag);

4.4.5 左上角返回和右上角关闭时,人工满意度评价弹窗界面配置是否显示暂不评价按钮

/**
 * 左上角返回和右上角关闭 返回弹出评价窗口时,是否显示暂不评价按钮  默认false(不显示)
 */
info.setCanBackWithNotEvaluation(true);

4.5 消息相关

4.5.1 发送文本消息

如您的app需要主动发送文本消息给客服,请使用如下代码:

/**
 * 发送文本类信息
 * @param context
 * @param content 文本内容
 */
ZCSobotApi.sendTextToUser(Context context,String content)

//2.8.5以前版本方法
SobotApi.sendTextMsg(Context context,String content)

4.5.2 设置是否开启消息提醒

当用户不处在聊天界面时,收到客服的消息,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);

用户点击通知栏会发出广播,监听广播实现跳转到指定Activity

action:
常量:ZhiChiConstant.SOBOT_NOTIFICATION_CLICK
或者字符串:“sobot_notification_click”

//在接收到广播的地方,用户可以自己处理点击事件;
//也可以获取当前启动的参数对象Information,直接启动智齿聊天,参考代码如下:
Information information = ZCSobotApi.getCurrentInfoSetting(context);
if (information != null) {
    ZCSobotApi.openZCChat(context, information);
}

示例代码:

//设置是否开启消息提醒
ZCSobotApi.setNotificationFlag(getApplicationContext(), true, R.drawable.sobot_logo_small_icon, R.drawable.sobot_logo_icon);

4.5.3 设置离线消息

开启离线消息

// 开启通道接受离线消息,开启后会将消息以广播的形式发送过来,如果无需此功能那么可以不做调用
ZCSobotApi.checkIMConnected(getApplicationContext(), "uid");

//2.8.5以前版本方法
SobotApi.initSobotChannel(getApplicationContext(), "uid");

关闭离线消息

// 关闭通道,清除当前会话缓存
ZCSobotApi.closeIMConnection(getApplicationContext());

//2.8.5以前版本方法
SobotApi.disSobotChannel(getApplicationContext());

4.5.4 注册广播、获取新收到的信息和未读消息数

注册广播后,当消息通道连通时,可以获取到新接收到的消息。

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");
    LogUtils.i("未读消息数:" + noReadNum + "   新消息内容:" + content);
  }
}

当用户不处在聊天界面时,收到客服的消息会将未读消息数保存在本地,如果需要获取本地保存的未读消息数,那么在需要的地方调用该方法即可。如下:

/**
* @param context 上下文对象
* @param uid 用户唯一标识 与information中传的uid一致,
* @return int
*/
ZCSobotApi.getUnReadMessage(Context context,String uid);//如果您没有在information里设置这个uid,请传入null。

//2.8.5以前版本方法
SobotApi.getUnreadMsg(Context context,String uid);

4.5.5 发送位置消息

如您的app需要发送客户的位置信息,请参照以下步骤设置(其中地图定位需要开发者自行开发):

1、客服聊天界面配置位置发送按钮(显示在点击“+”按钮的菜单面板中,只在转人工后显示),代码如下:

//菜单动作 当点击按钮时会将对应action返回给callback以此作为依据,
//判断用户点击了哪个按钮,可自行定义
final String ACTION_LOCATION = "sobot_action_location";
//配置位置发送按钮
ChattingPanelUploadView.SobotPlusEntity locationEntity = new ChattingPanelUploadView.SobotPlusEntity(R.drawable.sobot_location_btn_selector, ResourceUtils.getResString(getApplicationContext(), "sobot_location"), ACTION_LOCATION);
List<ChattingPanelUploadView.SobotPlusEntity> tmpList = new ArrayList<>();
tmpList.add(locationEntity);
SobotUIConfig.pulsMenu.operatorMenus = tmpList;

2、设置位置发送按钮的回调:

//sSobotPlusMenuListener 只能有一个,否则,下边的会覆盖上边的(例如:加号中
//同时自定义添加位置和订单按钮后,可根据action 判断点击的是哪个按钮,做对应的处理)
SobotUIConfig.pulsMenu.sSobotPlusMenuListener = new SobotPlusMenuListener() {
    @Override
    public void onClick(View view, String action) {
        if (ACTION_LOCATION.equals(action)) {
            Context context = view.getContext();
            //在地图定位页面获取位置信息后发送给客服:
            SobotLocationModel locationData = new SobotLocationModel();
            //地图快照,必须传入本地图片地址,注意:如果不传会显示默认的地图图片
            locationData.setSnapshot(Environment.getExternalStorageDirectory().getAbsolutePath()  +"/1.png");
            //纬度
            locationData.setLat("40.057406655722");
            //经度
            locationData.setLng("116.2964407172");
            //标点名称
            locationData.setLocalName("金码大厦");
            //标点地址
            locationData.setLocalLabel("北京市海淀区六道口金码大厦");
            ZCSobotApi.sendLocation(context, locationData);
        }
    }
};

4.5.6 自定义超链接的点击事件(拦截范围:帮助中心、留言、聊天、留言记录、商品卡片,订单卡片,位置卡片)

2.8.2 之后

// 链接的点击事件, 根据返回结果判断是否拦截 如果返回true,拦截;false 不拦截
// 可为订单号,商品详情地址等等;客户可自定义规则拦截,返回true时会把自定义的信息返回
// 拦截范围  (帮助中心、留言、聊天、留言记录、商品卡片,订单卡片)
ZCSobotApi.setNewHyperlinkListener(new NewHyperlinkListener() {
    @Override
    public boolean onUrlClick(String url) {
        //举例
        if (url.contains("baidu.com")) {
            ToastUtil.showToast(getApplicationContext(), "点击了超链接,url=" + url);
            //如果url链接是百度,拦截
            //do().....
            return true;
        }
        //举例
        if (url.contains("订单编号:123456789")) {
            ToastUtil.showToast(getApplicationContext(), "点击了超链接,url=" + url);
            //如果链接是订单卡片,拦截
            //do().....
            return true;
        }
        return false;
    }
    @Override
    public boolean onEmailClick(String email) {
        ToastUtil.showToast(getApplicationContext(), "点击了邮件,email=" + email);
        return false;
    }
    @Override
    public boolean onPhoneClick(String phone) {
        ToastUtil.showToast(getApplicationContext(), "点击了电话,phone=" + phone);
        return false;
    }
});

设置位置卡片点击事件回调 (2.9.3新增)

  //位置卡片点击后默认优先打开百度地图,没有安装百度地图,再打开高德地图;可拦截位置卡片点击事件,自己处理
        SobotOption.mapCardListener = new SobotMapCardListener() {
            @Override
            public boolean onClickMapCradMsg(Context context, SobotLocationModel locationModel) {
                if (context != null && locationModel != null) {
                    ToastUtil.showCustomToast(context, "点击拦截位置卡片事件");
                    //优先打开高德地图
                    //StMapOpenHelper.firstOpenGaodeMap(context, locationModel);
                    //优先打开百度地图
                    //StMapOpenHelper.firstOpenBaiduMap(context, locationModel);
                }
                return true;//返回true 拦截
               // return false;//返回false 不拦截
            }
        };

2.8.2 之前 这个方法 配置后会拦截所有的,不能动态拦截,建议使用新方法(setNewHyperlinkListener)

ZCSobotApi.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);
  }
});

4.5.7 监听当前聊天模式的变化

ZCSobotApi.setChatStatusListener(new SobotChatStatusListener() {
    @Override
    public void onChatStatusListener(SobotChatStatusMode chatStatusMode) {
        switch (chatStatusMode) {
            case ZCServerConnectRobot:
                ToastUtil.showToast(getApplicationContext(), "机器人聊天模式");
                break;
            case ZCServerConnectArtificial:
                ToastUtil.showToast(getApplicationContext(), "转人工客服聊天模式");
                break;
            case ZCServerConnectOffline:
                ToastUtil.showToast(getApplicationContext(), "已离线");
                break;
            case ZCServerConnectWaiting:
                ToastUtil.showToast(getApplicationContext(), "仅人工排队中");
                break;
        }
    }
});

4.5.8 替换消息中手机或固话识别的正则表达式

ZCSobotApi.replacePhoneNumberPattern(String regex);

4.5.9 替换消息中超链接识别的正则表达式

ZCSobotApi.replaceWebUrlPattern(String regex);

4.5.10 隐藏消息列表中的时间提示

//isHide true 隐藏 ,false 显示 默认false
ZCSobotApi.hideTimemsgForMessageList( Context context, boolean isHide);

4.6 会话页面自定义UI设置

为了咨询客服窗口的界面风格能与集成智齿客服 SDK 的 App 整体统一,智齿客服 SDK 提供了简洁的 UI 自定义配置选项

4.6.1 配置属性值

以下属性可在application的oncreate()方法中设置

//设置 转人工按钮的图片
SobotUIConfig.sobot_serviceImgId = R.drawable.sobot_icon_manualwork_normal;
//设置 头部文字字体颜色
SobotUIConfig.sobot_titleTextColor = R.color.sobot_color;
//设置 右上角按钮图片
SobotUIConfig.sobot_moreBtnImgId = R.drawable.sobot_delete_hismsg_normal;
//设置 头部背景颜色
SobotUIConfig.sobot_titleBgColor = R.color.sobot_white;
//修改状态栏背景颜色
SobotUIConfig.sobot_statusbar_BgColor = R.color.sobot_white;
//设置 聊天界面底部整体布局背景颜色
SobotUIConfig.sobot_chat_bottom_bgColor = R.color.sobot_white;
//设置 聊天界面左边气泡背景颜色
SobotUIConfig.sobot_chat_left_bgColor = R.color.sobot_common_gray;
//设置 聊天界面左边气泡内文字字体颜色
SobotUIConfig.sobot_chat_left_textColor = R.color.sobot_common_red;
//设置 聊天界面左边气泡内链接文字字体颜色
SobotUIConfig.sobot_chat_left_link_textColor = R.color.sobot_color;
//设置 聊天界面右边气泡背景颜色
SobotUIConfig.sobot_chat_right_bgColor = R.color.sobot_common_red;
//设置 聊天界面右边气泡内链接文字字体颜色
SobotUIConfig.sobot_chat_right_link_textColor = R.color.sobot_color;
//设置 聊天界面右边气泡内文字字体颜色
SobotUIConfig.sobot_chat_right_textColor = R.color.sobot_white;
//聊天界面文件消息类型气泡背景颜色
SobotUIConfig.sobot_chat_file_bgColor = R.color.sobot_common_red;
//设置 toolbar右边第一个按钮是否显示,默认显示(更多 2.9.5新增)
SobotUIConfig.sobot_title_right_menu1_display = true;
//设置 toolbar右边第二个按钮是否显示,默认隐藏(评价)
SobotUIConfig.sobot_title_right_menu2_display = true;
//设置 toolbar右边第三个按钮是否显示,默认隐藏(电话 2.9.5新增)
SobotUIConfig.sobot_title_right_menu3_display = true;
//修改toolbar右边第三个按钮的图片(电话图标R.drawable.sobot_phone)
SobotUIConfig.sobot_title_right_menu3_bg = R.drawable.sobot_phone;
//设置toolbar右边第三个按钮电话需要拨打的号码
SobotUIConfig.sobot_title_right_menu3_call_num = "18510000000";

4.6.2 动态控制显示标题栏的头像和昵称

默认显示只显示头像

/**
 * 设置聊天界面头部标题栏的昵称模式
 *
 * @param context      上下文对象
 * @param title_type   titile的显示模式
 *    SobotChatTitleDisplayMode.Default:显示客服昵称(默认)
 *    SobotChatTitleDisplayMode.ShowFixedText:显示固定文本
 *    SobotChatTitleDisplayMode.ShowCompanyName:显示console设置的企业名称
 * @param custom_title 如果需要显示固定文本,需要传入此参数,其他模式可以不传
 * @param isShowTitle  是否显示标题
 */
ZCSobotApi.setChatTitleDisplayMode(getApplicationContext(),
        SobotChatTitleDisplayMode.ShowFixedText, "昵称", true);        
      
 
/**
 * 设置聊天界面标题栏的头像模式
 *
 * @param context           上下文对象
 * @param avatar_type       头像的显示模式
 * SobotChatAvatarDisplayMode.Default:显示客服头像(默认)
 * SobotChatAvatarDisplayMode.ShowFixedAvatar:显示固定头像
 * SobotChatAvatarDisplayMode.ShowCompanyAvatar:显示console设置的企业名称
 * @param custom_avatar_url 如果需要显示固定头像,需要传入此参数,其他模式可以不传
 * @param isShowAvatar      是否显示头像
 */
SobotApi.setChatAvatarDisplayMode(getApplicationContext(),SobotChatAvatarDisplayMode.Default, "https://sobot-test.oss-cn-beijing.aliyuncs.com/console/66a522ea3ef944a98af45bac09220861/userImage/20191024164346682.PNG", false);

4.6.3 控制横竖屏显示开关

//true 横屏 , false 竖屏; 默认 false 竖屏
ZCSobotApi.setSwitchMarkStatus(MarkConfig.LANDSCAPE_SCREEN,false);

4.6.4 横屏下是否打开刘海屏开关

//只有在横屏下才有用;竖屏已适配,可修改状态栏颜色
//true 打开 ,false 关闭; 默认 false 关闭
ZCSobotApi.setSwitchMarkStatus(MarkConfig.DISPLAY_INNOTCH, true);

4.6.5 ui样式通过同名资源替换

在客户app中colors.xml中添加同名颜色可覆盖智齿sdk中的颜色样式;也可通过在主项目中同一位置放一个同名的图片资源去替换智齿sdk界面中的图片;也可通过在主项目中同一位置放一个同名的文字资源去替换智齿sdk界面中的文字;

以下是常用的颜色配置,更多颜色、图片资源可到手动集成模块中下载源码包中去查找;

    <!-- 主题色 默认绿色 -->
    <color name="sobot_color">@color/sobot_common_green</color>

    <!-- 头部开始 -->
    <!-- 头部背景 -->
    <color name="sobot_color_title_bar_bg">@color/sobot_white</color>
    <!-- 状态栏的颜色设置 -->
    <color name="sobot_status_bar_color">@color/sobot_color_title_bar_bg</color>
    <!-- 头部中间昵称颜色 -->
    <color name="sobot_color_title_bar_title">@color/sobot_common_gray1</color>


    <!-- 中间 聊天列表 -->
    <!-- 聊天背景 -->
    <color name="sobot_color_chat_bg">@color/sobot_white</color>
    <!--文本消息气泡 左侧  黑色字 -->
    <color name="sobot_left_msg_text_color">@color/sobot_common_gray1</color>
    <!--文本消息气泡 右侧 白色字 -->
    <color name="sobot_right_msg_text_color">@color/sobot_white</color>
    <!-- 超链接颜色 左边 -->
    <color name="sobot_color_link">@color/sobot_common_blue</color>
    <!-- 超链接颜色 右边 -->
    <color name="sobot_color_rlink">@color/sobot_common_yellow</color>
    <!-- 消息之间间隔 时间 颜色 -->
    <color name="sobot_color_remind_time_color">@color/sobot_common_gray2</color>
    <!-- 聊天界面提醒背景颜色-->
    <color name="sobot_listview_remind">@color/sobot_common_bg</color>
    <!-- 聊天界面提醒的字体颜色-->
    <color name="sobot_listview_remind_text_color">@color/sobot_common_gray2</color>
    <!-- 消息提醒中的超链接颜色 -->
    <color name="sobot_color_link_remind">@color/sobot_common_green</color>
    <!-- 文件消息气泡颜色 -->
    <color name="sobot_chat_file_bgColor">@color/sobot_color</color>
    <!-- 消息气泡左侧背景默认颜色 -->
    <color name="sobot_chat_left_bgColor">@color/sobot_common_gray4</color>
    <!-- 消息气泡右侧背景默认颜色 -->
    <color name="sobot_chat_right_bgColor">@color/sobot_color</color>

    <!-- 底部 -->
    <!-- 点击加号后 面板背景 -->
    <color name="sobot_color_bottom_bg">@color/sobot_white</color>
    <!-- 消息输入框 文字 颜色 -->
    <color name="sobot_color_bottom_msg_input_color">@color/sobot_common_gray1</color>
    <!-- 点击加号后 面板 按钮字体颜色 -->
    <color name="sobot_color_bottom_btn_wz_color">@color/sobot_common_gray1</color>

    <!-- 留言相关 -->
    <!--留言 导航栏切换 文字下边 横线 颜色  -->
    <color name="sobot_postMsg_nav_indicator_color">@color/sobot_color</color>
    <!--留言 导航栏切换 选中 字体 颜色  -->
    <color name="sobot_postMsg_nav_sel_tx_color">@color/sobot_common_gray1</color>
    <!--留言 导航栏切换  未选中字体 颜色  -->
    <color name="sobot_postMsg_nav_tx_color">@color/sobot_common_gray2</color>
    <!--留言引导语 超链接颜色  -->
    <color name="sobot_postMsg_url_color">@color/sobot_common_blue</color>

4.7 其他配置

4.7.1 自定义自动应答语

sdk中的自动应答语可以在pc工作台进行动态设置,

如果pc工作台的设置满足不了您的需求,那么您可以使用以下接口在代码中进行本地配置

注意:本地设置本地优先,PC端不在起效

3.0.4之后
information.setAdmin_Hello_Word( "自定义客服欢迎语");//自定义客服欢迎语,默认为空 (如果传入,优先使用该字段)
information.setRobot_Hello_Word( "自定义机器人欢迎语");//自定义机器人欢迎语,默认为空 (如果传入,优先使用该字段)
information.setUser_Tip_Word( "自定义用户超时提示语");//自定义用户超时提示语,默认为空 (如果传入,优先使用该字段)
information.setAdmin_Tip_Word("自定义客服超时提示语");//自定义客服超时提示语,默认为空 (如果传入,优先使用该字段)
information.setAdmin_Offline_Title( " 自定义客服不在线的说辞");// 自定义客服不在线的说辞,默认为空 (如果传入,优先使用该字段)
information.setUser_Out_Word( " 自定义用户超时下线提示语");// 自定义用户超时下线提示语,默认为空 (如果传入,优先使用该字段)

3.0.3之前
//自定义客服欢迎语,默认为空 (如果传入,优先使用该字段)
ZCSobotApi.setAdmin_Hello_Word(getApplicationContext(), "自定义客服欢迎语");
//自定义机器人欢迎语,默认为空 (如果传入,优先使用该字段)
ZCSobotApi.setRobot_Hello_Word(getApplicationContext(), "自定义机器人欢迎语");
//自定义用户超时提示语,默认为空 (如果传入,优先使用该字段)
ZCSobotApi.setUser_Tip_Word(getApplicationContext(), "自定义用户超时提示语");
//自定义客服超时提示语,默认为空 (如果传入,优先使用该字段)
ZCSobotApi.setAdmin_Tip_Word(getApplicationContext(), "自定义客服超时提示语");
// 自定义客服不在线的说辞,默认为空 (如果传入,优先使用该字段)
ZCSobotApi.setAdmin_Offline_Title(getApplicationContext(), " 自定义客服不在线的说辞");
// 自定义用户超时下线提示语,默认为空 (如果传入,优先使用该字段)
ZCSobotApi.setUser_Out_Word(getApplicationContext(), " 自定义用户超时下线提示语");

4.7.2 自定义聊天记录显示时间范围

如想设置用户只能看到xx天内的聊天记录,那么可以调用以下方法进行设置:

/**
 * 控制显示历史聊天记录的时间范围,最多只能显示60天内的消息,单位(分钟)
 * 不传默认会显示所有的历史记录
 * @param time  查询时间(例:100-表示从现在起前100分钟的会话)
*/
SobotApi.setScope_time(context,time);

4.7.3 “+”号面板菜单扩展

客服聊天界面中点击“+”按钮后所出现的菜单面板,可以根据需求自行添加菜单,代码如下:

 private void customMenu(){
        //添加扩展菜单数据
        ArrayList<ChattingPanelUploadView.SobotPlusEntity> objects = new ArrayList<>();
        /**
         * SobotPlusEntity为自定义菜单实体类
         * @param iconResId 菜单图标 drawableId
         * @param name      菜单名称
         * @param action    菜单动作 当点击按钮时会将对应action返回给callback
         *                  以此作为依据,判断用户点击了哪个按钮
         */
        objects.add(new ChattingPanelUploadView.SobotPlusEntity(R.drawable.sobot_camera_picture_button_selector, "位置", "action_location"));
        objects.add(new ChattingPanelUploadView.SobotPlusEntity(R.drawable.sobot_camera_picture_button_selector, "签到", "action_sing_in"));
        objects.add(new ChattingPanelUploadView.SobotPlusEntity(R.drawable.sobot_camera_picture_button_selector, "收藏", "action_ollection"));
        //添加数据
        SobotUIConfig.pulsMenu.menus = objects;
        //设置回调
        SobotUIConfig.pulsMenu.sSobotPlusMenuListener = new SobotPlusMenuListener() {
            @Override
            public void onClick(View view, String action) {
                //action与实体类中的action对应
                ToastUtil.showToast(getApplicationContext(), "action:"+action);
            }
        };
    }

4.7.4 调起拨号界面接口

/**
* @param phone 是传入的电话号码 context 上下文对象
*/
CommonUtils.callUp(String phone, Context context)

4.7.5 智齿日志显示开关

/**
* true 显示日志信息 默认false不显示
*/
ZCSobotApi.setShowDebug(false);

//2.8.5以前版本方法
/日志显示开关 true 打开;false 关闭;默认关闭
LogUtils.isDebug = true;
//日志显示各级别开关 true 显示;false 不显示
LogUtils.allowI = true;
LogUtils.allowD = false;
LogUtils.allowE = false;
LogUtils.allowI = false;
LogUtils.allowV = false;
LogUtils.allowI = false;

4.7.6 多语言支持

方式一、 目前SDK支持英文和中文两种语言,语言会根据当前手机语言自行切换适配,如果当前手机语言不识别,默认使用中文。

如果需要新增语言包,把支持的语言文件放入对应的语言目录下即可,例如;英文路径:sobotsdk/src/main/res/values-en/strings.xml;

[说明:语言文件夹名称为values-的后面加上语言的标示,例如values-en;strings.xml名字不变]

方式二、

 /**
     * 2.8.6 新增,使用功能需和智齿开发沟通,服务端是否有对应的语言包
     * 指定使用国际化语言包
     * 如果本地没有指定的语言时,开始下载,下载前会检测存储权限,没有权限,直接返回,使用系统权限
     *
     * @param language     指定语言名字 例如  "zh-Hans":简体中文 "en":英文 "zh-Hant":繁体中文 "ru":俄语 "ko":韩语 "ja":日语 "ar":阿拉伯语  "th":泰国语 (2.9.0后添加)"pl":波兰语 "vi":越南语
     * @param isUse        是否使用指定语言
     * @param isReDownload 是否重新下载语言包 true 重新下载,false 不重新下载,默认false
     */
    ZCSobotApi.setInternationalLanguage(context,language, isUse, isReDownload);

服务端接口多语言指定(2.8.9版本之后支持)、

 /**
  * 支持语言: 简体中文:zh-Hans 繁体中文:zh-Hant 英语:en 西班牙语:es 葡萄牙语:pt
  */
    info.setLocale("your language");

特殊处理:
如果多语言时配置了人工评价或机器人评价标签,不支持多语言显示,可以通过如下属性隐藏显示(不影响评价功能使用,仅评价内容中缺失标签)

//  隐藏机器人时评价标签,默认不隐藏。 true 隐藏 ;false 显示
info.setHideRototEvaluationLabels(false);

//  隐藏人工时评价标签,默认不隐藏。 true 隐藏 ;false 显示
info.setHideManualEvaluationLabels(false);

4.7.7 时区适配

从2.8.9版本开始支持,默认系统北京东八区标准事件,如果需要根据手机时区动态适配,配置如下代码:

// false 默认使用东八区时区,true 自动适配手机系统设置的时区
ZCSobotApi.setSwitchMarkStatus(MarkConfig.AUTO_MATCH_TIMEZONE, false);

4.7.8 弹出权限用途提示框

从2.9.1版本开始支持,是否在申请权限前弹出权限用途提示框,配置如下代码:

// 是否在申请权限前弹出权限用途提示框,默认 false 不弹,true 弹
ZCSobotApi.setSwitchMarkStatus(MarkConfig.SHOW_PERMISSION_TIPS_POP, false);

4.7.9 智齿部分功能页面点击返回的监听(只记录不拦截),可自己添加逻辑(例如埋点)

ZCSobotApi.setFunctionClickListener(new SobotFunctionClickListener() {
            @Override
            public void onClickFunction(Context context, SobotFunctionType functionType) {
                //1:留言返回,2:会话页面返回,3:帮助中心返回,4:电商消息中心页面返回,5:电话联系客服
                LogUtils.i(functionType.toString());
            }
        });

4.7.10 安全校验

1.功能位置:在线渠道设置-渠道安全设置-安全秘钥设置-勾选“生效范围(APP)"。

2、开启生效范围APP“安全密钥”功能后,sdk渠道必须传partnerid参数。且对接时传参增加参数“sign”和“createTime”,其中,sign=“MD5(app_key+partnerid+密钥+createTime)”,createTime是unix毫秒时间戳;secret长度为32的字符串,createTime是毫秒级时间戳。

3、传入参数后智齿会对sign进行解密,验证传入的partnerid与sign中传入的partnerid是否一致,若一致则正常接入智齿系统,若不一致则接入失败。若客户没有传partnerid或sign,则视同非法用户,接入失败;若createTime与当前时间相差超过5分钟,则是为非法用户,接入失败。

4、APP“安全密钥”的功能开启和关闭,生效范围的设置是实时生效的。

  //启动智齿页面时传入下边两个参数
  //签名
  info.setSign(your sign);
  //毫秒级时间戳
  info.setCreateTime(crete_time);

5 Information类说明

id 相关:

属性名称数据类型说明备注
app_keyString必须设置,不设置初始化不成功。必填
choose_adminidString指定客服ID
tranReceptionistFlagint指定客服 转接类型0 可转入其他客服 1 必须转入指定客服
partneridString用户唯一标识对接用户可靠身份,不能写死,不建议为null,如果为空会以设备区别
robot_codeString对接机器人ID
robot_aliasString对接机器人ID对应的别名
faqIdString常见问题参数
signString签名md5加密(app_key+partnerid+secret+create_time)
createTimeString时间戳

电商版:

设置电商转人工溢出策略,以下属性与transferaction冲突,如果设置transferaction,将覆盖flow_type、flow_companyid、flow_groupid的配置。

属性名称数据类型说明备注
customer_codeString商户对接id (仅电商版适用,如果没有app_key,请提供此编码)

客服工作台显示:

属性名称数据类型说明备注
user_nickString昵称
user_nameString真实姓名
user_telsString用户电话
user_emailsString用户邮箱
qqStringqq
remarkString备注
faceString用户自定义头像
visit_titleString接入来源页面标题
visit_urlString接入的来源URL
paramsString用户资料
customer_fieldsString固定KEY的自定义字段
group_nameString技能组名称
groupidString技能组编号
isVipString指定客户是否为vip
vip_levelStringvip等级
user_labelString用户标签

会话页面相关:

属性名称数据类型说明备注
service_modeint自定义接入模式 1只有机器人,2.仅人工 3.智能客服-机器人优先 4智能客服-人工客服优先
custom_title_urlString聊天页顶部标题 自定义图像路径

其他:

属性名称数据类型说明备注
transferactionString转人工 指定技能组 溢出
summary_paramsString转人工自定义字段
multi_paramsString多轮会话 自定义字段
margsString热点引导问题的扩展字段
contentString自动发送商品订单信息内容
queue_firstboolean指定客户优先
isArtificialIntelligenceboolean是否智能转人工,默认false
artificialIntelligenceNumint如果是只能转人工,那么未知问题或者向导问题出现多少次时,显示转人工按钮。默认是一次
isUseVoiceboolean是否使用语音功能 默认true,可以使用语音功能
isUseRobotVoiceboolean是否使用机器人语音功能 默认false,机器人不可以使用语音功能 会转为文字
isShowLeftBackPopboolean左上角返回时是否弹出(您是否结束会话?) 默认false不弹
isShowSatisfactionboolean导航栏左侧点击返回时是否弹出满意度评价。默认false,弹出,false不弹满意度
isShowCloseSatisfactionboolean导航栏关闭按钮关闭时是否弹出满意度评价。默认false,弹出,false不弹满意度。
equipmentIdString设备编号
tranReceptionistFlagint转接类型(0-可转入其他客服,1-必须转入指定客服)
transferKeyWordHashSet转人工关键字
isCloseInquiryFormboolean是否关闭询前表单
leaveMsgGuideContentString留言引导文案
leaveMsgGroupIdString留言技能组
leaveCusFieldMapMap留言自定义字段
leaveParamsExtendsList对接型字段
leaveTemplateIdList留言模版id
hideMenuSatisfactionboolean隐藏评价
hideMenuLeaveboolean隐藏留言
hideMenuPictureboolean隐藏图片
hideMenuVedioboolean隐藏视频
hideMenuCameraboolean隐藏拍摄
hideMenuFileboolean隐藏文件
showLeaveDetailBackEvaluateboolean留言详情界面返回弹出服务评价窗口
canBackWithNotEvaluationboolean弹出评价窗口时,暂不评价按钮
hideRototEvaluationLabelsboolean是否隐藏机器人评价标签
hideManualEvaluationLabelsboolean是否隐藏人工评价标签
localeString服务端接口国际化语言
helpCenterTelString帮助中心添加呼叫电话号码
helpCenterTelTitleString帮助中心电话号码按钮字段
hideMenuManualLeaveboolean仅隐藏人工状态下的留言

6 智齿SDK功能使用体验Demo

点击下载 Demo 源码;

点击下载体验安装包;

点击查看Demo使用教程

7 常见问题链接

https://github.com/ZCSDK/FAQ_Android

8 更新说明

<<智齿客服安卓SDK更新说明>>