开发者文档 开发者文档
帮助中心 (opens new window)
帮助中心 (opens new window)
  • 渠道接入

    • Web 链接接入说明
    • Web-JS 接入说明
    • Android SDK
    • Android SDK V6
    • iOS SDK
      • iOS SDK V6
      • 微信小程序
      • 微信公众号
      • 企业微信
      • 微博私信
      • Flutter、DCloud、APICloud
      • 微信客服
      • CRM 对接方案
    • 在线客服 API
    • 在线统计 API
    • 在线机器人 API
    • 知识库 API
    • 电商平台 API
    • 客服组件SDK

    • 消息推送
    • 在线消息转发 API
    • 知识库V6 API
    • 在线机器人统计 API
    • 企业主动发送离线消息API
    • 规则引擎API
    • 大模型机器人API
    • 文本类产品 API
    • 渠道接入
    智齿科技
    2022-05-19
    目录

    iOS SDK

    # iOS SDK

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

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

    智齿客服 SDK 具有以下特性:

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

    图片

    相关限制及注意事项:

    1、iOS SDK 新版支持 iOS8 以上版本,同时支持 iPhone、iPad,支持竖屏和横屏。

    2、目前发布 XCode 版本为 XCode 11.3.1,建议使用新版开发。

    3、iOS 目前仅仅支持超链接标签,其他 Html 标签和属性均不识别。

    4、iOS 需要申请麦克风、相机、相册、推送权限,否则部分功能无法使用。

    # 文档介绍

    # ● 集成流程示意图

    图片

    # ● 文件说明

    SDK 包含(SobotKit.framework 和 SobotKit.bundle)、SobotDemo、和 Doc 相关说明文档。

    文件 描述
    SobotKit.framework 智齿SDK代码库
    SobotKit.bundle SDK资源库,包含图片文件、多语言文件、颜色
    ZCSobotApi.h 该文件提供接入功能(替换原有ZCSobot.h)
    ZCLibInitInfo.h 基础功能参数类(用户信息、接待模式、技能组等)
    ZCKitInfo.h 基础UI参数类(颜色、控件显/隐等)
    ZCUIBaseController UI界面父类,所有其它页面都继承此控制器
    ZCChatController 聊天界面
    SobotLocalizable.strings 国际化语言文件,默认根据系统语言自动匹配
    ZCLibClient.h 全局配置类,主要包含非UI相关的操作配置

    # 集成方式

    # ● 手动集成

    下载链接:iOS_SDK_V1 (opens new window)

    解压 [iOS_SDK] ,添加必要文件 SobotKit.framework 和 SobotKit.bundle 到你的工程里。智齿 iOS_SDK 的实现,依赖了一些系统的框架,在开发应用时需要在工程里加入这些框架。开发者首先点击工程右边的工程名,然后在工程名右边依次选择 TARGETS -> BuiLd Phases -> Link Binary With Libraries,展开 LinkBinary With Libraries后点击展开后下面的 + 来添加下面的依赖项:

    • AVFoundation.framework
    • AssetsLibrary.framework
    • AudioToolbox.framework
    • SystemConfiguration.framework
    • MobileCoreServices.framework
    • WebKit.framework
    # ● CocoaPods 集成

    在 podfile 中加入:

    // 普通版:
    pod 'SobotKit'
    // 电商版:
    pod 'SobotPlatform'
    
    1
    2
    3
    4

    如果搜索不到最新版本,请运行以下命令更新 CocoaPods 仓库

    pod repo update --verbose
    如果无法更新到最新版本,可以删除索引文件,重新尝试
    rm ~/Library/Caches/CocoaPods/search_index.json
    
    
    1
    2
    3
    4

    清除 pod 缓存:

    删除代码中的pod 文件夹,
    pod cache clean SobotKit
    再重新 pod install
    
    1
    2
    3

    # 功能说明

    # ● 域名设置

    域名说明:

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

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

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

    示例代码:

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

    // 2.8.5版本开始设置方式
    // 初始化是设置域名,如果不设置,默认SaaS域名
    [ZCSobotApi initSobotSDK:@"your appkey" host:@"" result:^(id  _Nonnull object) {
        
    }];
    
    
    
    //2.8.4及以前版本使用如下方式设置
    //if([ZCLibClient getZCLibClient].libInitInfo == nil){
    //    [ZCLibClient getZCLibClient].libInitInfo = [ZCLibInitInfo new];
    //}
    //[ZCLibClient getZCLibClient].libInitInfo.api_host = @"域名";
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # ● 获取 appkey

    登录 智齿科技管理平台 (opens new window) 获取,如图:

    图片

    # ● 初始化
    # 1. 普通版:

    初始化参数和调用方式:初始化信息和 UI 自定义分为 2 个模型,使用 ZCLibInitInfo 设置功能相关属性,ZCKitInfo 设置相关UI属性,一起传递给初始化方法,详情见 Demo 调用代码;

    主要调用代码如下:

    【注意:启动智齿 SDK 之前,必须调用初始化接口 initSobotSDK,否则将无法启动 SDK】

    接口:

    
    // 2.8.5版本设置方式
    // 初始化是设置域名,如果不设置,默认SaaS域名
    [ZCSobotApi initSobotSDK:@"your appkey" host:@"" result:(void (^)(id object))resultBlock;
    
    /**
     初始化智齿客服 2.7.2开始使用,默认使用SaaS域名
     @param appkey 智齿app_key(如果是电商版本,请填写自己公司的app_key)
     @param resultBlock 初始化结果回调
     */
    -(void)initSobotSDK:(NSString *) app_key result:(void (^)(id object))resultBlock;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    参数:

    参数 类型 必填 描述
    app_key NSString 是 app_key为必传,在支持后台->设置-> APP 中查看
    host NSString 否 默认为阿里云域名,如果是其它域名需要自己指定。
    resultBlock Block 初始化状态回调

    示例代码:

    #import <SobotKit/SobotKit.h>
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
          // Override point for customization after application launch.
        NSLog(@"%@",[ZCSobot getVersion]);
        // 错误日志收集(可选)
        // [ZCLibClient setZCLibUncaughtExceptionHandler];
        // 可选参数设置
        if([ZCLibClient getZCLibClient].libInitInfo == nil){
            [ZCLibClient getZCLibClient].libInitInfo = [ZCLibInitInfo new];
        }
        
        // 初始化,必须执行,并且必须在进入SDK之前调用
        [[ZCLibClient getZCLibClient] initSobotSDK:@"your app_key" result:^(id object) {
            NSLog(@"初始化完成%@",object);
        }];
        return YES;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 2. 电商版

    初始化参数和调用方式:初始化信息和UI自定义分为 2 个模型,使用 ZCLibInitInfo 设置功能相关属性,ZCKitInfo 设置相关UI属性,一起传递给初始化方法,详情见 Demo 调用代码。

    主要调用代码如下:

    【注意:启动智齿 SDK 之前,必须调用初始化接口 initSobotSDK,否则将无法启动 SDK,多次执行不会重复调用接口。】

    接口:

    示例代码:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
          // Override point for customization after application launch.
        NSLog(@"%@",[ZCSobot getVersion]);
        // 错误日志收集(可选)
        // [ZCLibClient setZCLibUncaughtExceptionHandler];
        // 可选参数设置
        if([ZCLibClient getZCLibClient].libInitInfo == nil){
            [ZCLibClient getZCLibClient].libInitInfo = [ZCLibInitInfo new];
        }    
        [ZCLibClient getZCLibClient].libInitInfo.platform_key = @"私钥"
        //customer_code 商户对接id (仅电商版适用,如果没有app_key则必须提供)
        //[ZCLibClient getZCLibClient].libInitInfo.customer_code = @"商户id"
        // 添加  平台标识 (电商版必填)
        [ZCLibClient getZCLibClient].platformUnionCode = @"您注册的平台ID";
        
        // 初始化 
        //如果需要,请设置域名,一定要在初始化之前设置,否则初始化接口会失败
        [ZCSobotApi initSobotSDK:@"your app_key" host:@"" result:^(id object) {
        }];
        return YES;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 3. 权限设置

    需要加入的权限

    <key>NSCameraUsageDescription</key>
      <string>发送图片需要访问相机</string>
    <key>NSLocalizedDescription</key>
      <string>使用推送服务</string>
    <key>NSMicrophoneUsageDescription</key>
      <string>发送语音需要访问麦克风</string>
    <key>NSPhotoLibraryUsageDescription</key>
      <string>发送图片需要访问相册</string>
    
    1
    2
    3
    4
    5
    6
    7
    8
    # ● 启动智齿页面
    # 1. 启动客服页面

    普通版本和电商版本启动方式一样.
    【注意:电商版本要重新指定商户 app_key,启动那个商户就重新设置那个商户的 app_key。】

    接口

    
    
    /// 启动聊天页面,简单处理
    /// @param info 自定义UI属性
    /// @param byController  启动的页面
    /// @param pageClick 页面当前状态
    + (void)openZCChat:(ZCKitInfo *) info
                with:(UIViewController *) byController
           pageBlock:(void (^)(id object,ZCPageBlockType type))pageClick;
        
     
    // messageLinkClick 链接点击事件
    +(void)setMessageLinkClick:(BOOL (^)(NSString * _Nonnull))messagelinkBlock
        
        
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    参数

    参数 类型 必填 描述
    info ZCKitInfo 是 初始化参数自定义设置
    byController UIViewController 是 执行跳转的vc
    delegate ZCChatControllerDelegate 否 聊天页面的代理,可以实现留言跳转到自定义页面
    pageClick Block 否 点击返回时的回调
    messagelinkBlock Block 否 点击消息连接回调,返回 YES 代表自己处理,返回 NO 代表不处理,可以设置为 nil,如果此处不为空会覆盖 setMessageLinkClick 的值,后设置的覆盖前一次设置的值

    示例代码:

    //设置必传参数,ZCLibInitInfo中的参数,都可以重新设置
    ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    // 设置用户id,标识用户的唯一依据,(一定不要写如123456、0、000000等固定值,同一个id的聊天记录会一样),如果不设置,默认会根据手机证书生成一个唯一标,最大支持300个字符,超过后会自动截取
    initInfo.partnerid = @"";
    
    // 如果是电商版本,需要重新指定商户app_key或商户编码customer_code
    //initInfo.app_key = @"";
    
    // 重新赋值
    [ZCLibClient getZCLibClient].libInitInfo = initInfo;
    
    //配置UI
    ZCKitInfo *uiInfo=[ZCKitInfo new];
    // 如设置导航条颜色
    uiInfo.topViewBgColor = [UIColor redColor];
    //[注意:初始化方法从2.7.0开始messageLinkClick带有Bool返回值,true自己处理,false表示不处理]
    // target  如果传入的参数不为nil 需要实现 -(void)openLeaveMsgClick:(NSString*)tipMsg;代理方法 留言跳转到用户自定义的留言页
    [ZCSobotApi openZCChat:uiInfo with:self target:nil pageBlock:^(id object, ZCPageBlockType type) {
                    // 点击返回
                    if(type==ZCPageBlockGoBack){
    //                    NSLog(@"点击了关闭按钮");
                    }
                    
                    // 页面UI初始化完成,可以获取UIView,自定义UI
                    if(type==ZCPageBlockLoadFinish){
    //                    NSLog(@"页面加载完成");
                    }
        } messageLinkClick:^(NSString *link) { 
            NSLog(@"%@",link);
    //        当收到link = sobot://sendlocation 调用智齿接口发送位置信息
    //        当收到link = sobot://openlocation?latitude=xx&longitude=xxx&address=xxx 可根据自己情况处理相关业务
            if( [link hasPrefix:@"sobot://sendlocation"]){
                //发送坐标点
                NSString *fullPath = GetDocumentsFilePath(fname);
                [imageData writeToFile:fullPath atomically:YES];
                // 发送位置信息
                [ZCSobot sendLocation:@{
                                        @"lat":@"40.001693",
                                        @"lng":@"116.353276",
                                        @"localLabel":@"北京市海淀区学清路38号金码大厦A座23层金码大酒店",
                                        @"localName":@"云景四季餐厅",
                                        @"file":fullPath}];
                return YES;
            }else if([link hasPrefix:@"sobot://openlocation"]){
                // 解析经度、纬度、地址:latitude=xx&longitude=xxx&address=xxx
                // 跳转到地图的位置
                NSLog(link);
                // 测试打开地图 高德网页版            
                NSString * urlString = @"";
                urlString = [[NSString stringWithFormat:@"http://uri.amap.com/marker?position=%f,%f&name=%@&coordinate=gaode&src=%@&callnative=0",@116.353276,@40.001693,@"北京市海淀区学清路38号金码大厦A座23层金码大酒店",@"智齿SDK"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                [[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlString]];
               return YES;
            }
            return NO;
     }];
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    # 2. 启动商家列表(电商版)

    【注意:启动商家列表(仅电商版本支持)】

    接口

    
    // 2.8.5版本使用
    + (void)openZCChatListView:(ZCKitInfo *)info with:(UIViewController *)byController onItemClick:(void (^)(ZCUIChatListController *object,ZCPlatformInfo *info))itemClickBlock;
    
    
    1
    2
    3
    4

    参数

    参数 类型 必填 描述
    info ZCKitInfo 是 设置UI 相关自定义参数
    byController UIViewController 是 执行跳转的vc
    delegate ZCChatControllerDelegate 否 聊天页面的代理,可以实现留言跳转到自定义页面
    pageClick Block 否 点击返回时的回调
    itemClickBlock Block 否

    示例代码:

    
    // 新方法
    [ZCSobotApi openZCChatListView:info with:byController onItemClick:itemClickBlock];
        
    
    
    // 直接启动商家列表页面,2.8.4以前方式,建议使用新方法   
    [ZCSobot startZCChatListView:uiInfo with:self onItemClick:nil];
    
    // 启动商家列表,但是点击具体某一个商家可能需要重新配置参数,自己处理跳转情况,2.8.4以前方式,建议使用新方法
    [ZCSobotApi openZCChatListView:uiInfo with:self onItemClick:^(ZCUIChatListController *object, ZCPlatformInfo *info) {
       // 商家某一条点击事件触发,自行启动智齿聊天页面,可以修改必传参数,ZCLibInitInfo中的参数,都可以重新设置
       [ZCLibClient getZCLibClient].libInitInfo.app_key = info.app_key;
       [ZCSobotApi openZCChat:[ZCGuideData getZCGuideData].kitInfo with:self pageBlock:^(id  _Nonnull object, ZCPageBlockType type) {
                    
       }];
    }];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 3. 启动客户服务中心
    
    ZCKitInfo *kitInfo = [ZCKitInfo new];
    //kitInfo.helpCenterTel = @"40012345678";
    //kitInfo.helpCenterTelTitle = @"400-客服";
    
    // 打开帮助中心页面
    + (void)openZCServiceCenter:(ZCKitInfo *) info
                             with:(UIViewController *) byController
                      onItemClick:(void (^)(ZCUIBaseController *object))itemClickBlock;
        
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    效果如图: 图片

    # ● 结束会话
    
         
    /// 关闭通道,清理内存,退出智齿客户 移除推送
    /// @param unRegisterToken YES 关闭push;NO 离线用户,但是可以收到push推送
    /// @param reason 离线原因(请认真填写,不做显示仅做后期异常离线分析)
    + (void)outCurrentUser:(BOOL) unRegisterToken reason:(NSString *) reason;
    
    
    1
    2
    3
    4
    5
    6
    7
    # ● 机器人客服
    # 1. 对接指定机器人

    在后台获取机器人编号:

    图片

    在 SDK 代码中配置:

    ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    libInitInfo.robotid =  @"机器人ID";
    
    // 不设置指定无效,注意如果指定了别名,需要把robotid设置为空,否则在别名不正确的时候,会使用上次的默认值
    libInitInfo.robot_alias =  @"机器人别名";
    
    
    1
    2
    3
    4
    5
    6

    注意:如果不设置,取默认。

    # 2. 自定义接入模式

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

    ZCKitInfo *uiInfo=[ZCKitInfo new];
    // 是否开启语音功能 默认开启
      kitInfo.isOpenRecord = @"YES";
    // 是否开启机器人语音,(付费,否则语音无法识别)
      kitInfo.isOpenRobotVoice = @"YES";
    // 是否显示转人工按钮
      kitInfo.isShowTansfer = @"YES";
    // 机器人未知回复次数
      kitInfo.unWordsCount = @"1";
    // 是否开启智能转人工 (如输入“转人工”,直接转接人工),
    需要隐藏转人工按钮,请参见isShowTansfer和unWordsCount属性
      kitInfo.isOpenActiveUser = @"YES";
    // 智能转人工关键字,关键字作为key{@"转人工",@"1",@"R":@"1"}
      kitInfo.activeKeywords = @{@"转人工":@"",@"R":@"",@"r":@""};
    //自定义接待模式 
    注意:接待模式本地设置后本地优先,
    PC端设置接待模式不再起效,建议使用PC端的设置
    PC端的设置
    0:跟随系统设置(默认) 
    1:只有机器人,
    2:仅人工 
    3:智能客服-机器人优先 
    4:智能客服-人工客
    libInitInfo.service_mode = 4;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 3. 自定义转人工事件

    自定义转人工事件方法:

    -(void)turnServiceWithGroupId:(NSString *)groupId  Obj:(id)obj Msg:(NSString*)msg KitInfo:(ZCKitInfo*)uiInfo ZCTurnType:(NSInteger)turnType Keyword:(NSString*)keyword KeywordId:(NSString*)keywordId
    
    1

    参数说明:

    groupId 传入技能组id

    obj   转人工参数

    msg   转人工信息

    uiInfo   配置商品信息和自动发送参数

    turnType  转人工事件类型(按钮触发,关键字触发等)

    keyword 关键字

    keywordId 关键字id

    【注意:如果实现该方法,SDK 中转人工事件将交由外部控制处理,您可以跳转到自己设计的技能组页面,或者切换商品信息等,SDK 中不会再执行转人工操作,需要自己调用转人工加接口 turnServiceWithGroupId:实现具体的转人工操作。】

    自定义转人工回调事件:

    拦截 SDK 转人工事件 用于跳转到自己的 APP 页面动态处理转人工 配置技能组 id 商品信息等参数

    @property (nonatomic,strong)  TurnServiceBlock    turnServiceBlock;
    
    1

    示例代码:

    [ZCLibClient getZCLibClient].turnServiceBlock = ^(id obj,NSString *msg,NSInteger turnType, NSString *keyword ,NSString *keywordId) {
                // 自定义商品信息
                //ZCProductInfo *productInfo = [ZCProductInfo new];
                //productInfo.thumbUrl = @"商品图片URL";
                //productInfo.title = @"商品标题";
                //productInfo.desc = @"摘要";
                //productInfo.label = @"标签";
                //productInfo.link = @"http://www.sobot.com";
                //uiInfo.productInfo = productInfo;
                //uiInfo.isSendInfoCard = YES;// 转人工工成功后是否自动发送该商品卡片信息
            [[ZCLibClient getZCLibClient] turnServiceWithGroupId:@"技能组id" Obj:obj Msg:msg KitInfo:uiInfo ZCTurnType:turnType Keyword:keyword KeywordId:keywordId];
        };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 4. 设置转人工溢出

    SDK 中可以设置转人工指定技能组溢出

    示例代码:

    /**
     *  转人工 指定技能组 溢出
     *
     参数说明
    
        actionType 执行动作类型:
            to_group 指定技能组;
            to_service 指定客服。
        deciId 指定技能组或客服id
        optionId 溢出标记
            1:溢出;指定客服时
            2:不溢出;指定客服时
            3:溢出;指定技能组时
            4:不溢出;指定技能组时
        spillId 溢出条件
            1:客服不在线;指定客服时
            2:客服忙碌;指定客服时
            3:智能判断;指定客服时
            4:技能组无客服在线;指定客服组时
            5:技能组所有客服忙碌;指定客服组时
            6:技能组不上班;指定客服组时
            7:智能判断;指定客服组时
     
     [{"actionType":"to_group","optionId":"3","deciId":"162bb6bb038d4a9ea018241a30694064","spillId":"7"},{"actionType":"to_group","optionId":"4","deciId":"a457f4dfe92842f8a11d1616c1c58dc1"}]
      actionType:执行动作类型:
      to_group:转接指定技能组
      optionId:是否溢出  指定技能组时:3:溢出,4:不溢出。
      deciId:指定的技能组。
      spillId:溢出条件  指定客服组时:4:技能组无客服在线,5:技能组所有客服忙碌,6:技能组不上班,7:智能判断
      数组中最多设置4组,依次溢出
     */
     
     ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
        initInfo.transferaction = @[@{@"actionType":@"to_group",@"optionId":@"3",@"deciId":@"a890849f552b4b69b4a027db4e9a1880",@"spillId":@"4"},@{@"actionType":@"to_group",@"optionId":@"3",@"deciId":@"5600aa6786f34629a7484819b8132c3a",@"spillId":@"4"}];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    # 5. 隐藏“+”号菜单栏中的按钮
    在 ZCKitInfo 中传入相关字段
    eg:
    ZCKitInfo *kitInfo=[ZCKitInfo new]; 
    //  聊天页面底部加号中功能:隐藏评价,默认NO(不隐藏)
    kitInfo.hideMenuSatisfaction = YES;
    // 聊天页面底部加号中功能:隐藏留言,默认NO(不隐藏)
    kitInfo.hideMenuLeave = YES;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    # 6. 指定机器人引导语

    不同的场景可以设置不同的机器人引导语

    在 ZCKitInfo 中传入相关字段
    eg:
    
    ZCLibInitInfo *_libInitInfo [ZCLibClient getZCLibClient].libInitInfo;
    _libInitInfo.faqId = 24;
    
    
    1
    2
    3
    4
    5
    6
    # ● 人工客服
    # 1. 对接指定技能组

    在后台获取技能组编号:

    图片

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

    ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    initInfo.groupid =  @"技能组ID";
    
    1
    2

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

    # 2. 对接指定客服

    在后台获取指定客服 id:

    图片

    图片

    在 SDK 代码中设置:

    ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    libInitInfo.choose_adminid =  @"客服ID";
    libInitInfo.tran_flag =  @"0";
    
    1
    2
    3

    【注意:choose_adminid :指定对接的客服,如果不设置,取默认,tran_flag :设置指定客服之后是否必须转入指定客服 ,0. 可转入其他客服,1. 必须转入指定客服,如果设置为1 ,当指定的客服不在线,不能再转接到其他客服。】

    # 3. 设置用户自定义资料和自定义字段

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

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

    图片

    固定 Key 的自定义字段

    // 设置用户自定义字段
    - (void)customUserInformation:(ZCLibInitInfo*)libInitInfo{
      libInitInfo.customer_fields = @{@"customField22":@"我是自定义的分校",
                                  @"userSex":@"保密",
                                  @"weixin":@"微信号",
                                  @"weibo":@"微博账号",
                                  @"birthday":@"2017-06-08"};
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    用户自定义资料,自定义 Key:

    //自定义用户料
    libInitInfo.params = @{@"昵称":@"我是智齿小客服"};
    
    
    1
    2
    3

    效果图如下: 图片

    # 4. 设置转接成功后自动发消息
    // 自动发送信息
    ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    // 0 不发 1 给机器人发送 2 给人工发送  3 机器人和人工都发送
    initInfo.good_msg_type = 1; 
    //如果是非文本,传本地路径
    initInfo.content = @"123";
    // 内容类型, 0, //文本 1, //图片 12, // 文件 // 视频
    initInfo.auto_send_msgtype = 0;
    
    
    /// 发送消息给人工
    /// @param textMsg  消息内如,如果是视频、图片、音频、文件时,请传本地图片路径
    /// @param msgType  0, //文本   1, //图片  12, // 文件   23, // 视频
    /// @param ResultBlock 发送结果 code == 0表示已发送
    + (void)sendMessageToUser:(NSString *)textMsg type:(NSInteger ) msgType resultBlock:(nonnull void (^)(NSString *, int code))ResultBlock;
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 5. 设置指定客户排队优先接入

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

    // 同PC端 设置-在线客服分配-排队优先设置-指定客户优先   开启传1 默认不设置
    @property(nonatomic,assign) int queue_first;
    
    1
    2
    # 6. 设置服务总结自定义字段

    图片

    图片

     initInfo.summary_params = @{@"customField15615315349481":@"字段value1",@"customField15615315349482":@"字段value2"};
    
    1
    # 7. 设置多轮会话接口参数

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

    initInfo.multi_params = @{@"customField15619769556831":@"显示xxyyyzzz1032"};
    
    1
    # 8. 商品卡片

    商品的咨询信息并支持直接发送消息卡片仅人工模式下支持,在 ZCKitInfo.h 中配置如下信息,启动页面时传入即可:

    
    
    /**
     *   商品卡片信息是否自动发送(转人工成功时,自动发送商品卡片信息)
     *   默认关闭  开启后默认一次有效会话内只发送一次
     **/
    @property (nonatomic,assign) BOOL isSendInfoCard;
    
    /*
       是否每次都自动发送商品信息 (转人工成功时,自动发送商品卡片信息)
       需要先开启 isSendInfoCard = YES
      (3.0.3版本新增)
     */
    @property (nonatomic,assign) BOOL isEveryTimeSendCard;
    
    // 商品的自定义类 ZCProductInfo  如果选择添加商品信息,请添加以下信息,其中标题"title"和页面地址url"link"是必填字段,如果没有添加页面中是不会显示的。
    ZCProductInfo *productInfo = [ZCProductInfo new];
    //thumbUrl 缩略图地址
    productInfo.thumbUrl = @"缩略图的Url";
    //  title 标题 (必填)
    productInfo.title = @"标题";
    //  desc 摘要
    productInfo.desc = @"摘要";
    //  label 标签
    productInfo.label = @"标签";
    //  页面地址url(必填) 
    productInfo.link = @"发送商品链接";
    kitInfo.productInfo = productInfo;
    
    
    
    //手动调用直接发送商品卡片
    ZCProductInfo *productInfo = [ZCProductInfo new];
    productInfo.thumbUrl = @"缩略图地址";
    productInfo.title = @"标题";
    productInfo.desc = @"摘要";
    productInfo.label = @"标签";
    productInfo.link = @"页面链接";
    [ZCSobotApi sendProductInfo:productInfo resultBlock:nil];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39

    效果图: 图片

    # 9. 订单卡片

    SDK 中可以发送自定义订单信息,仅人工模式下支持,如有此需求,可以使用如下方法进行设置:

    配置按钮:

    ZCKitInfo *kitInfo=[ZCKitInfo new];
    NSMutableArray *arr = [[NSMutableArray alloc] init];
    ZCLibCusMenu *menu1 = [[ZCLibCusMenu alloc] init];
    menu1.title = [NSString stringWithFormat:@"订单"];
    menu1.url = [NSString stringWithFormat:@"sobot://sendOrderMsg"];;
    menu1.imgName = @"zcicon_sendpictures";
    [arr addObject:menu1];
    kitInfo.cusMoreArray = arr;
    
    1
    2
    3
    4
    5
    6
    7
    8

    模拟自定义“+”点击发送事件:
    返回 YES 表示事件拦截,交由用户手动处理 返回 NO 表示事件不拦截 由智齿SDK内部处理

    
        [ZCSobotApi setMessageLinkClick:^BOOL(NSString *linkUrl) {
            if ([linkUrl hasPrefix:@"sobot://sendOrderMsg"]){
                    ZCOrderGoodsModel *model = [ZCOrderGoodsModel new];
                    model.orderStatus = 0; // 新增0为自定义状态,显示statusCustom内容
                    model.statusCustom = @"自定义状态";
                    model.createTime = [NSString stringWithFormat:@"%.0f",[[NSDate date] timeIntervalSince1970]*1000];
                    model.goodsCount = @"3";
                    model.orderUrl  = @"https://www.sobot.com";
                    model.orderCode = @"1000234242342345";
                    model.goods =@[@{@"name":@"商品名称",@"pictureUrl":@"http://pic25.nipic.com/20121112/9252150_150552938000_2.jpg"},@{@"name":@"商品名称",@"pictureUrl":@"http://pic31.nipic.com/20130801/11604791_100539834000_2.jpg"}];
                    
                    // 单位是分,显示时会除以100,比如48.90
                    model.totalFee = @"4890";
                    [ZCSobotApi sendOrderGoodsInfo:model resultBlock:nil];
                    
                    return YES;
                }
            
            return NO;
        }];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    ZCOrderGoodsModel 类说明:

    /**
    发送订单消息字段:
     订单状态: orderStatus
     订单编号: orderCode
     订单创建时间: createTime
     商品图片链接: goodsPicturesUrls
     订单链接: orderUrl  ,
     商品描述: goodsDesc
     商品件数: goodsCount
     总金额: totalFee,单位为分,显示时会默认格式化为元,例如,传入4890,显示效果为48.90元
    */
    /*
    自定义:0,显示statusCustom的内容
    待付款: 1,
    待发货: 2,
    运输中: 3,
    派送中: 4,
    已完成: 5,
    待评价: 6,
    已取消: 7,
    其它: 不在编码中的
     */
    @property (nonatomic,assign) int orderStatus;
    
    // 自定义订单状态显示内容,仅当orderStatus=0时生效
    @property (nonatomic,strong) NSString *statusCustom;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    效果图: 图片

    # 10. 查看商户客服是否正在和用户聊天 (仅电商版可用)
    /**
     *
     *   获取对应商户客服是否正在和用户聊天(仅电商版使用)
     *   appkey:商户id   uid: ZCPlatformInfo 类中的uid 
     **/
    +(BOOL)getPlatformIsArtificialWithAppkey:(NSString *)appkey Uid:(NSString*)uid;
    
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
     ZCPlatformInfo *info = [_listArray objectAtIndex:indexPath.row];
    [ZCSobotApi getPlatformIsArtificialWithAppkey:info.appkey Uid:info.uid];
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 11. 设置 vip 等级和用户标签
    /**
     *
     *  指定客户是否为vip,0:普通 1:vip
     *  同PC端 设置-在线客服分配-排队优先设置-VIP客户排队优先   开启传1 默认不设置
     *  开启后 指定客户发起咨询时,如果出现排队,系统将优先接入。
     **/
    @property (nonatomic,copy) NSString *isVip;
    
    
    /**
     *
     *  指定客户的vip等级,传入等级
     *  同PC端 设置-自定义字段-VIP等级,拿到等级对应的ID或者名称
     **/
    @property (nonatomic,copy) NSString *vip_level;
    
    
    /**
     *用户标签,多个字段用逗号分隔;
    用户标签可在智齿管理端(系统设置>自定义字段>客户字段)中编辑,拿到用户标签对应的ID或者名称
     **/
    @property (nonatomic,copy) NSString *user_label;
    
    在 ZCLibInitInfo 中传入相关字段
    eg:
    ZCLibInitInfo *libInitInfo = [ZCLibClient getZCLibClient].libInitInfo;
    //通过名称设置vip等级
    libInitInfo.vip_level = @"尊贵";
    //可添加多个用户标签,多个标签ID或者名称之间用,分割
    libInitInfo.user_label = @"明星,记者";
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # 12. 转人工后隐藏“+”号菜单栏中的按钮
    在 ZCKitInfo 中传入相关字段
    eg:
    ZCKitInfo *kitInfo=[ZCKitInfo new]; 
    //  聊天页面底部加号中功能:隐藏评价,默认NO(不隐藏)
    kitInfo.hideMenuSatisfaction = YES;
    // 聊天页面底部加号中功能:隐藏留言(机器人和人工),默认NO(不隐藏)
    kitInfo.hideMenuLeave = YES;
    // 聊天页面底部加号中功能:隐藏留言(仅人工),默认NO(不隐藏)
    kitInfo.hideMenuManualLeave = YES;
    // 聊天页面底部加号中功能:隐藏图片,默认NO(不隐藏)
    kitInfo.hideMenuPicture = YES;
    // 隐藏拍摄,默认NO(不隐藏)
    kitInfo.hideMenuCamera = YES;
    // 隐藏文件,默认NO(不隐藏)
    kitInfo.hideMenuFile = YES;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # ● 留言工单相关
    # 1. 工作台设置留言界面

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

    图片

    在SDK中隐藏留言功能

    
    // 聊天页面底部加号中功能:隐藏留言(机器人和人工),默认NO(不隐藏)
    kitInfo.hideMenuLeave = YES;
    // 聊天页面底部加号中功能:隐藏留言(仅人工),默认NO(不隐藏)
    kitInfo.hideMenuManualLeave = YES;
    
    
    1
    2
    3
    4
    5
    6
    # 2. 留言页面用户信息自定义配置

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

    图片

    # 3. 跳转到留言页面

    可以直接跳转到留言页面:

    
    ZCKitInfo *kitInfo = [[ZCKitInfo alloc] init];
    kitInfo.leaveContentPlaceholder = @"请输入内容";
    kitInfo.leaveMsgGuideContent = @"我是自定义引导语";
    NSMutableArray *customField = [[NSMutableArray alloc] init];
    [customField addObject:@{@"id" : @"510fb45d6e9d4a9c99a7c24861d584d7", @"value" : @"ca55f29ed5dd4879bdf3ab213fec3381"}];
    [customField addObject:@{@"id" : @"6ee93dd945ac47fcac1a80bf03fd23fd", @"value" : @"6ee93dd945ac47fcac1a80bf03fd23fd"}];
    [customField addObject:@{@"id" : @"abd0229cd5a64798b74516b3f09bbd7e", @"value" : @"abd0229cd5a64798b74516b3f09bbd7e"}];
                            
    kitInfo.leaveCusFieldArray = [customField copy];
    // 进入留言转工单,需要对接型字段
    kitInfo.leaveParamsExtends = @[@{@"id":@"d93847a05710483893fd2d05e16a2b82",@"params":@"msgid",@"value":@"数据1"}];
    kitInfo.leaveMsgGroupId = @"540a910a760f4387918b0fa7302a0eca";
    [ZCSobotApi openLeanve:0 kitinfo:kitInfo with:self onItemClick:^(NSString *msg, int code) {
                                
         }];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    其中参数:

    /**
     自定义留言内容预置文案,如果需要国际化,可自行在bundle文件中,以文案为key,翻译即可
     例如:"请输入内容"="Please enter content";
     */
    @property (nonatomic,strong) NSString *leaveContentPlaceholder;
    
    /**
     自定义留言引导语,如果需要国际化,可自行在bundle文件中,以文案为key,翻译即可
     例如:"无法解答你的问题,你可以留言"="Please leave";
     */
    @property (nonatomic,strong) NSString *leaveMsgGuideContent;
    
    /**
     *  直接进入留言自定义字段
     *  数组,可以以传递多个
     *  id: 自定义字段的id
     *  value: 想传递的数据
     *  @{@"id":@"",@"value":@"我是数据"}
     **/
    @property (nonatomic,strong) NSMutableArray * leaveCusFieldArray;
    
    
    /**
     *  进入留言转工单,需要对接型字段
     *  数组,可以以传递多个
     *  id: 对接字段系统自动生成的id
     *  value: 想传递的数据
     *  params: 显示的字段ID,例如city、address,与id对应
     *  @{@"id":@"textfield12",@"value":@"我是数据",@"params":@"city"}
     **/
    @property (nonatomic,strong) NSMutableArray * leaveParamsExtends;
    
    
    /**
     留言技能组 id
     获取:设置 —>工单技能组设置
    */
    @property (nonatomic,strong) NSString * leaveMsgGroupId;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    # 4. 留言页面事件拦截

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

    在启动VC 服从ZCChatControllerDelegate协议 
      在启动方法中 target(代理)传入启动VC 
    [ZCSobotApi openZCChat:uiInfo with:self target:vc pageBlock:^(ZCChatController *object, ZCPageBlockType type) {
     } messageLinkClick:^(NSString *link) {
    }];
    实现代理方法:
    -(void)openLeaveMsgClick:(NSString*)tipMsg{
    // 点击留言的代理事件
        NSLog(@"tipMsg ==%@",tipMsg);
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 5. 工单回复按钮

    可通过参数配置是否显示留言按钮:

    /**
     *  留言完成后,是否 显示 回复按钮
     *  默认为 yes  , 可以回复
     */
    @property (nonatomic,assign) BOOL leaveCompleteCanReply;
    
    1
    2
    3
    4
    5
    # 6. 获取最新留言回复
    /// 获取最新回复
    /// @param partnerid  用户id
    /// @param ResultBlock code=1返回成功,
    /// dict :data:items:[{(ticketId(工单id),ticketTitle(工单标题),replyContent(回复内容),replyTime(回复时间),customerId(客户id),serviceNick(客服昵称)}] 
    + (void)getLastLeaveReplyMessage:(NSString *) partnerid resultBlock:(void (^)(NSDictionary *dict,NSMutableArray *arr,int code))ResultBlock;
    
    示例代码
     [ZCSobotApi getLastLeaveReplyMessage:[ZCLibClient getZCLibClient].libInitInfo.partnerid resultBlock:^(NSDictionary * _Nonnull dict, NSMutableArray * _Nonnull arr, int code) {
                                if(arr!=nil && arr.count > 0){
                                    ZCRecordListModel *model = [arr firstObject];
                                    
                                    // 通知参数
                                    NSString *identifier = [NSString stringWithFormat:@"leavereply.www.sobot.com%f",[[NSDate date] timeIntervalSinceNow]];
                                    NSDictionary *userInfo = @{@"msgfrom":@"sobot",@"pushType":identifier,
                                                 @"ticketId":model.ticketId
                                    };
                                    
                                    
                                    NSTimeInterval time = [model.replyTime doubleValue]/1000; // 传入的时间戳str如果是精确到毫秒的记得要/1000
                                    NSDate *detailDate = [NSDate dateWithTimeIntervalSince1970:time];
                                    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; // 实例化一个NSDateFormatter对象
                                    // 设定时间格式,这里可以设置成自己需要的格式
                                    [dateFormatter setDateFormat:@"MM-dd HH:mm"];
                                    NSString *currentDateStr = [dateFormatter stringFromDate:detailDate];
                                    
                                    NSString *replyContent = model.replyContent;
                                    replyContent = [replyContent stringByReplacingOccurrencesOfString:@"<p>" withString:@""];
                                    replyContent = [replyContent stringByReplacingOccurrencesOfString:@"</p>" withString:@""];
                                    replyContent = [replyContent stringByReplacingOccurrencesOfString:@"<br/>" withString:@""];
                                    NSString *replyStr = [NSString stringWithFormat:@"%@\n %@ \n %@",model.ticketTitle,currentDateStr,replyContent];
                                    
                                    
                                    
                                    [ZCSobotApi postLocalNotification:replyStr dict:userInfo];
                                }
                            }];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # 7. 添加留言评价主动提醒开关
    在 ZCKitInfo 中传入相关字段
    eg:
    ZCKitInfo *kitInfo=[ZCKitInfo new]; 
    // 已完成留言详情界面:返回时是否弹出服务评价窗口(只会第一次返回弹,下次返回不会再弹)
    // 默认为 NO   , 不主动提醒
    kitInfo.showLeaveDetailBackEvaluate = YES;
    
    
    1
    2
    3
    4
    5
    6
    7
    # 8. 添加留言扩展参数

    在 ZCKitInfo 中传入相关字段 ,字段说明;

    /**
     *  直接进入留言自定义字段
     *  数组,可以以传递多个
     *  id: 自定义字段的id
     *  value: 想传递的数据
     *  @{@"id":@"",@"value":@"我是数据"}
     **/
    @property (nonatomic,strong) NSMutableArray * leaveCusFieldArray;
    
    
    
    /**
     *  直接进入留言对接字段
     *  数组,可以以传递多个
     *  id: 对接字段系统自动生成的id
     *  value: 想传递的数据
     *  params: 显示的字段ID,例如city、address,与id对应
     *  @{@"id":@"textfield12",@"value":@"我是数据",@"params":@"city"}
     **/
    @property (nonatomic,strong) NSMutableArray * leaveParamsExtends;
    
    
    /**
     留言技能组 id
     获取:设置 —>工单技能组设置
    */
    @property (nonatomic,strong) NSString * leaveMsgGroupId;
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # ● 评价
    # 1. 设置评价界面

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

    图片

    # 2. 评价的相关配置
    /**
     *
     *   导航栏右上角 是否显示 评价按钮  默认不显示
     *
     **/
    @property (nonatomic,assign) BOOL isShowEvaluation;
    
    /**
     *导航栏右上角 是否显示 关闭按钮 默认不显示,关闭按钮,点击后无法监听后台消息
     **/
    @property (nonatomic,assign) BOOL isShowClose;
    
    /**
     *
     *   针对关闭按钮,单独设置是否显示评价界面,默认不显示
     *
     **/
    @property (nonatomic,assign) BOOL isShowCloseSatisfaction;
    /**
     *  评价完人工是否关闭会话(人工满意度评价后释放会话)
     *  默认为NO 未开启
     *
     */
    @property (nonatomic,assign) BOOL      isCloseAfterEvaluation;
    /**
     *  返回时是否开启满意度评价
     *  默认为NO 未开启
     *
     */
    @property (nonatomic,assign) BOOL      isOpenEvaluation;
    
    
    /**
     *  返回时开启满意度评价,显示暂不评价
     *  默认为NO 未开启
     */
    @property (nonatomic,assign) BOOL      canBackWithNotEvaluation;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38

    参考效果:

    图片图片

    # 3. 返回时要求用户评价,关闭时要求用户评价
    //返回或关闭时是否开启满意度评价 默认为NO 未开启
    kitInfo.isOpenEvaluation = YES;
    //评价完人工是否关闭会话(人工满意度评价后释放会话) 默认为NO 未开启
    kitInfo.isCloseAfterEvaluation = YES;
    
    // 是否有返回提示,默认为 NO,设置为YES,会提醒“是否结束会话”
    kitInfo.isShowReturnTips = YES;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    # 4. 配置用户提交人工满意度评价后释放会话
    
    /**
     *  评价完人工是否关闭会话(人工满意度评价后释放会话)
     *  默认为NO 未开启
     *
     */
    @property (nonatomic,assign) BOOL      isCloseAfterEvaluation;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    # 5 左上角返回和右上角关闭时,人工满意度评价弹窗界面配置是否显示暂不评价按钮
    
    /**
     *  返回时开启满意度评价,显示暂不评价
     *  默认为NO 未开启
     */
    @property (nonatomic,assign) BOOL      canBackWithNotEvaluation;
    
    
    1
    2
    3
    4
    5
    6
    7
    # ● 消息相关
    # 1. 消息推送

    注:如果你需要 SDK 推送的功能请参考以下消息通知、注册推送的相关代码,如果您的项目不需要请略过。

    1、在生成 appkey 的时候,上传推送证书(.p12 格式),导出证书一定要有密码;

    2、推送只有与人工会话才会有效,机器人是直接回答没有推送;本地 IM 正常通信时会直接走支持 IM 通道,不会发送apns推送;

    相关配置和代码

    推送 ZCLibClient.h 关键属性说明

    /**
    推送的token
    每次启动应用都需要重新设置
    */
    @property (nonatomic,strong) NSData *token;
    /**
    测试模式,
    根据此设置调用的推送证书,默认NO
    NO ,调用生产环境
    YES,测试环境
    */
    @property (nonatomic,assign) BOOL isDebugMode;
    
    /**
    自动提醒消息
    说明:如果开启自动提醒消息,当没有在智齿聊天页面的时候,都会主动把消息作为本地通知展示
    此提醒为本地消息推送,与apns无关,仅是本地IM消息不在聊天页面的提醒
    */
    @property (nonatomic,assign) BOOL autoNotification;
    
    
    /**
     退出道后台,自动关闭长连接,默认NO
     说明:如果设置YES,退出后台立即关闭通道,不影响应用后台挂起时长
     */
    @property (nonatomic,assign) BOOL autoCloseConnect;
    
    /**
    获取未读消息数
    @return 未读消息数(进入智齿聊天页面会清空)
    */
    -(int) getUnReadMessage;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    注册推送

    在 AppDelegate.m 文件中注册推送。

    导入头文件

    #import <SobotKit/SobotKit.h>
    #import <UserNotifications/UserNotifications.h>
    #define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    
    1
    2
    3

    服从协议

    
    <UIApplicationDelegate,UNUserNotificationCenterDelegate>
    
    
    1
    2
    3

    注册

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
        
        if (SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10")) {
            UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
            center.delegate = self;
            [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert |UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
                if (!error) {
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                }
            }];
        }else{
             [self registerPush:application];
        }
        [[ZCLibClient getZCLibClient].libInitInfo setApp_key:@"your appKey"];
        // 设置推送是否是测试环境,测试环境将使用开发证书
        [[ZCLibClient getZCLibClient] setIsDebugMode:YES];
        // 错误日志收集
        [ZCLibClient setZCLibUncaughtExceptionHandler];
        return YES;
    }
     
    -(void)registerPush:(UIApplication *)application{
        // ios8后,需要添加这个注册,才能得到授权
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
            //IOS8
            //创建UIUserNotificationSettings,并设置消息的显示类类型
            UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];
            
            [application registerUserNotificationSettings:notiSettings];
            
        } else{ // ios7
            [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];
        }
    }
    
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{
        NSLog(@"---Token--%@", pToken);
        // 注册token
        [[ZCLibClient getZCLibClient] setToken:pToken];
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    # 2. 设置是否开启消息提醒

    当用户不处在聊天界面时,收到客服的消息,APP 可以在通知栏或者聊天入口给出提醒。通知栏提醒可以显示最近一条消息的内容。

    // 是否自动提醒, 当用户不在聊天页面,收到本地连接消息主动发送一条本地推送
    [[ZCLibClient getZCLibClient] setAutoNotification:YES];
     
    // 设置推送环境 
    [[ZCLibClient getZCLibClient] setIsDebugMode:NO];  
    
    
    1
    2
    3
    4
    5
    6
    # 3. 离线消息

    离线消息设置

    
    // 设置切换到后台自动断开长连接,不会影响APP后台挂起时长
    // 进入前台会自动重连,断开期间消息会发送apns推送
    [ZCLibClient getZCLibClient].autoCloseConnect = YES;
    
    
    
    //  @note 检查当前消息通道是否建立,没有就重新建立, 如果调用 closeIMConnection 后,可调用此方法重新建立链接
    [[ZCLibClient getZCLibClient] checkIMConnected];  
    /* 检查当前监听是否被移除,如果移除就重新注册(重新激活
     网络监听 ZCNotification_NetworkChange
     UIApplicationDidBecomeActiveNotification
     UIApplicationDidEnterBackgroundNotifica
    ),经常和checkIMConnected一起使用
    */
    [[ZCLibClient getZCLibClient] checkIMObserverWithRegister];
    /**
     移除IM所有监听,可能会影响应用在后台存活时长,如果调用此方法后需要checkIMObserverWithCreate重新激活
     网络监听 ZCNotification_NetworkChange
     UIApplicationDidBecomeActiveNotification
     UIApplicationDidEnterBackgroundNotification
     */
    [[ZCLibClient getZCLibClient] removeIMAllObserver];
    
    /**
     @note 关闭当前消息通道,使其不再接受消息,如果配置推送了,消息会走apns送达
     */  
     [[ZCLibClient getZCLibClient] closeIMConnection];
     
     
     
    
         
    // ReceivedMessageBlock 未读消息数, obj 当前消息  unRead 未读消息数
     [ZCLibClient getZCLibClient].receivedBlock = ^(id obj,int unRead,NSDictionary *object){
    //        NSLog(@"当前消息数:%d \n %@",unRead,obj);
        };
        
    // 关闭通道,清理内存,退出智齿客户(如果当前是人工咨询状态客户会离线,如果是机器人状态会直接中断当前会话,下次进入是新会话)
    // 说明:调用此方法后将不能接收到离线消息,除非再次进入智齿SDK重新激活
    // isClosePush:YES ,是关闭push;NO离线用户,但是可以收到push推送
    +(void) closeAndoutZCServer:(BOOL) isClosePush; 
    //事例
    [ZCLibClient  closeAndoutZCServer:YES];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    # 4. 未读消息数操作
    //直接获取未读消息数
    [[ZCLibClient getZCLibClient] getUnReadMessage];
    //清空未读消息数
     [[ZCLibClient getZCLibClient] clearUnReadNumber:@"partnerid"];
    
    1
    2
    3
    4
    # 5. 发送位置消息

    发送位置信息,此方法,只能是收到初始化的链接监听到 url=sobot://sendlocation 时发起定位调用,否则可能发送失败,详细说明见 ZCKitInfo.h 中的 canSendLocation 属性说明

    ZCKitInfo *uiInfo=[ZCKitInfo new];
    // 设置开启发送
    uiInfo.canSendLocation = YES;
    // 配置发送按钮,注意menu1.url = sobot://sendlocation在启动页面的messageLinkClick中监听
    NSMutableArray *arr = [[NSMutableArray alloc] init];
        for (int i = 0; i<1; i++) {
            ZCLibCusMenu *menu1 = [[ZCLibCusMenu alloc] init];
            menu1.title = [NSString stringWithFormat:@"位置"];
            menu1.url = [NSString stringWithFormat:@"sobot://sendlocation"];;
            menu1.imgName = @"zcicon_sendlocation";
            [arr addObject:menu1];
            ZCLibCusMenu *menu2 = [[ZCLibCusMenu alloc] init];
            menu2.title = [NSString stringWithFormat:@"商品"];
            menu2.url = [NSString stringWithFormat:@"sobot://sendProductInfo"];;
            menu2.imgName = @"zcicon_sendpictures";
            [arr addObject:menu2];
        }
    uiInfo.cusMoreArray = arr;
    
    
    
    // 发送位置方法,fullPath为图片本地完整路径
    [ZCSobotApi sendLocation:@{
                            @"lat":@"40.001693",
                            @"lng":@"116.353276",
                            @"localLabel":@"北京市海淀区学清路38号金码大厦A座23层金码大酒店",
                            @"localName":@"云景四季餐厅",
                            @"file":fullPath}];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # 6. 链接拦截

    可以通过初始化之前的代码:

    
    /// 点击链接拦截 帮助中心、留言、聊天、留言记录
    /// @param messagelinkBlock 获取到链接,如果返回 YES 则拦截
        [ZCSobotApi setMessageLinkClick:^BOOL(NSString *linkUrl) {
            
            return NO;
        }];
    
    1
    2
    3
    4
    5
    6
    7

    拦截用户点击消息中的链接

    # 7. 监听当前聊天模式的变化

    可以通过初始化之前的代码:

        
    // 当前用户会话状态
    typedef NS_ENUM(NSInteger,ZCServerConnectStatus) {
        ZCServerConnectOffline    = 0, // 当前会话已经结束
        ZCServerConnectRobot      = 1, // 机器人
        ZCServerConnectArtificial = 2, // 人工接入成功
        ZCServerConnectWaiting    = 3  // 仅人工的排队
    };
    [[ZCLibClient getZCLibClient] setServerConnectBlock:^(id message, ZCServerConnectStatus status, NSDictionary *object) {
           
            
        }];
        
        
        // 返回事件监听
        [ZCSobotApi setZCViewControllerBackClick:^(id _Nonnull obj, ZCPageCloseType type) {
            NSLog(@"点击返回了%@,%d",obj,type);
        }];
        
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 8. 替换消息中手机或固话识别的正则表达式

    修改自己的电话号码识别规则:

        
    /**
    *  电话号码正则表达式
     *  默认为@"0+\\d{2}-\\d{8}|0+\\d{2}-\\d{7}|0+\\d{3}-\\d{8}|0+\\d{3}-\\d{7}|1+[34578]+\\d{9}|\\+\\d{2}1+[34578]+\\d{9}|400\\d{7}|400-\\d{3}-\\d{4}|\\d{11}|\\d{10}|\\d{8}|\\d{7}"
     * 例如:82563452、01082563234、010-82543213、031182563234、0311-82563234
     、+8613691080322、4008881234、400-888-1234
     */
    @property (nonatomic,strong) NSString * telRegular;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 9. 替换聊天消息中识别超链接的正则表达式

    修改消息中超链接的识别规则:

        
    
    /**
     *  链接地址正则表达式
     *  默认为:
        @"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z0-9]{1,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(([a-zA-Z0-9]{2,4}).[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)"
     */
    @property (nonatomic,strong) NSString * urlRegular;
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 10. 隐藏消息列表中的时间提示
        
    
    /**
      是否隐藏会话时间,默认NO不隐藏;如果不是中国区,与客户端的真实时间是有差异可以选择隐藏会话中的时间
    */
    @property (nonatomic,assign) BOOL hideChatTime;
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    # ● 自定义UI设置
    1. 在导航栏区域,我们支持自定义导航栏区域的颜色及其字体颜色。
    2. 在会话页面区域,我们支持自定义会话区域的背景颜色、会话气泡颜色、会话字体颜色、提示气泡颜色、提示字体颜色、时间文字颜色。
    3. 在底部区域,我们支持自定义底部 bottom 背景颜色及输入框线条背景颜色。
    4. 其它部分,我们支持自定义相册导航栏的背景颜色及文字颜色、评价弹框中的文字颜色及按钮颜色、录音控件中的文字、商品详情展示中文字颜色(标题、详情、标签、发送)。
    5. 图片替换,如果想替换 SDK 中展示的图片,可以直接替换 SobotKit.bundle 中的资源;也可以放一个同名的资源名称在自己的项目中,会优先获取项目中的图片资源。
    # 1. 配置属性值

    具体代码实现请 查看代码中的 ZCKitInfo.h 文件 ,参考 ZCKitInfo 类说明

    
    ZCKitInfo *uiInfo=[ZCKitInfo new];
    // 比如:设置对话页面背景为红色
    uiInfo.backgroundColor = [UIColor redColor];
    // 设置顶部导航绿色
    uiInfo.topViewBgColor = [UIColor greenColor];
    
    // 启动页面是传入即可
    [ZCSobotApi openZCChat:uiInfo with:self pageBlock:^(id  _Nonnull object, ZCPageBlockType type) {
    
            }];
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    【说明:代码未涉及到的自定义 UI,可以直接替换 SobotKit.bundle 中的图片以达到你想要的效果或者直接放一张同名图片到你的项目中,目前SDK仅支持超链接A、斜体I,加粗:strong、b,  换行 br 这几种 Html 标签,可随意组合,对于除上述之外的 Html 标签无法很好处理,会直接过滤掉其他的标签】

    # 2. 自定义顶部标题
    ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    // 0.默认,自动判断显示机器人头像和人工头像
    // 1.始终企业名称和企业logo
    // 2.显示自定义标题和图片,需要设置,custom_title、custom_title_url
    // 3.仅显示机器人或人工名称,不显示头像
    // 4.自动判断,显示机器人、人工的头像和名称
    initInfo.title_type = @"0";
    
    // 仅当title_type=@"2"时以下配置有效
    initInfo.custom_title = @"我是自定义标题,title_type=2是生效";
    initInfo.custom_title_url = @"我是自定义头像,title_type=2是生效";  
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # ● 其他配置
    # 1. 自定义自动应答语

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

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

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

    - (void)customTipWord:(ZCLibInitInfo*)libInitInfo{
        // 用户超时下线提示语
        libInitInfo.user_out_word = @"用户超时下线提示语";
        // 用户超时提示语
        libInitInfo.user_tip_word = @"用户超时提示语";
        // 人工客服提示语
        libInitInfo.admin_tip_word = @"人工客服提示语";
        // 机器人欢迎语
        libInitInfo.robot_hello_word = @"机器人欢迎语";
        // 暂无客服在线说辞
        libInitInfo.admin_offline_title = @"暂无客服在线说辞";
        // 人工客服欢迎语
        libInitInfo.admin_hello_word  = @"人工客服欢迎语";
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 2. 自定义聊天记录显示时间范围

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

    /**
     历史记录时间范围,单位分钟(例:100-表示从现在起前100分钟的会话)
     */
    
    @property(nonatomic,assign) int scope_time;
    
    1
    2
    3
    4
    5
    # 3. “+”号面板菜单扩展
    1. 固定按钮配置;
    	ZCKitInfo *uiInfo=[ZCKitInfo new];
        uiInfo.canSendLocation = NO;
        uiInfo.hideMenuSatisfaction = YES;
    //    uiInfo.hideMenuLeave = YES;
    //    uiInfo.hideMenuPicture = YES;
    //    uiInfo.hideMenuCamera = YES;
    //    uiInfo.hideMenuFile = YES;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    1. 添加自定义按钮

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

        ZCKitInfo *uiInfo=[ZCKitInfo new];
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        for (int i = 0; i<1; i++) {
            ZCLibCusMenu *menu1 = [[ZCLibCusMenu alloc] init];
            menu1.title = [NSString stringWithFormat:@"订单"];
            menu1.url = [NSString stringWithFormat:@"sobot://sendOrderMsg"];
            menu1.imgName = @"zcicon_sendpictures";
            [arr addObject:menu1];
            
            ZCLibCusMenu *menu2 = [[ZCLibCusMenu alloc] init];
            menu2.title = [NSString stringWithFormat:@"商品"];
            menu2.url = [NSString stringWithFormat:@"sobot://sendProductInfo"];
            menu2.imgName = @"zcicon_sendpictures";
            
            [arr addObject:menu2];
        }
        
        
        uiInfo.cusMoreArray = arr;
        
        uiInfo.cusRobotMoreArray = arr;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    其中:

    
    /**
     * 自定义输入框下方更多(+号图标)按钮下面内容(不会替换原有内容,会在原有基础上追加)
     * 修改人工模式的按钮
     * 填充内容为:ZCLibCusMenu.h
     *  title:按钮名称
     *  url:点击链接(点击后会调用初始化linkBock)
     *  imgName:本地图片名称,如xxx@2x.png,icon=xxx
     */
    @property (nonatomic,strong) NSMutableArray * cusMoreArray;
    
    /**
     * 自定义输入框下方更多(+号图标)按钮下面内容(不会替换原有内容,会在原有基础上追加)
     * 修改机器人模式的按钮
     * 填充内容为:ZCLibCusMenu.h
     *  title:按钮名称
     *  url:点击链接(点击后会调用初始化linkBock)
     *  imgName:本地图片名称,如xxx@2x.png,icon=xxx
     */
    @property (nonatomic,strong) NSMutableArray * cusRobotMoreArray;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 4. 调起拨号界面接口
    /**
     *  设置电话号码
     *  当导航栏右上角 显示 拨号按钮时  (和isShowTelIcon 一起设置有效)
     *
     **/
    @property (nonatomic,copy) NSString * customTel;
    /**
     *
     *   导航栏右上角 是否显示 拨号按钮 默认不显示    注意:和isShowEvaluation 互斥 只能设置一个有效
     *
     **/
    @property (nonatomic,assign) BOOL isShowTelIcon;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 5. 智齿日志显示开关
    /**
     *  显示日志信息
     *
     *  @param isShowDebug 默认不显示
     */
    +(void) setShowDebug:(BOOL) isShowDebug;
    
    1
    2
    3
    4
    5
    6
    # 6. iOS多语言支持

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

    语言文件的统一放在 SobotKit.bundle 文件中,如果需要新增语言包,把支持的语言文件放入对应的语言目录下即可,例如;英文路径:SobotKit.bundle⁩/⁨en_lproj/SobotLocalizable.strings,中文的路径⁨ ⁨SobotKit.bundle⁩/⁨zh-Hans_lproj/SobotLocalizable.strings;

    [说明:语言文件夹名称为当前语言名称的后面加上 _lproj,例如 zh-Hans_lproj,en_lproj]

    《客户SDK支持语言编码表》 (opens new window)

    
    //获取语言名称
    NSString * languages = [ZCSobotApi getCurLanguagePreHeader];
    
    
        ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    
    // 设置默认语言,如果无法识别当前系统语言默认语言,不设置默认为en_lproj
    initInfo.default_language = @"zh-Hans_lproj";
    
    // 指定语言,不根据系统变化,如果找不到指定语言走默认语言逻辑
    initInfo.absolute_language = @"ar_lproj";
    
    
    // 下载语言(2.8.6之后提供),如果你需要支持bundle包之外的其它语言,可提供给我们语言翻译放入我们服务器中支持动态同步
    /// 从服务端同步语言文件
    /// @param lan  要同步的语言,如果本地bundle中已存在不会下载,en_lproj,zh-Hans_lproj
    /// @param isReWrite  如果已经下载过了是否重复下载
    +(void)synchronizeLanguage:(NSString *) language write:(BOOL) isReWrite;
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

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

    
    //  隐藏机器人是评价标签
    _kitInfo.hideRototEvaluationLabels = YES;
    
    //  隐藏人工时评价标签
    _kitInfo.hideManualEvaluationLabels = YES;
    
    
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 7. 设置暗黑模式

    从 2.8.5 版本开始支持暗黑模式,默认根据手机系统设置自动适配;也可强制指定使用,配置如下:

    
    	ZCKitInfo *uiInfo=[ZCKitInfo new];
    	// 默认为0,跟随系统设置, 1强制使用暗黑风格,2强制使用高亮风格
        uiInfo.themeStyle = 1;
       
       // 默认为YES,当为暗黑模式时候自定义颜色属性将失效
       // 如果要保持暗黑模式时自定义颜色生效,设置为NO
        uiInfo.useDefaultDarkTheme = YES;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 8. 时区适配

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

    
    [ZCSobotApi setAutoMatchTimeZone:YES];
    
    
    1
    2
    3
    # 9. 智齿部分功能页面点击返回和事件的监听(只记录不拦截),可自己添加逻辑(例如埋点)
    
        [ZCSobotApi setFunctionClickListener:^(id _Nonnull obj, ZCPageCloseType type) {
        	 //1:留言返回,2:会话页面返回,3:帮助中心返回,4:电商消息中心页面返回,5:电话打电话按钮
            NSLog(@"点击返回了%@,%zd",obj,type);
        }];
    
    
    1
    2
    3
    4
    5
    6
    # 10. 安全校验

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

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

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

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

    
    ZCLibInitInfo *initInfo = [ZCLibClient getZCLibClient].libInitInfo;
    
    // 设置加密时间
    _libInitInfo.create_time = [ZCSobotApi zcGetCurrentTimes];
    _libInitInfo.secret = @"加密串";
    _libInitInfo.partnerid = @"your id";
    // md5后的窜,
    _libInitInfo.sign = [self getSign];
    
    
    // 参考实现方法
    -(NSString *)getSign{
        NSString *sign =  [NSString stringWithFormat:@"%@%@%@%@",_libInitInfo.app_key,_libInitInfo.partnerid,_libInitInfo.secret,_libInitInfo.create_time];
        NSLog(@"sign:%@",sign);
        return [ZCSobotApi zcMd5Sign:sign];
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    # 配置类属性说明

    # ● ZCKitInfo 类说明( UI 相关配置)

    每次启动智齿页面都可以重新设置

    # 1. UI 逻辑相关
    参数 类型 必填 描述
    isOpenEvaluation BOOL 否 点击返回时是否开启满意度评价
    isCloseAfterEvaluation BOOL 否 点击返回时开启满意度评价后,评价完人工是否关闭会话
    isShowTansfer BOOL 否 机器人优先模式,是否直接显示转人工按钮(值为 NO 时,会在人工无法回答时和 unWordsCount 参数配合显示转人工按钮),默认为 YES 显示转人工按钮
    unWordsCount NSString 否 机器人优先模式,通过记录机器人未知说辞的次数设置是否直接显示转人工按钮
    isShowTelIcon BOOL 否 导航栏右上角 是否显示 拨号按钮 默认不显示    注意:和isShowEvaluation 互斥 只能设置一个有效
    isShowEvaluation BOOL 否 导航栏右上角 是否显示 评价按钮,默认 NO
    customTel NSString 否 当导航栏右上角 显示 拨号按钮时  (和 isShowTelIcon 一起设置有效)
    isOpenRecord BOOL 否 是否开启语音功能(人工接待时,默认 YES 开启。
    isShowNickName BOOL 否 留言页面是否显示昵称输入框,默认 NO 不显示。
    isAddNickName BOOL 否 非必须输入,留言时是否必须输入昵称,默认为 NO。
    isSetPhotoLibraryBgImage BOOL 否 是否设置相册背景图片(不设置会跟着导航颜色配置)
    isOpenRobotVoice BOOL 否 是否开启机器人语音(需要开通,未开通时机器人无法识别语音)
    navcBarHidden BOOL 否 SDK 页面中使用自定义的导航栏,不在使用系统的导航栏(隐藏)
    canSendLocation BOOL 否 人工状态,是否可以发送位置  【 注意:  由于每个App定位插件选择不同,智齿没有实现选择位置功能,所以需要自行传递位置到 SDK 以及打开显示,步骤如下:  1、实现 messageLinkClick 事件(在 ZCSobot startZCChatVC 函数中)  2、当收到link = sobot://sendlocation 调用智齿接口发送位置信息  3、当收到 link = sobot://openlocation?latitude=xx&longitude=xxx&address=xxx 可根据自己情况处理相关业务
    isSendInfoCard BOOL 否 商品卡片信息是否自动发送(转人工成功时,自动发送商品卡片信息),默认不自动发送。
    isEveryTimeSendCard BOOL 否 是否每次都自动发送商品信息 (转人工成功时,自动发送商品卡片信息) 需要先开启 isSendInfoCard = YES。
    productInfo ZCProductInfo 否 产品信息 ,配合 isSendInfoCard 使用。
    isShowCloseSatisfaction BOOL 否 关闭按钮时是否显示评价界面,默认不显示
    isShowReturnTips BOOL 否 返回时是否开启提示,提示文案默认为:您是否要结束会话?,如需修改,请修改国际化配置文件
    ishidesBottomBarWhenPushed BOOL 否 push后隐藏 BottomBar,默认是 YES。
    isShowPortrait BOOL 否 仅支持竖屏,默认为 NO。
    isCloseInquiryForm BOOL 否 是否关闭询前表单(默认为NO,使用系统默认配置)
    isShowClose BOOL 否 导航栏右上角 是否显示 关闭按钮 默认不显示,关闭按钮,点击后无法监听后台消息。
    isUseImagesxcassets BOOL 否 是否使用 .xcassets 里的图片
    isOpenActiveUser BOOL 否 是否开启智能转人工,(如输入“转人工”,直接转接人工),需要隐藏转人工按钮,请参见isShowTansfer和unWordsCount属性。
    activeKeywords BOOL 否 智能转人工关键字,关键字作为key{@"转人工",@"1",@"R"😡"1"}
    autoSendOrderMessage BOOL 否 人工后,是否主动发送一条信息
    isEveryTimeAutoSend BOOL 否 是否每次都发送订单信息,需要先设置参数 autoSendOrderMessage = YES。
    orderGoodsInfo ZCOrderGoodsModel 否 需要发送的订单信息 ,配合 autoSendOrderMessage 使用
    leaveCompleteCanReply BOOL 否 留言完成后,是否 显示 回复按钮,默认为YES可以回复。
    hideMenuSatisfaction BOOL 否 聊天页面底部加号中功能:隐藏评价,默认NO(不隐藏)
    hideMenuLeave BOOL 否 聊天页面底部加号留言(人工和机器人),默认NO(不隐藏)
    hideMenuManualLeave BOOL 否 聊天页面底部加号中留言(仅人工), 默认NO(不隐藏)
    hideMenuPicture BOOL 否 聊天页面底部加号中功能:隐藏图片,默认NO(不隐藏)
    hideMenuCamera BOOL 否 聊天页面底部加号中功能:隐藏拍摄 ,默认NO(不隐藏)
    hideMenuFile BOOL 否 聊天页面底部加号中功能:隐藏文件,默认NO(不隐藏)
    themeStyle BOOL 否 是否设置为暗黑模式,2、普通模式,1暗黑,0跟随系统设置,默认为0
    useDefaultDarkTheme BOOL 否 如果设置了自定义颜色,是否使用默认暗黑模式,如果设置为NO,当为暗黑模式时候自定义颜色属性将失效,默认为YES
    leaveContentPlaceholder NSString 否 自定义留言内容预置文案
    leaveMsgGuideContent NSString 否 自定义留言引导语
    leaveCusFieldArray NSMutableArray 否 直接进入留言自定义字段
    leaveMsgGroupId NSString 否 留言技能组 id,获取:设置 —>工单技能组设置
    hideChatTime BOOL 否 是否隐藏会话时间 ,默认NO
    hideRototEvaluationLabels BOOL 否 是否隐藏机器人评价标签,默认NO不隐藏
    hideManualEvaluationLabels BOOL 否 是否隐藏人工评价标签,默认NO不隐藏
    helpCenterTel NSString 否 帮助中心可跳转电话号码,默认不显示
    helpCenterTelTitle NSString 否 帮助中心电话号码显示内容,默认不显示
    showPhotoPreview BOOL 否 选择图片时,不直接发送,预览发送【注意:预览方框仅为放大镜效果,不是裁切图片,发送的还是原图】,默认 NO 关闭
    leaveTemplateId NSString 否 留言模板 id【注意 配合ZCChatControllerDelegate 使用 】
    hideNavBtnMore BOOL 否 是否隐藏导航右上角“...”更多按钮,默认NO不隐藏
    hideQRCode BOOL 否 是否关闭识别二维码的功能,设置YES关闭,默认NO保留
    isCloseSystemRTL BOOL 否 是否关闭镜像功能,设置YES关闭,默认NO
    showLeftMsgFace BOOL 否 是否显示聊天客服的头像功能,设置YES开启,默认NO
    showLeftMsgNickName BOOL 否 是否显示聊天客服的昵称功能,设置YES开启,默认NO
    # 2. 字体相关
    参数 类型 必填 描述
    titleFont UIFont 否 顶部标题的 font
    subTitleFont UIFont 否 副标题 font
    listTitleFont UIFont 否 列表标题 font
    listDetailFont UIFont 否 未读消息按钮、评价标签 font
    customlistDetailFont UIFont 否 评价页面中”是否有以下情况“标签 font
    listTimeFont UIFont 否 消息提醒(时间、转人工、客服接待等) font
    chatFont UIFont 否 聊天气泡中文字 font
    voiceButtonFont UIFont 否 录音按钮的文字 font
    goodsTitleFont UIFont 否 商品详情cell 中title的文字 font
    goodsDetFont UIFont 否 商品详情cell中摘要的文字 font
    notificationTopViewLabelFont UIFont 否 通告的文字 字号
    scTopTextFont UIFont 否 帮助中心 标题font
    scTopBackTextFont UIFont 否 顶部返回按钮的文字font
    # 3. 背景颜色相关
    参数 类型 必填 描述
    goodSendBtnColor UIColor 否 商品详情 cell 中 btn 的背景色
    backgroundColor UIColor 否 对话页面背景色
    leftChatColor UIColor 否 左边聊天气泡的颜色
    rightChatColor UIColor 否 右边聊天气泡的颜色
    leftChatSelectedColor UIColor 否 左边气泡复制选中的颜色
    rightChatSelectedColor UIColor 否 右边气泡复制选中的颜色
    backgroundBottomColor UIColor 否 底部bottom的背景颜色
    bottomLineColor UIColor 否 底部bottom框边框线颜色(输入框、录音按钮、分割线)
    commentCommitButtonColor UIColor 否 评价提交按钮背景颜色
    commentItemButtonBgColor UIColor 否 评价选项按钮默认颜色(默认跟随主题色)
    commentItemButtonSelBgColor UIColor 否 评价选项按钮选中颜色(默认跟随主题色)
    BgTipAirBubblesColor UIColor 否 提示气泡的背景颜色
    videoCellBgSelColor UIColor 否 语音cell选中的背景色
    LineRichColor UIColor 否 富文本中的线条颜色
    goodSendBtnColor UIColor 否 商品发送按钮的背景色
    leaveSubmitBtnImgColor UIColor 否 留言页面中 提交按钮的背景颜色
    topBackNolColor UIColor 否 返回按钮的默认背景色
    topBackSelColor UIColor 否 返回按钮的高亮背景色
    topViewBgColor UIColor 否 自定义导航栏背景色
    scTopBgColor UIColor 否 帮助中心 导航条背景色
    documentLookImgProgressColor UIColor 否 文件查看,ImgProgress 图片背景颜色
    documentBtnDownColor UIColor 否 文件查看,按钮 背景颜色
    notificationTopViewBgColor UIColor 否 通告栏的背景色
    satisfactionSelectedBgColor UIColor 否 评价页“已解决”和“未解决”背景色
    # 4. 文字颜色相关
    参数 类型 必填 描述
    topViewTextColor UIColor 否 顶部文字颜色
    leftChatTextColor UIColor 否 左边气泡文字颜色
    rightChatTextColor UIColor 否 右边气泡文字颜色
    emojiSendBgColor UIColor 否 表情键盘发送按钮背景颜色,2.8.5 新增
    chatTextViewColor UIColor 否 输入框文本颜色
    timeTextColor UIColor 否 时间文字的颜色
    tipLayerTextColor UIColor 否 提示文字的颜色
    chatLeftLinkColor UIColor 否 左边气泡中链接颜色
    chatRightLinkColor UIColor 否 右边气泡中链接颜色
    goodsTitleTextColor UIColor 否 商品 cell 中 title 的文字颜色
    goodsTipTextColor UIColor 否 商品 cell 中标签的文字颜色
    goodsDetTextColor UIColor 否 商品 cell 中摘要的文字颜色
    goodsSendTextColor UIColor 否 商品详情 cell 中发送的文字颜色
    satisfactionTextColor UIColor 否 提交评价后将结束会话的文字颜色
    noSatisfactionTextColor UIColor 否 暂不评价文字颜色
    satisfactionTextSelectedColor UIColor 否 评价页“已解决”和“未解决”文字颜色
    scoreExplainTextColor UIColor 否 满意度星级说明的文字颜色
    commentButtonTextColor UIColor 否 评价(条件选择 按钮)文字颜色(默认跟随主题色)
    submitEvaluationColor UIColor 否 提价评价按钮的文字颜色
    notificationTopViewLabelColor UIColor 否 通告栏的文字颜色
    chatLeftMultColor UIColor 否 多轮会话模板四的超链颜色
    openMoreBtnTextColor UIColor 否 多轮会话中 展开和收起的文字颜色
    topBtnNolColor UIColor 否 聊天对话框中 顶踩、转人工 文字 默认颜色
    topBtnSelColor UIColor 否 聊天对话框中顶踩 、转人工文字 选中颜色
    topBtnGreyColor UIColor 否 顶踩 文字 置灰颜色
    leaveSubmitBtnTextColor UIColor 否 留言页面中 提交按钮的文字颜色
    scTopTextColor UIColor 否 帮助中心、导航 标题的文字颜色
    scTopBackTextColor UIColor 否 帮助中心 顶部返回的文字颜色
    # 5. 图片相关
    参数 类型 必填 描述
    moreBtnNolImg NSString 否 自定义导航栏更多按钮默认状态图片
    moreBtnSelImg NSString 否 自定义导航栏更多按钮选中状态图片
    turnBtnSelImg NSString 否 转人工按钮选中状态图片
    turnBtnNolImg NSString 否 转人工按钮默认状态图片
    topBackSelImg NSString 否 返回按钮选中状态图片
    topBackNolImg NSString 否 返回按钮默认状态图片
    # 6. 其他
    参数 类型 必填 描述
    topBackTitle NSString 否 聊天页面 左上角 返回按钮的文字 (默认 “返回”)
    cusMoreArray NSMutableArray 否 自定义输入框下方更多(+号图标)按钮下面内容(不会替换原有内容,会在原有基础上追加)  填充内容为:ZCLibCusMenu.h  title:按钮名称  url:点击链接(点击后会调用初始化 linkBock)  imgName:本地图片名称,如 xxx@2x.png,icon=xxx
    cusMenuArray NSMutableArray 否 自定义快捷入口  填充内容为: ZCLibCusMenu.h   url: 快捷入口链接(点击后会调用初始化 linkBock)   title: 按钮标题   lableId: 自定义快捷入口的 id
    cusRobotMoreArray NSMutableArray 否 自定义输入框下方更多(+号图标)按钮下面内容(不会替换原有内容,会在原有基础上追加) 填充内容为:ZCLibCusMenu.h
    # ● ZCLibInitInfo类说明

    初始化后会自动创建此对象,后续直接使用即可

    # 1. 基础配置
    参数 类型 必填 描述
    api_host NSString 否 接口域名,默认SaaS平台域名为:https://api.sobot.com (opens new window)
    app_key NSString 是 必须设置,不设置初始化不成功,初始化会自动赋值。
    choose_adminid NSString 否 指定客服ID
    tran_flag int 否 定指客服 转接类型,0. 可转入其他客服,1. 必须转入指定客服.
    partnerid NSString 否 用户唯一标识,对接用户可靠身份,不能写死(写固定值会是同一个身份,后果很严重),不建议为null,如果为空会以设备区别,最大支持300个字符,超过后会自动截取
    robotid NSString 否 对接机器人ID
    robot_alias NSString 否 对接机器人别名,如果设置此值每次都需要设置robotid为空
    platform_userid NSString 否 平台通道参数,初始化成功后会自动赋值
    platform_key NSString 否 私钥
    sign NSString 否 签名 MD5(app_key+partnerid+secret+create_time)
    create_time NSString 否 签名使用的时间戳
    • 仅电商版支持参数

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

    参数 类型 必填 描述
    customer_code NSString 否 商户对接id (仅电商版适用,如果没有app_key,请提供此编码)
    flow_type int 否 跨公司转接人工(仅电商版本可用),默认0不开启,1. 全部溢出,2. 忙碌时溢出,3. 不在线时溢出。
    flow_companyid NSString 否 转接到的公司ID
    flow_groupid NSString 否 转接到的公司技能组
    # 2. 客服工作台显示数据
    参数 类型 必填 描述
    user_nick NSString 否 昵称
    user_name NSString 否 真实姓名
    user_tels NSString 否 用户电话
    user_emails NSString 否 用户邮箱
    qq NSString 否 qq
    remark NSString 否 备注
    face NSString 否 用户自定义头像
    visit_title NSString 否 接入来源页面标题
    visit_url NSString 否 接入的来源URL
    params NSDictionary 否 用户资料
    customer_fields NSDictionary 否 固定 KEY 的自定义字段 所有的 KEY 均在工作台设置后生效(设置->自定义字段->用户信息字段)
    group_name NSString 否 技能组名称
    groupid NSString 否 技能组编号
    isVip NSString 否 指定客户是否为vip,0. 普通,1. vip,同 PC 端 设置-在线客服分配-排队优先设置- VIP 客户排队优先,开启传 1 默认不设置,开启后指定客户发起咨询时,如果出现排队,系统将优先接入。
    vipLevel NSString 否 指定客户的vip等级,传入等级
    # 3. 说辞相关
    参数 类型 必填 描述
    admin_hello_word NSString 否 自定义客服欢迎语,默认为空 (如果传入,优先使用该字段)
    robot_hello_word NSString 否 自定义机器人欢迎语,默认为空 (如果传入,优先使用该字段)
    user_tip_word NSString 否 自定义用户超时提示语,默认为空 (如果传入,优先使用该字段)
    admin_offline_title NSString 否 自定义客服不在线的说辞,默认为空 (如果传入,优先使用该字段)
    admin_tip_word NSString 否 自定义客服超时提示语,默认为空 (如果传入,优先使用该字段)
    user_out_word NSString 否 自定义用户超时下线提示语,默认为空 (如果传入,优先使用该字段)
    # 4. 会话页面相关
    参数 类型 必填 描述
    service_mode int 否 自定义接入模式,1. 只有机器人,2. 仅人工,3. 智能客服-机器人优先,4. 智能客服-人工客服优先。
    title_type NSString 否 聊天页顶部标题 的自定义方式 0.默认,1. 企业名称,2. 自定义字段,3. 仅显示文字、4. 显示头像和文字。
    custom_title NSString 否 聊天页顶部标题 自定义字段
    custom_title_url NSString 否 自定义图像路径
    scope_time int 否 历史记录时间范围,单位分钟(例:100-表示从现在起前100分钟的会话)
    notifition_icon_url NSString 否 通告的icon 的URL
    faqId int 否 指定引导语,不同的用户设置特定的引导语
    # 5. 其他
    参数 类型 必填 描述
    is_enable_hot_guide BOOL 否 是否允许请求热点引导问题接口
    margs NSDictionary 否 热点引导问题的扩展字段
    support BOOL 否 机器人问答是否支持分词联想
    transferaction NSArray 否 转人工指定技能组溢出,详见表格下方说明。
    summary_params NSDictionary 否 转人工自定义字段 eg:@{@"customField15619769556831"😡"显示xxyyyzzz1032"}
    multi_params NSDictionary 否 多轮会话 自定义字段
    good_msg_type int 否 自定发送商品订单信息类型; 0. 不发,1. 给机器人发送,2. 给人工发送,3. 机器人和人工都发送。
    content NSString 否 自动发送商品订单信息内容
    queue_first int 否 指定客户优先
    default_language NSString 否 默认语言,不指定不识别系统语言默认英语,en_lproj
    absolute_language NSString 否 指定语言,不跟随系统语言自动切换

    【transferaction说明: actionType:执行动作类型:to_group:转接指定技能组  optionId:是否溢出  指定技能组时:3:溢出,4:不溢出。  deciId:指定的技能组。  spillId:溢出条件  指定客服组时:4:技能组无客服在线,5:技能组所有客服忙碌,6:技能组不上班,7:智能判断 eg:[{"actionType":"to_group","optionId":"3","deciId":"162bb6bb038d4a9ea018241a30694064","spillId":"7"}, {"actionType":"to_group","optionId":"4","deciId":"a457f4dfe92842f8a11d1616c1c58dc1"}]。 】

    # 源码和Demo

    智齿 iOS_SDK UI源码 (opens new window);
    智齿 SDK 功能体验 Demo APP下载 (opens new window);
    使用视频引导 (opens new window)。

    # 常见问题

    常见问题解答:
    请点击链接 (opens new window) 进入智能机器人输入您的问题

    # 更新说明

    《SDK 版本更新说明》 (opens new window)

    # 智齿科技 SDK 收集使用个人信息说明

    《智齿科技 SDK 收集使用个人信息说明》 (opens new window)

    上次更新: 2024/11/22 18:01:27

    ← Android SDK V6 iOS SDK V6→

    最近更新
    01
    运营支持 API
    03-03
    02
    CRM 对接方案
    12-05
    03
    大模型机器人API
    09-09
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式