开发者文档 开发者文档
帮助中心 (opens new window)
帮助中心 (opens new window)
  • 呼叫中心V6

    • 接口功能规范
    • 基础管理 API
    • 数据服务 API
    • 呼叫能力 (https)
    • 呼叫能力 (JS-SDK)
    • 呼叫能力 (UI电话条)
    • 呼叫事件 (TS)
    • 呼叫能力 (Andorid-SDK)
    • 呼叫能力 (iOS-SDK)
      • 其他
    • 外呼机器人V5
    • 电销中心

    • 语音类产品 API
    • 呼叫中心V6
    智齿科技
    2022-09-13
    目录

    呼叫能力 (iOS-SDK)

    # 呼叫能力 (iOS-SDK)

    智齿客服为企业提供了一整套完善的智能客服解决方案。智齿呼叫 SDK 为其提供所有呼叫相关功能支持,仅需提供使用的账户,就能完成呼叫任务、外呼、呼叫监听、呼叫记录等操作。

    智齿呼叫 SDK 具有以下特性:

    • 提供登录-使用-退出完整流程。
    • 分 2 种登录模块,外部登录同步 token 和常规用户名、密码登录。
    • 支持呼叫话机注册、呼叫记录查询、呼叫监听、座席状态切换等基础功能。

    图片

    相关限制及注意事项:
    1、iOS SDK 新版支持 iOS9 以上版本,同时支持 iPhone、iPad,支持竖屏和横屏。

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

    3、iOS 需要麦克风权限,否则呼叫功能无法使用。

    4、SDK 不可与智齿客服 APP 中的呼叫功能以及智齿 PC 工作台中呼叫功能同时使用。

    # 文档介绍

    # ● 集成流程示意图

    图片

    # ● 文件说明

    SDK 包含(SobotCall.framework、SobotCommon.framework、SobotCall.bundle和SobotCommon.bundle)、SobotCallDemo、和 Doc 相关说明文档。

    文件 描述
    SobotCall.framework 智齿呼叫 SDK 代码库
    SobotCommon.framework 智齿代码基础依赖库
    SobotCommon.bundle 基础工具包的资源库,包含图片文件、多语言文件、颜色
    SobotCall.bundle SDK资源库,包含图片文件、多语言文件、颜色
    SobotCallApi.h 该文件提供接入功能
    SobotCallParameter.h 基础UI配置参数类
    SobotCallCacheEntity.h 基础功能参数类(域名、颜色、语言、显示模式等)
    SobotCallHomeController.h 呼叫入口界面
    SobotCallClient.h 基础功能

    # 集成方式

    # ● 手动集成

    下载链接:iOS_CallSDK (opens new window)

    解压[iOS_SDK],添加必要文件SobotCall.framework、SobotCommon.framework、SobotCommon.bundle和SobotCall.bundle到你的工程里。

    # ● CocoaPods 集成

    在podfile中加入:

    // 使用最新版本
    pod 'SobotCallSDK'
    
    
    1
    2
    3

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

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

    清除pod缓存:

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

    # UI功能说明

    # ● 启动智齿页面

    方式1:直接使用我们提供的方法,自动完成登录并跳转页面。 方法:

    
    /// 启动SDK 进入呼叫SDK首页
    /// @param account  账号
    /// @param loginPwd 密码
    /// @param vc 启动VC
    /// @param resultBlock 回调结果
    +(void)startWithAcount:(NSString *)account password:(NSString *)loginPwd viewController:(UIViewController *)vc result:(SobotResultBlock) resultBlock;
    
    /// 添加启动页面
    /// token 非accessToken,账号登录返回的地址,内部自动判断新旧版本
    +(void)startWithToken:(NSString *) token viewController:(UIViewController *) vc result:(SobotCallResultBlock) resultBlock;
        
        
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    参数

    参数 类型 必填 描述
    account NSString 是 客服账户
    loginPwd NSString 是 客服账户密码
    vc UIViewController 是 执行跳转的vc
    resultBlock Block 否 执行结果,code=1 为成功

    示例代码:

    
    [SobotCallApi startWithAcount:loginAccount password:password viewController:self result:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
    }];
    
    
    1
    2
    3
    4

    方式2:直接创建 SobotCallHomeController,自己完成登录并跳转页面。需要先完成登录,然后再执行跳转。 方法:

    
    
    /// 登录
    /// @param account 账号
    /// @param loginPwd 密码
    /// @param resultBlock 回调结果
    +(void)loginUser:(NSString *)account password:(NSString * )loginPwd result:(SobotCallResultBlock) resultBlock;
    
    /// 登录(使用token)
    /// @param account 账号
    /// @param loginPwd 密码
    /// @param token token
    /// @param resultBlock 回调结果
    +(void)loginUser:(NSString *)account password:(NSString * )loginPwd  token:(NSString *) token  result:(SobotCallResultBlock) resultBlock;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    参数

    参数 类型 必填 描述
    account NSString 是 客服账户
    loginPwd NSString 否 客服账户密码,仅 token 为空时使用
    token NSString 否 已获取到的公司 token,使用 token 方式时不要设置密码,设置密码会重新登录,刷新token
    vc UIViewController 是 执行跳转的 vc
    resultBlock Block 否 执行结果,code=1 为成功

    事例:

    
    
    [SobotCallApi loginUser:fieldUserName.text password:fieldPassword.text token:fieldToken.text result:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
        if(code == 1){
    		// 直接创建VC,自行决定使用
    		SobotCallHomeController *orderHomeVC = [[SobotCallHomeController alloc]init];
        }
    }];
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    方式3:以AppKey和appid的方式登录,需要先完成登录,然后再执行跳转。 (3.0.2 版本新增) 方法:

    
    ///  以AppKey和appid的方式登录
    /// @param account  账号
    /// @param app_key AppKey
    /// @param appid appid
    /// @param vc 启动VC
    /// @param resultBlock 回调结果
    +(void)startWithAcount:(NSString *)account appkey:(NSString *)app_key appid:(NSString *) appid viewController:(UIViewController *)vc  result:(SobotCallResultBlock) resultBlock;
    
    1
    2
    3
    4
    5
    6
    7
    8

    参数

    参数 类型 必填 描述
    account NSString 是 客服账户
    AppKey NSString 是 appkey
    appid NSString 是 appid
    vc UIViewController 是 执行跳转的 vc
    resultBlock Block 否 执行结果,code=1 为成功

    事例:

    
    
    [SobotCallApi startWithAcount:@"123@123.com" appkey:@"your appkey" appid:@"your appid" viewController:self result:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
                
    }];
    
    
    1
    2
    3
    4
    5
    6

    # 初始化

    # ● 域名设置(可选)

    域名说明:

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

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

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

    示例代码:

    
    	SobotCallCacheEntity *config = [[SobotCallCacheEntity alloc] initWithBundleName:@"SobotCall"];
    	    
        // 通用接口服务地址
        config.openApiHost = @"https://api.sobot.com";
        // 呼叫接口服务地址
        config.callApiHost = @"https://openapi.sobot.com";
        // 座席信令服务
        config.stompSocketUri = @"wss://openapi.sobot.com/v6.0.0/webmsg/cc-webmsg";
        // janus 消息监听服务
        config.janusSocketUri = @"wss://rtc.sobot.com.cn/janus";
        
        // janus 代理服务
        config.sipProxy = @"sip:192.168.30.68:5060";
       
       
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # ● 初始化

    初始化参数和调用方式:初始化信息 SobotCallCacheEntity 设置功能相关属性;初始化方法为本地执行,不会有异步请求,设置后立即生效。

    主要调用代码如下:

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

    方法:

    
    
    /// 初始化配置
    /// @param config  SobotCallCacheEntity 配置类,域名/国际化/资源
    /// @param kitInfo SobotKitConfig 配置类
    /// @param resultBlock 初始化回调 (NSInteger code,id _Nullable obj,NSString *_Nullable msg);
    +(void)initWithConfig:(SobotCallCacheEntity *) config  kitInfo:(SobotCallParameter *)kitInfo result:(SobotCallResultBlock) resultBlock;
    
    
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    参数:

    参数 类型 必填 描述
    config NSObject 是 软件基础配置,指定域名、资源名称、语言等
    kitInfo NSObject 是 UI相关配置
    resultBlock Block 否 初始化状态回调,code=1 成功

    示例代码:

    
    SobotCallCacheEntity *config = [[SobotCallCacheEntity alloc] initWithBundleName:@"SobotCall"];
    	// 指定bundle名称
        config.bundleName = @"SobotCall"; 
        // 指定国际化文件在bundle中的路径
        config.languageTableName = @"SobotLocalizable";     
        // 指定国际化文件名称
        config.languagePathInBundle = @"Localizable"; 
        // 指定颜色在bundle中的文件名称
        config.colorTableName = @"SobotColor";
        // 指定语言
        config.absoluetelanguage = @"zh-Hans";
        
        // 通用接口服务地址
        config.openApiHost = @"https://api.sobot.com";
        // 呼叫接口服务地址
        config.callApiHost = @"https://openapi.sobot.com";
        // 座席信令服务
        config.stompSocketUri = @"wss://openapi.sobot.com/v6.0.0/webmsg/cc-webmsg";
        // janus 消息监听服务
        config.janusSocketUri = @"wss://rtc.sobot.com.cn/janus";
        
        // janus 代理服务
        config.sipProxy = @"sip:192.168.30.68:5060";
        SobotCallParameter *kitInfo = [[SobotCallParameter alloc]init];
        kitInfo.showHomeBack = NO;
        [SobotCallApi initWithConfig:config kitInfo:kitInfo result:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
    
        }];
    
    
    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
    # ● 权限设置

    需要加入的权限

    <key>NSMicrophoneUsageDescription</key>
    <string>语音通话需要访问您的麦克风权限</string>
    
    1
    2

    # 开放接口

    # 初始化

    使用开放接口第一步需要设置初始化配置

    示例:

    SobotCallCacheEntity *callCacheEntity = [[SobotCallCacheEntity alloc] init];
        callCacheEntity.callApiHost = @"https://openapi.soboten.com";
        callCacheEntity.openApiHost = @"https://api.sobot.com";
        callCacheEntity.stompSocketUri = @"wss://openapi.soboten.com/v6.0.0/webmsg/cc-webmsg";
        callCacheEntity.janusSocketUri = @"wss://rtc.sobot.com.cn/janus";
        callCacheEntity.sipProxy = @"sip:192.168.30.68:5060";
        [SobotCallOpenApi initWithConfig:callCacheEntity result:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
            
        }];
        
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 请求参数

    详见 SobotCallCacheEntity 说明。

    # 回调函数

    详见 SobotCallResultBlock 说明。

    # 登录操作

    # ● 登录

    1.本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错。

    示例:

    ///  登录
    /// @param account 账号
    /// @param loginPwd 密码
    /// @param token token
    /// @param resultBlock 登录结果回调
    ///  账号必填,密码和token 两者必须有一个有值
    +(void)loginWithAcount:(NSString *)account
                  password:(NSString * )loginPwd
                     token:(NSString *)token
                    result:(SobotCallResultBlock) resultBlock;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 请求参数
    属性 名称 类型 可空 说明
    account 登录账号 string 否 呼叫座席账号
    loginPwd 密码 string 否 呼叫座席的密码,有token时无需传密码 ,如果密码存在,会重新获取token
    token 登录的token string 是 有token优先使用token登录,可以为空
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 签入
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 系统在本接口中获取最新的座席工号,如更换工号,请再重新签入后,更换的工号才生效。
    3. 从一个端调用签入接口会导致其他端断开连接(非座席离线);
    4. 支持座席服务端的登录状态=离线、在线等全部状态签入。但座席服务端工作状态=呼叫中、振铃中、通话中、保持中、整理中时,不允许签入。

    示例:

    +(void)agentLoginWithExt:(NSString *)ext
                 agentStatus:(int )agentStatus
                     callWay:(int)callWay
                  bindMobile:(NSString*)bindMobile
                 sipPassword:(NSString *)sipPassword
                       sipIp:(NSString *)sipIp
                  thisQueues:(NSArray *)thisQueues
                 ResultBlock:(SobotCallResultBlock)resultBlock;
    
    1
    2
    3
    4
    5
    6
    7
    8
    # 请求参数
    属性 名称 类型 可空 说明
    ext 分机号码 string 否 分机号
    agentStatus 登录状态 string 否 签入成功后的座席登录状态。
    1:在线;2:勿扰。
    为空时,默认勿扰。
    callWay 登录方式 int 否 2.sip 3.手机登录 (不支持网页的签入方式)
    bindMobile 绑定电话号码 int 是 手机号码或固话号码。
    接听方式为手机时,绑定电话号码非空,接口指定的绑定电话号码会改变座席设置中绑定的电话号码。
    不同座席绑定的电话号码不可相同。
    thisQueues 接待技能组组号集合 NSArray 是 接待技能组
    # 成功回调函数返回值
    属性 名称 类型 说明
    agentState 登录状态 string 签入成功后的座席登录状态。
    1:在线;2:勿扰。
    为空时,默认勿扰。
    phoneType 接听方式 string 接口指定的接听方式签入成功后,会修改座席默认的接听方式。管理员重置座席接听方式权限也会改变座席默认的接听方式。
    sip:SIP话机;pstn:手机;webrtc:网页。
    为空时,系统取座席默认的接听方式。
    bindExt 绑定分机账号 string 接口指定的分机账号会改变座席设置中绑定的分机账号。
    为空时,系统取座席设置中绑定的分机账号。
    bindMobile 绑定电话号码 string 手机号码或固话号码。
    接口指定的电话号码会改变座席设置中绑定的电话号码。
    为空时,系统取座席设置中绑定的电话号码。
    reasonCode 置忙原因 number 置忙的原因。
    2:勿扰;11:小休;12:小休(培训);13:小休(会议);14:小休(用餐);15:小休(活动);16:小休(自定义1);17:小休(自定义2);18:小休(自定义3)。
    agentLoginQueueInfos 接待技能组 List 是
    # 技能组信息 QueueAgentCheckin
    属性 名称 类型 说明
    queueID 技能组编码 string 技能组号码
    queueName 队列名称 string 技能组名称
    queueWeight 队列权重 int 队列权重
    checkin 签入组类型 int 0:默认签入组,1:可选签入组 默认是签入组
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 签出
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 座席工作状态为就绪中、置忙中、锁定中才可以。否则,不允许。

    示例:

      [SobotCallOpenApi logOut:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
            
        }]; 
    
    1
    2
    3
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 置忙
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        [SobotCallOpenApi noReady:2 resultBlock:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
            
        }];
    
    1
    2
    3
    # 请求参数
    属性 名称 类型 可空 说明
    reasonCode 置忙原因 number 否 置忙后显示的登录状态。
    2:勿扰;11:小休;12:小休(培训);13:小休(会议);14:小休(用餐);15:小休(活动);16:小休(自定义1);17:小休(自定义2);18:小休(自定义3)。
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 置闲
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        [SobotCallOpenApi ready:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
            
        }];
    
    
    1
    2
    3
    4
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 查询座席的签入信息
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 该接口在登录成功后再调用

    示例:

        +(void)queryLoginBingInfo:(SobotCallResultBlock) resultBlock;
    
    1
    # 返回值
    属性 名称 类型 可空 说明
    serviceId 座席ID String 否 座席ID
    agentID 座席工号 String 否 座席工号
    agentName 座席名称 String 否 座席名称
    thisDN 分机号 String 否 绑定分机账号
    phone 电话号码 String 否 绑定电话号码
    phoneTypes 接听方式 List 否 接听方式
    receptionQueues 正在接待的技能组List List 否 查询座席实时已签入的技能组数据(当时已生效的接待技能组)。
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 查询座席可用的接听方式
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 该接口在登录成功后再调用

    示例:

        +(void)queryPhoneType:(SobotCallResultBlock) resultBlock;
    
    1
    # 返回值
    属性 名称 类型 可空 说明
    agentUuid 座席ID String 否 座席ID
    agentID 座席工号 String 否 座席工号
    agentName 座席名称 String 否 座席名称
    ext 分机号 String 否 绑定分机账号
    phone 电话号码 String 否 绑定电话号码
    phoneTypes 接听方式 List 否 接听方式集合
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 查询座席可用的分机号
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 该接口在登录成功后再调用

    示例:

        +(void)queryUnusedExts:(SobotCallResultBlock)resultBlock;
    
    1
    # 返回值
    属性 名称 类型 可空 说明
    data 分机信息数组 List 否 分机集合信息

    Ext 说明

    属性 名称 类型 可空 说明
    ext 分机号 String 否 分机号码
    bindStatus 分机绑定状态 String 否 0-未绑定,1-表示已绑定
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 查询座席的登录状态
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 该接口在登录成功后再调用

    示例:

        +(void)queryStates:(SobotCallResultBlock)resultBlock;
        
    
    1
    2
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 查询座席可用的置忙原因
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        +(void)queryAgentBusyStatus:(SobotCallResultBlock)resultBlock;
    
    1
    # 返回值
    属性 名称 类型 可空 说明
    data 置忙信息数组 List 否 置忙原因集合

    AgentBusyStatus

    属性 名称 类型 可空 说明
    name 状态名称 String 否 状态名称
    code 状态码 String 否 状态码
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 查询座席可签入的技能组
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

       +(void)queryReceptionQueues:(SobotCallResultBlock)resultBlock;
       
    
    1
    2

    # 返回值

    属性 名称 类型 可空 说明
    data 座席当前接待的技能组 List 否 技能信息集合
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 重置离线(退出登录)
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        +(void)logOut:(SobotCallResultBlock)resultBlock;
    
    1
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # 呼叫操作

    # ● 外呼

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        ///  外呼
    /// @param otherDN 客户号码
    /// @param privacyNumber 客户号码加密
    /// @param companyId 企业ID,如果不传,默认为登录时返回的companyId
    /// @param ANI  指定客户侧的外显号码
    /// @param outboundPlanCode  指定客户侧的外显号码方案编码 (可选 外呼路由编码,根据智齿系统设定的外呼路由编码,匹配一个外显号码呼叫客户)
    /// @param resultBlock 结果回调
    +(void)makeCallWithotherDN:(NSString *)otherDN
                 privacyNumber:(NSString*)privacyNumber
                     companyId:(NSString*)companyId
                           ani:(NSString *)ANI
                      userData:(NSDictionary *)userData
              outboundPlanCode:(NSString *)outboundPlanCode
                   ResultBlock:(SobotCallResultBlock)resultBlock
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 请求参数
    属性 名称 类型 可空 说明
    otherDN 客户号码 string 否 UI显示的客户号码。例如:135XXXXX5678;13512345678;
    privacyNumber 客户号码加密 string 是 支持加密号码外呼;例如:XFHAOWHFEFLASJLKWJLD;
    ANI 指定客户侧的外显号码 string 是 企业数据权限范围内的有效号码,可不在座席设置数据权限范围内。
    非空时,系统使用该号码外呼客户。座席外呼路由中设置的数据都失效。
    指定客户侧的外显号码和指定客户侧的外显号码方案编码都为空时,系统使用<外呼路由>中座席设置的规则和号码外呼。
    outboundPlanCode 指定客户侧的外显号码方案编码 string 是 企业数据权限范围内的有效动态外显号码方案,可不在座席设置数据权限范围内。
    指定客户侧的外显号码非空时,指定客户侧的外显号码方案编码必须为空。
    非空时,系统使用该方案查询号码外呼。座席外呼路由中设置的数据都失效。
    指定客户侧的外显号码和指定客户侧的外显号码方案编码都为空时,系统使用<外呼路由>中座席设置的规则和号码外呼。
    userData 自定义数据 object 是 在电话事件中会返回该值。
    在通话记录中会存储该值。
    需要encodeURIComponent编码
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 接听

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        [SobotCallOpenApi answer:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
                
            }];
    
    1
    2
    3
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 挂机

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        [SobotCallOpenApi hangup:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
               
            }];
    
    1
    2
    3
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 保持

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 暂时挂起座席和客户的通话,保持后,客户会听到保持音乐,座席侧静音。
    3. 本操作支持SIP话机;网页;手机;3种接听方式。

    示例:

        [SobotCallOpenApi holdCall:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
                
            }];
    
    1
    2
    3
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 取消保持

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 恢复挂起的座席和客户的通话,取消保持后,客户和座席恢复正常通话。

    示例:

    [SobotCallOpenApi retrieveCall:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
                
            }];
    
    
    1
    2
    3
    4
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 静音

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 关闭操作座席的麦克风,使其他人都无法听到当前座席端的声音。例如:座席A咨询座席B,座席A和座席B都可以操作静音关闭自己的麦克风。
    3. 监听发起者不支持该操作(发起者的麦克风在监听中,始终是关闭状态)。
    4. 本操作支持SIP话机;网页;手机;3种接听方式。

    示例:

    ///   静音
    /// @param resultBlock 结果回调
        [SobotCallOpenApi muteCall:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
    
            }];
    
    1
    2
    3
    4
    5
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 取消静音

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 恢复座席侧的麦克风,使其他人和座席恢复正常通话。

    示例:

    ///   取消静音
    /// @param resultBlock 结果回调
     [SobotCallOpenApi unmute:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
    }];  
            
    
    1
    2
    3
    4
    5
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 查询声音播放类型

    听筒和扬声器来回切换。

    示例:

        
    ///
    ///查询声音播放类型
    NSString *type = [SobotCallOpenApi searchPlayCategory];
    
    
    1
    2
    3
    4
    5
    # 返回值
    属性 名称 类型 说明
    AVAudioSessionCategory 播放类型 String 扬声器模式AVAudioSessionCategoryPlayback
    听筒模式AVAudioSessionCategoryPlayAndRecord

    # ● 设置声音播放类型

    听筒和扬声器来回切换。

    示例:

        
    ///
    ///设置声音播放类型
     [SobotCallOpenApi changedPlayCategory:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
     
    }];
    
    1
    2
    3
    4
    5
    6
    # 返回值
    属性 名称 类型 说明
    AVAudioSessionCategory 播放类型 String 扬声器模式AVAudioSessionCategoryPlayback
    听筒模式AVAudioSessionCategoryPlayAndRecord
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 发送满意度

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 座席发送满意度后,系统断开所有座席侧话路(包括监听;三方等),保留客户侧话路,播放满意度评价;同时挂断所有座席侧话路。

    示例:

        
    ///  发送满意度
    /// @param resultBlock 结果回调
    [SobotCallOpenApi sendSatisfy:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
                  }];
    
    
    1
    2
    3
    4
    5
    6
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 延长整理时长

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 座席电话状态为整理中时,可以延长整理时长;30-900秒。

    示例:

        [SobotCallOpenApi delayACW:30 ResultBlock:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
    
    
                    }];
    
    1
    2
    3
    4
    # 请求参数
    属性 名称 类型 可空 说明
    delayTime 延长时间 number 否 正整数,30-900秒
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 结束整理

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 座席电话状态为整理中时,可以提前结束整理状态。

    示例:

    ///  结束整理
    /// @param resultBlock 结果回调
    [SobotCallOpenApi completeACW:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
                
            }];
    
    
    1
    2
    3
    4
    5
    6
    # 回调函数

    详见 SobotCallResultBlock 说明。

    # ● 结束整理并置忙

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 座席电话状态为整理中时,可以提前结束整理状态并且进入勿扰状态。

    示例:

    /// 结束整理并置忙
    /// @param resultBlock 结果回调
    [SobotCallOpenApi completeACWToBusy:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
        
    }];
    
    
    1
    2
    3
    4
    5
    6
    # 回调函数返回值

    详见 SobotCallResultBlock 说明。

    # ● 发送按键

    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!

    示例:

        
    ///  发送按键
    /// @param dtmfDigits  按键对应值(一次请求发送一个按键值,如,801#,则依次发送8、0、1、#这些按键请求,该参数不可为空)
    /// @param resultBlock 结果回调
    [SobotCallOpenApi agentSendDtmf:@"#" ResultBlock:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
       
    }];
     
    
    1
    2
    3
    4
    5
    6
    7
    8
    # 请求参数
    属性 名称 类型 可空 说明
    dtmfDigits 按键集合 string 否 最大24位。字符包含1-9、*、#。例如:801#。
    # 回调函数返回值

    详见 SobotCallResultBlock 说明。

    # 辅助操作

    # ● 查询座席的外呼路由规则
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 座席签入后,可以查询座席《外呼路由》中设置的外呼路由规则。

    示例

    
    /// 查询座席的外呼路由规则
    /// @param resultBlock 结果回调。 
    [SobotCallOpenApi queryRoutes:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
        if(code == CALL_CODE_SUCCEEDED){
            
        }
    }];
        
        
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 回调函数返回值

    详见 SobotCallResultBlock 说明。

    # 返回值 obj 说明
    属性 名称 类型 说明
    agentUUID 座席ID string 座席ID
    agentID 座席工号 string 座席工号
    agentName 座席名称 string 座席名称
    explicitRule 外显规则数组 object 外显规则集合。见下表1
    explicitSchema 动态外显方案数组 object 动态外显方案集合。见下表2
    explicitNumbers 外显号码数组 object 外显号码集合。见下表3

    表1 explicitRule 外显规则数组说明

    属性 名称 类型 说明
    code 编码 string 1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定。
    name 名称 string 名称。
    hasSet 是否默认 boolean 集合中只有1条数据为默认数据。
    true:默认外显规则;false:非默认外显规则。

    表2 explicitSchema 动态外显方案数组说明

    属性 名称 类型 说明
    code 编码 string 方案id
    planName 名称 string 名称。
    hasSet 是否默认 boolean 集合中只有1条数据为默认数据。
    true:默认方案;false:非默认方案。

    表3 explicitNumbers 外显号码数组说明

    属性 名称 类型 说明
    number 外显号码 string 中继号码。
    nickName 号码别名 string 中继号码的别名。
    hasSet 是否默认 boolean 集合中只有1条数据为默认数据。
    true:默认外显号码;false:非默认外显号码。
    # ● 修改座席的外呼路由规则
    1. 本接口的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!
    2. 座席电话空闲的时候,可以切换座席最后使用的外显规则。

    示例:

    
    /// 修改座席的外呼路由规则
    /// @param explicitRule 外显规则 (1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定;单选;)
    /// @param explicitCode 动态外显方案编码  外显规则为动态外显号码方案时必传
    /// @param explicitNumber 外显号码  不使用外显规则,直接指定企业的某外显号码呼叫客户,外显号码和外显规则至少需要传一个
    /// @param resultBlock 结果回调
     [SobotCallOpenApi agentSetRouteExplicitRule:@"1" explicitCode:@"" explicitNumber:@"" resultBlock:^(NSInteger code, id  _Nullable obj, NSString * _Nullable msg) {
            
        }];
        
        
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 请求参数
    属性 名称 类型 可空 说明
    explicitRule 外显规则 string 否 需在<外呼路由>中座席的外显规则数据权限范围内。
    1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定。
    explicitCode 动态外显方案编码 string 是 需在<外呼路由>中座席的动态外显方案数据权限范围内。
    当外显规则=动态外显号码方案匹配时,非空。
    explicitNumber 外显号码 string 是 需在<外呼路由>中座席的个人号码池数据权限范围内。
    当外显规则=座席号码池指定时,非空。
    # 回调函数返回值

    详见 SobotCallResultBlock 说明。

    # 返回值
    属性 名称 类型 说明
    agentUUID 座席ID string 座席ID
    agentID 座席工号 string 座席工号
    agentName 座席名称 string 座席名称
    explicitRule 外显规则数组 object 外显规则集合。见下表1
    explicitSchema 动态外显方案数组 object 动态外显方案集合。见下表2
    explicitNumbers 外显号码数组 object 外显号码集合。见下表3

    表1 explicitRule 外显规则数组说明

    属性 名称 类型 说明
    code 编码 string 1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定。
    name 名称 string 名称。
    hasSet 是否默认 boolean 集合中只有1条数据为默认数据。
    true:默认外显规则;false:非默认外显规则。

    表2 explicitSchema 动态外显方案数组说明

    属性 名称 类型 说明
    code 编码 string 方案id
    planName 名称 string 名称。
    hasSet 是否默认 boolean 集合中只有1条数据为默认数据。
    true:默认方案;false:非默认方案。

    表3 explicitNumbers 外显号码数组说明

    属性 名称 类型 说明
    number 外显号码 string 中继号码。
    nickName 号码别名 string 中继号码的别名。
    hasSet 是否默认 boolean 集合中只有1条数据为默认数据。
    true:默认外显号码;false:非默认外显号码。

    # 通用属性说明

    # ● 接口统一回调 SobotCallResultBlock

    所有接口统一使用本规则返回结果,已返回主线程,可直接刷新 UI。

    参数 类型 必填 描述
    code int YES 0,失败,1成功(本版本仅有2个返回值)。
    obj object 否 网络接口json会转换为字典,非接口操作值为空。
    msg String 否 网络接口为 json 字符串,非接口操作为操作结果描述,失败时为失败原因。

    当为成功状态时,请根据如下监听获取座席实时状态和呼叫事件:

    监听座席状态

    事件说明参考呼叫事件(TS) (opens new window)。

            
    	//1.使用block方式实现监听
    	[[SobotCallClient getSobotCallClient] setCallOpenWebListenerBlock:^(id  _Nullable obj, id _Nullable object, id  _Nullable msg) {
    	   NSDictionary *dict = (NSDictionary *)msg;
    	if(!sobotIsNull(dict)){
    	        NSString *messageId = sobotConvertToString(dict[@"messageID"]);
    	        if([@"RequestHangup" isEqual:messageId]){
    	            // 挂断
    	        }
    	        
    	        if([@"EventAgentConnectionChanged" isEqual:messageId] || [@"EventAgentLogout" isEqualToString:messageId]){
    	        
    	       }
    	        if([@"EventDialing" isEqual:messageId]){
    	
    	        }
    	        
    	        if([@"EventAgentReady" isEqual:messageId]){
    	            // 挂断
    	        }
    	        if([@"EventEstablished" isEqual:messageId]){
    	            // 对方接电话了
    	            
    	        }
    	        
    	        if([@"EventReleased" isEqual:messageId]){
    	            // 挂断
    	            
    	        }
    	        
    	        if([@"EventMuted" isEqual:messageId]){
    	            // 静音
    	            
    	        }
    	        if([@"EventUnmuted" isEqual:messageId]){
    	            // 取消静音
    	        }
    	        
    	        if ([@"EventWebSocketSession" isEqual:messageId]) {
    	        
    	        }        
    	        if([[messageId lowercaseString] containsString:@"error"]){
    	            if([@"EventAgentError" isEqual:messageId]){
    	 
    	            }
    	            
    	         }
    	        
    	    }     
    	}];
    
    
        //2.使用代理的方式实现监听
        //>2.1 设置代理
        [SobotCallClient getSobotCallClient].openDelegate = self;
        
        //>2.2 实现代理方法
        -(void)sobotCallOpenListenerobject:(id _Nullable)obj{
        
        }
        
    
    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
    58
    59
    60
    61

    监听呼叫事件

    
    1.使用block方式实现监听
    [[SobotCallClient getSobotCallClient] setCallOpenSipListenerBlock:^(id  _Nullable obj, id  _Nullable object, id  _Nullable msg) {
             NSString *event = @"";
            if(msg){
                if([msg[@"result"] isKindOfClass:[NSDictionary class]]){
                    event = msg[@"result"][@"event"];
                }
            }
            if([@"registered" isEqual:event]){
                // 注册成功
            }
            if([@"hangup" isEqual:event]){
                // 挂断
            }
            
            if([@"incomingcall" isEqual:event]){
                NSDictionary *resultDict = msg[@"result"];
                NSString *call_info = sobotConvertToString([msg objectForKey:@"call_info"]);
                // 呼入不自动接,等着页面调用answer事件
                if([@"offer" isEqual:jsep[@"type"]] && [call_info containsString:@"answer-after=0"]){
                    // 自动接听
                }else{
                    // 等待接听
                    }
                }
            }
            
            if([@"notify" isEqual:event]){
                if([@"talk" isEqual:msg[@"result"][@"notify"]]){
                   
                }
            }
    
            if([@"accepted" isEqual:event]){
                
            }
            if([@"trickle" isEqual:msg[@"janus"]]){
                
                }
            }
        }];
        
        2.使用代理的方式实现监听
        //>2.1 设置代理
        [SobotCallClient getSobotCallClient].openDelegate = self;
        //>2.2 实现代理方法
        -(void)sobotCallOpenListenerobject:(id _Nullable)obj{
        
        }
        
    
    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
    # ● SobotCallParameter 类说明

    配置立即生效,使用 SobotCallApi.h 中的如下函数配置,初始化和直接配置后配置覆盖前一个设置值;

    参数 类型 必填 描述
    showHomeBack BOOL 否 首页是否显示返回按钮,默认NO,不显示。

    设置方法:

    /// 更改kitConfig配置
    /// @param kitConfig  congfig配置
    +(void)configKitInfo:(SobotCallParameter *) kitConfig;
    
    
    /// 初始化配置
    /// @param config  SobotCallCacheEntity 配置类,域名/国际化/资源
    /// @param kitInfo SobotKitConfig 配置类
    /// @param resultBlock 初始化回调 (NSInteger code,id _Nullable obj,NSString *_Nullable msg);
    +(void)initWithConfig:(SobotCallCacheEntity *) config  kitInfo:(SobotCallParameter *)kitInfo result:(SobotCallResultBlock) resultBlock;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # ● SobotCallCacheEntity类说明

    初始化时必须配置此属性,配置一次即可,无需重复配置。

    参数 类型 必填 描述
    bundleName NSString 否 资源名称,默认 SobotOrder,默认 SobotOrder。
    languagePathInBundle NSString 否 bundle中的国际化文件路径 , 固定值Localizable。
    languageTableName NSString 否 bundle中国际化文件名称,固定值SobotLocal。
    colorTableName NSString 否 bundle中颜色文件名称,固定值:SobotColor。
    absoluetelanguage NSString 否 指定语言,默认跟随系统。
    defaultlanguage NSString 否 无法识别时默认语言,默认跟随系统。
    openApiHost NSString 否 公共接口域名。
    callApiHost NSString 否 呼叫服务域名。
    stompSocketUri NSString 否 座席状态监听服务地址。
    janusSocketUri NSString 否 janus链接服务地址。
    sipProxy NSString 否 janus代理服务地址。

    # 源码和Demo

    智齿 SDK 功能体验 Demo下载地址 (opens new window)

    # 常见问题

    1.token 怎么获取?
    通过智齿登录接口获取登录 token,注意此处 token 为开发模块获取的token,非新版 v6 版本accessToken,如果无法获取请使用用户名、密码完成登录,体验效果完全一样,请放心使用。

    2.无法正常登录?
    登录之前请确认是否执行初始化操作,初始化操作为本地赋值;不会有异步请求,主要会设置域名及基础配置信息,确认登录信息正确的情况下,主要验证一下是否为域名不匹配。

    3.如果把呼叫主页面嵌入到其它框架使用?
    请参考 Demo 项目,其中有使用tabbar把工单中心页面放入到里面管理的事例。

    4.如果监听呼叫提醒?
    目前呼叫没有消息通知,如果需要监听消息,请查看 SobotCallClient.h 中消息监听相关配置。

    # 更新说明

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

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

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

    上次更新: 2024/5/14 16:23:54

    ← 呼叫能力 (Andorid-SDK) 其他→

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