1. 使用说明

欢迎使用“AICC”的移动端开发者工具套件(SDK)。我们分别为Android和iOS平台提供SDK,通过SDK,可以在您的APP中快速集成拨打电话的功能。

2. 技术原理

下图展示在app中实现接入SDK语音通话的基本工作流程: image

3. Android开发文档

版本: 10.2.8.6

3.1. 简介

适配android6.0以上,即:SdkVersion 23以上适配androidx。 为什么要适配androidx? 从 API 28(Android 9.0,Pie)开始,Google 推荐开发者从原来的各种支持库转移到一个新版本的名为 AndroidX 的支持库。 它相比老支持库有着无需操心版本控制、实时更新的优点。原有的支持库将被保留并且可以继续使用,但接下来所有新的支持都将发布在 AndroidX 上。

3.2. 接入SDK

3.2.1. 本地接入

将SDK aar文件 复制到项目的libs中,并且要在model的build.gradle中添加以下代码

    implementation files('libs/xxx.aar')
    implementation("com.koushikdutta.async:androidasync:3.1.0")
    implementation("org.slf4j:slf4j-api:1.7.30")
    implementation("org.webrtc:google-webrtc:1.0.32006")
    implementation("org.java-websocket:Java-WebSocket:1.5.3")

3.2.2. 添加权限

    <!--  录音所需权限  -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <!--    限制在 Android 12 以下的系统才申请这个蓝牙权限-->
    <uses-permission android:name="android.permission.BLUETOOTH"
        android:maxSdkVersion="30" />
    <!--    适配 Android 12 的蓝牙机制,申请与已配对的蓝牙设备通讯-->
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

    <!--    网络访问所需权限  -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission
        android:name="android.permission.INJECT_EVENTS"
        tools:ignore="ProtectedPermissions" />

3.2.3. 动态申请权限

Manifest.permission.RECORD_AUDIO

当编译的 targetSDK 高于 31 (Android 12)时,还需要额外动态申请蓝牙通讯权限才可以使用蓝牙耳机

Manifest.permission.BLUETOOTH_CONNECT

3.4. 实现拨打电话功能

3.4.1. 初始化

初始化 SDK,在整个应用程序全局只需要调用一次, 建议在Application继承类中调用。

参数说明:

参数 说明

Context

Application类的Context

示例代码:

    /**
     * 初始化 SDK,在整个应用程序全局只需要调用一次, 建议在Application继承类中调用。
     *
     */
    TiPhone.init(context);

3.4.2. 座席上线

使用员工编号密码

通过 员工编号(crmId) + 员工密码(crmIdPassword) 上线

参数说明:

参数 类型 说明

strPlatformUrl

String

平台地址

enterpriseId

String

企业id 例如:7000002

crmId

String

员工工号 例如:10001

crmIdPassword

String

员工密码 例如: xxxxxx

bindTel

String

座席绑定的手机号 例如:138xxxxxxxx

showName

String

显示名称例如:"xx商家",默认无名称

isTelExplicit

boolean

配置是否需要手机号外显。true 为使用手机号外显,false 为使用固话外显,默认为 false。(提示:外显是被叫在接听时所看到的来电号码)

tiPhoneManagerCallBacks

TiPhoneManagerCallBacks

回调监听

示例代码:

    /**
     * 座席上线接口
     *
     * @param strPlatformUrl          平台url
     * @param enterpriseId            企业编号
     * @param crmId                   员工工号
     * @param crmIdPassword           员工密码
     * @param bindTel                 绑定手机号
     * @param showName                显示名称
     * @param isTelExplicit           是否需要手机号外显
     * @param tiPhoneManagerCallBacks 参数回调
     */
        TiPhone.getInstance().loginTiPhone(strPlatformUrl,enterpriseId,crmId,crmIdPassword,bindTel,showName,isTelExplicit, new TiPhoneManagerCallBacks() {
            @Override
            public void onError(String eventMessage) {

            }

            @Override
            public void onNext(LoginResultBean loginResultBean) {

            }
        });

回调参数LoginResultBean对象说明:

字段 类型 说明

code

int

状态码

message

String

状态说明

cnoNum

String

座席号

状态码对照表:

状态值

说明

200

操作成功

5000

参数验证失败

6000

鉴权失败

6001

没有分配分机号

6002

请求语音发送失败

6003

需要输入语音验证码

6004

语音验证失败

7001

登录失败

7002

退出登录失败

7003

登录失败,座席超过并发限制

8001

更新密码失败

8011

预览外呼失败

8012

更新座席状态失败

8013

获取座席转台失败

  • 出现6003状态值需要用户弹出输入框输入语音验证码,并调用3语音验证方法

使用员工编号密码,同时指定分机号

通过 员工编号(crmId) + 员工密码(crmIdPassword)+ 分机号(extendNum) 上线

参数说明:

参数 类型 说明

strPlatformUrl

String

平台URL地址

enterpriseId

String

企业id,例如:7000002

crmId

String

员工工号,例如:10001

crmIdPassword

String

员工密码,例如:xxxxxx,传递crmId时该值必传

bindTel

String

座席绑定的手机号,例如:138xxxxxxxx

showName

String

显示名称例如:如为"",则为默认值

isTelExplicit

boolean

是否需要手机号外显例如:使用固话外显则为 false ,使用手机号外显则为 true

extendNum

String

分机号(非必填)

tiPhoneManagerCallBacks

TiPhoneManagerCallBacks

回调监听

  • crmId配套crmIdPassword使用,cno配套token使用,二者选其一,如都传递则以 crmId + crmIdPassword 为准

  • extendNum 是可选参数,用来在上线时指定分机号,如果 extendNum 为 null 或 ““,则不指定分机号的loginTiPhone功能一致

示例代码:

    /**
     * 座席上线接口
     *
     * @param strPlatformUrl          平台url
     * @param enterpriseId            企业编号
     * @param crmId                   员工工号
     * @param crmIdPassword           员工密码
     * @param bindTel                 绑定手机号
     * @param showName                显示名称
     * @param isTelExplicit           是否需要手机号外显
     * @param extendNum               分机号(非必填)
     * @param tiPhoneManagerCallBacks 参数回调
     */
        TiPhone.getInstance().loginTiPhone(strPlatformUrl,enterpriseId,crmId,crmIdPassword,bindTel,showName,isTelExplicit,extendNum, new TiPhoneManagerCallBacks() {
            @Override
            public void onError(String eventMessage) {

            }

            @Override
            public void onNext(LoginResultBean loginResultBean) {

            }
        });

回调参数LoginResultBean对象说明:

字段 类型 说明

code

int

状态码

message

String

状态说明

cnoNum

String

座席号

状态码对照表:

状态值

说明

200

操作成功

5000

参数验证失败

6000

鉴权失败

6001

没有分配分机号

6002

请求语音发送失败

6003

需要输入语音验证码

6004

语音验证失败

7001

登录失败

7002

退出登录失败

7003

登录失败,座席超过并发限制

8001

更新密码失败

8011

预览外呼失败

8012

更新座席状态失败

8013

获取座席转台失败

  • 出现6003状态值需要用户弹出输入框输入语音验证码,并调用3语音验证方法

3.4.3. 语音验证码验证

如果后台开启了语音验证功能,未验证过的手机号码上线时会收到语音验证码,app调用此接口可以做验证码的校验

参数说明:

参数 类型 说明

code

String

用户收到的验证码内容

示例代码:

    /**
     * 语音验证码验证
     *
     * @param code 语音验证码
     */
    TiPhone.getInstance().confirmVerificationCode(code);

3.4.4. 座席下线

调用后台座席下线的接口同时释放SDK的资源

示例代码:

    /**
     * 座席下线
     */
    TiPhone.getInstance().logoutWebSocket();

3.4.5. 拨打电话

外呼功能,并可根据需要设置部分参数

参数说明:

参数 类型 说明

phoneNumber

String

电话号码

obClid

String

客户外显号码

requestUniqueId

String

通话的唯一标识,如果传入是空则自动生成并且通过消息返回

userField

Map<String,String>

用户自定义参数例子如下

自定义参数传值例子:

    // 假设要传如下键值对数据(键和值的总字符数不建议超过 100 字符,底层协议帧无法传输过长的数据)
    // id:90007573
    // workNum:1026658
    // depId:340179
    HashMap<String,String> userField = new HashMap<>();
    // 拼接 JSON String , 总字符数不超过 250 字符(含转义字符)
    String jsonString = "{\"id\":\"90007573\",\"workNum\":\"1026658\",\"depId\":\"340179\"}";
    // 使用 callVariables 作为 key,使用指定格式的 JSON 字符串作为 value
    userField.put("callVariables",jsonString);
    TiPhone.getInstance().call( "156xxxx1222","","",userField);

示例代码:

    /**
     * 拨打电话
     *
     * @param phoneNumber     电话号码
     * @param obClid          客户外显号码
     * @param requestUniqueId 通话的唯一标识,如果传入是空则自动生成并且通过消息返回
     * @param userField       用户自定义参数 注:key/value 键值对最多支持5对,key小于20字节,value小于100字节
     */
    TiPhone.getInstance().call( phoneNumBuffer.toString(),"","",null);

3.4.6. 注册事件回调接口

注册外呼事件的监听,根据事件可以做一些相应的处理

TiPhone.getInstance().setOnEventListener(new OnEventListener() {
            @Override
            public void onError(String s) {

            }

            @Override
            public void onEventChange(String event, String msg) {

            }

            @Override
            public void onDestroy() {

            }
        });

event 说明:

信息类型 event 说明

server返回信息

registered

注册成功

server返回信息

registration_failed

注册失败

server返回信息

calling

开始呼叫

server返回信息

ringing

对端开始响铃(无铃声)

server返回信息

progress

对端开始响铃(有铃声)

server返回信息

accepted

对方接听

server返回信息

hangup

挂断

server返回信息

paramsKeyIncorrect

自定义参数 Key 不合法

server返回信息

paramsValueIncorrect

自定义参数 Value 不合法

server返回信息

paramsMountIncorrect

自定义参数个数超过最大值(5个)

server返回信息

paramsKeyUsed

参数已经被使用,请更换一个 key 名称

server返回信息

paramsRequestUniqueId

msg 参数返回 sdk 生成的唯一 Id

server返回信息

repeatCall

上次拨打未结束

server返回信息

mediaStatInfo

获取的媒体信息;接通后会1s定时收到媒体数据,可以在对方接通后再解析这个消息

server返回信息

netIOFailed

网络较弱以至于中断了链接,通话会自动结束

server返回信息

netPeerClosed

对端关闭以至于中断了链接,通话会自动结束,错误信息,暂时不需要处理

server返回信息

mediaStatQosGood

通话网络优信息

server返回信息

mediaStatQosBad

通话网络差

server返回信息

mediaStatQosCommon

通话网络中

  • 通话网络状态可根据业务需求处理相应回调

3.4.7. 注册呼入消息监听

注册呼入事件的监听,根据事件可以做一些相应的处理

参数说明:

参数 类型 说明

context

Context

上下文

IIncomingMessageListener

IIncomingMessageListener

监听回调

  • 该监听需在上线成功后调用,即loginTiPhone方法成功后,建议在MainActivity中调用

        TiPhone.getInstance().setIncomingMessageListener(context, new IIncomingMessageListener() {
            @Override
            public void onMessage(String message) {
                Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(String errorMsg) {
                Toast.makeText(MainActivity.this, errorMsg, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onWebSocketMessage(String errorMsg){
                Toast.makeText(MainActivity.this, errorMsg, Toast.LENGTH_SHORT).show();
            };
        });

回调方法 onMessage 参数说明(基于后台配置):

字段 类型 说明

message

String

回调为jsonObject的String回调示例

{
    "customerNumber": "xxxxxxxxxxxx",  //回呼电话号码
    "mainUniqueId": "sip-2-1585193326.2224"  //通话唯一id
}

回调方法 onError 参数说明:

字段 类型 说明

errorMsg

String

错误说明

回调方法 onWebSocketMessage 参数说明:

字段 类型 说明

errorMsg

String

错误说明

3.4.8. 挂断电话

挂断当前通话,同时释放部分资源

tiPhone.hangup();

3.5. 其他功能

3.5.1. 发送DTMF消息(信令方式)

发送DTMF消息(信令方式),依赖服务器处理,不需要做间隔等设置

    /**
    *  发送DTMF消息(信令方式),依赖服务器处理,不需要做间隔等设置(注,由于网络等不可控因素,可以对比俩种DTMF发送方式选择其中一种效果更好的使用)
     * @param tones        所需要发送的DTMF消息.
     * @param duration     消息时长 单位:毫秒 该参数指示每个在tones参数中传递的字符。持续时间不能超过小于6000ms或小于70ms
     * @param interToneGap 消息间隔 单位:毫秒 该参数表示字符之间的间隔,此参数必须至少为50ms,但应尽可能短
     */
     TiPhone.getInstance().sendDTMFSignaling(String tones);
  • 由于网络等不可控因素,可以对比俩种DTMF发送方式选择其中一种效果更好的使用

3.5.2. 发送DTMF消息

对发送DTMF符号的任务进行排队。处理tones参数作为一系列字符。字符0到9、A到D、#和*,生成相关的DTMF符号。字符a到d与A到D是等效的。字符","表示在处理tones参数中的下一个字符之前延迟2秒

    /**
    * 对发送DTMF符号的任务进行排队。处理tones参数作为一系列字符。字符0到9、A到D、#和*,生成相关的DTMF符号。字符a到d与A到D是等效的。字符","表示在处理tones参数中的下一个字符之前延迟2秒
     * @param tones        所需要发送的DTMF消息.
     * @param duration     消息时长 单位:毫秒 该参数指示每个在tones参数中传递的字符。持续时间不能超过小于6000ms或小于70ms
     * @param interToneGap 消息间隔 单位:毫秒 该参数表示字符之间的间隔,此参数必须至少为50ms,但应尽可能短
     */
     TiPhone.getInstance().sendDTMF(String tones, int duration, int interToneGap);

3.5.3. 设置禁音/恢复音量

设置禁音/恢复音量

    /**
     * 禁音/恢复音量
     *
     * @return true  禁音
     *         false 恢复音量(默认)
     */
     TiPhone.getInstance().setMicrophoneMute(boolean muted);

3.5.4. 获取扬声器启用状态

获取扬声器状态启用状态

    /**
     * 获取扬声器状态启用状态
     *
     * @return true  扬声器已开启,语音会输出到扬声器
     *         false 扬声器未开启,语音会输出到听筒
     */
    TiPhone.getInstance().isSpeakerphoneEnabled();

3.5.5. 设置启用/关闭扬声器播放

设置启用/关闭扬声器播放

    /**
     * 启用/关闭扬声器播放
     *
     * @param enabled true:启用扬声器播放
     *                false:关闭扬声器播放
     */
    TiPhone.getInstance().setEnableSpeakerphone(enabled);

3.5.6. 设置是否开启Log日志

设置是否开启Log日志

  • 安卓 TiPhone SDK 日志路径为: /内部存储/Android/data/包名/cache

    /**
     * 开启log
     *
     * @param isDebug true:开启
     *                false:关闭
     */
    TiPhone.getInstance().setDebug(isDebug);

3.5.7. 设置是否使用手机号外显

设置是否使用手机号外显

    /**
     * 配置手机号外显
     *
     * @param isTelExplicit true:使用手机号码外显
     *                      false:使用固话号码外显
     */
    TiPhone.getInstance().setTelExplicit(true);

4. iOS开发文档

版本: 10.2.8.4

4.1. 简介

欢迎使用“AICC”的移动端开发者工具套件(SDK)。

当前文档是对iOS平台SDK的接入说明文档,可以在您的APP中快速集成拨打电话的功能。提供了方便快捷的接入,简单高效的接口,可快速实现应用在移动端的外呼。

4.2. 接入SDK

4.2.1. 本地接入

Xcode环境下: 将文件 TiPhone.framework 和 WebRTC.framework 添加到可执行target中即可

TiPhoneSDK.framework 为 Do Not Embed

WebRTC.framework 为 Embed & Sign

由于内部使用了C++的混编方案,调用的文件需要将m文件改为mm即可。

编译时支持 armv7,arm64和x86_64平台;

4.2.2. 添加权限

在info.plist清单文件添加以下权限

Privacy - Camera Usage Description
Privacy - Microphone Usage Description

4.2.3. 环境要求

名称 版本

iOS

9.1+

Arch

armv7 arm64 x86_64

4.4. 实现拨打电话功能

4.4.1. 初始化

TiPhone是核心类 用于初始化,控制音视频和数据传输等

/**
 获取实例
 */
+(id)shareInstance;

4.4.2. 座席上线

使用员工、编号、密码

通过 员工编号(crmId) + 员工密码(crmPassword) 上线

/**
 座席上线接口
 @param strPlatform 平台url
 @param strEnterpriseId 企业id
 @param strCrmId 员工工号
 @param strCrmPassword 员工密码
 @param strCno 座席工号
 @param strEnterpriseToken 企业的token值
 @param strBindTel 所要绑定的手机号码
 @param showName 系统内部显示名称
 @param isTelObClid 是否需要手机号外显
 @param successBlock  登录成功的回调
 @param verificationBlock 所绑定的手机需要语音验证
 @param errorBlock   登录失败的回调 [status:失败的错误码 errorDes:失败的错误描述]
*/
-(void)loginTiPhone:(NSString *)strPlatform enterpriseId:(NSString*)strEnterpriseId crmId:(NSString*)strCrmId crmPassword:(NSString *)strCrmPassword cno:(NSString*)strCno token:(NSString*)strEnterpriseToken bindTel:(NSString *)strBindTel showName:(NSString *)showName isTelObClid:(BOOL)isTelObClid success:(void (^)(NSString *strCno))successBlock verification:(void (^)(void))verificationBlock error:(void (^)(TILoginErrorCode status,NSString *errorDes))errorBlock;
  • strCrmId和strCNO二选一 如果都写上则默认选择员工工号 其中strCrmId和strCrmPassword是一对鉴权方式 strCno和strEnterpriseToken是另一对鉴权方式

使用员工编号、密码、同时指定分机号

通过 员工编号(crmId) + 员工密码(crmPassword)+ 分机号(extendNum) 上线

/**
 座席上线接口(可设置分机号)
 @param strPlatform 平台url
 @param strEnterpriseId 企业id
 @param strCrmId 员工工号
 @param strCrmPassword 员工密码
 @param extenNumber 分机号
 @param strCno 座席工号
 @param strEnterpriseToken 企业的token值
 @param strBindTel 所要绑定的手机号码
 @param showName 系统内部显示名称
 @param isTelObClid 是否需要手机号外显
 @param successBlock  登录成功的回调
 @param verificationBlock 所绑定的手机需要语音验证
 @param errorBlock   登录失败的回调 [status:失败的错误码]

 注: strCrmId和strCNO二选一 如果都写上则默认选择员工工号 其中strCrmId和strCrmPassword是一对鉴权方式  strCno和strEnterpriseToken是一对鉴权方式
*/
-(void)loginTiPhone:(NSString *)strPlatform enterpriseId:(NSString*)strEnterpriseId crmId:(NSString*)strCrmId crmPassword:(NSString *)strCrmPassword extenNumber:(NSString *)extenNumber cno:(NSString*)strCno token:(NSString*)strEnterpriseToken bindTel:(NSString *)strBindTel showName:(NSString *)showName isTelObClid:(BOOL)isTelObClid success:(void (^)(NSString *strCno))successBlock verification:(void (^)(void))verificationBlock error:(void (^)(TILoginErrorCode status,NSString *errorDes))errorBlock;
  • strCrmId和strCNO二选一 如果都写上则默认选择员工工号 其中strCrmId和strCrmPassword是一对鉴权方式 strCno和strEnterpriseToken是另一对鉴权方式

4.4.3. 语音验证码验证

如果后台开启了语音验证功能,未验证过的手机号码上线时会收到语音验证码,app调用此接口可以做验证码的校验

/**
 认证语音验证码
 @param code 输入电话听到的语音验证码
 @param successBlock  验证码确认并登录成功的回调
 @param errorBlock   确认验证码失败的回调 [status:失败的错误码]
*/
-(void)confirmVerify:(NSString *)code success:(void (^)(NSString *strCno))successBlock error:(void (^)(TILoginErrorCode status,NSString *errorDes))errorBlock;

4.4.4. 座席下线

调用后台座席下线的接口同时释放SDK的资源

/// 座席下线
- (void)logoutWebSocket;

4.4.5. 拨打电话

外呼功能,并可根据需要设置部分参数

/**
 拨打电话
 @param obClid 客户外显号码
 @param number 需要拨打的手机号
 @param requestUniqueId 通话的唯一标识 如果传入为@""SDK生成并在消息中返回所生成的唯一标识 P-Tinet-Request-Unique-Id
 @param userField 自定义参数  注:key/value 键值对最多支持5对,key小于20字节,value小于100字节,value必须为json字符串
 ex: {
      @"callVariables":@"{\"id\":\"90007573\",\"workNum\":\"1026658\",\"depId\":\"340179\"}"
    }
*/
-(void)call:(NSString * _Nonnull)obClid number:(NSString *_Nonnull) number
  requestUniqueId:(NSString* _Nonnull)requestUniqueId userField:(NSDictionary *_Nullable)userField error:(void (^)(TILoginErrorCode status,NSString *errorDes))errorBlock;

4.4.6. 回呼监听

/**
 设置回呼监听 需要在登录成功之后调用
@param listener TiIncomingMessageListener接口的实例
*/
-(void)setIncomingMessageListener:(id<TiIncomingMessageListener>)listener error:(void (^)(NSString *errorDes))errorBlock;

4.4.7. 注册事件回调接口

/**
 设置回调接口(回调消息为拨打电话之后的消息)
 @param listener TiPhoneMessageListener接口的实例
 */
-(void)setOnEventListener:(id<TiPhoneMessageListener>)listener;
const static int MESSAGE_REGISTERED            = 101;    // 注册成功
const static int MESSAGE_REGISTER_FAILED       = 102;    // 注册失败
const static int MESSAGE_CALLING               = 103;    // 响铃中
const static int MESSAGE_ACCEPTED              = 104;    // 已接通
const static int MESSAGE_HANGUP                = 105;    // 已挂断
const static int MESSAGE_ERROR                 = 400;    // 错误信息
// 监听接口定义
@protocol TiPhoneMessageListener
- (void)onPushMessage:(int)msgId withParam:(NSString*)param;
@end

4.4.8. 注册呼入事件的监听

/**
 座席状态监听代理 根据内部座席状态的改变回调,设置在
*/
@protocol TiIncomingMessageListener
- (void)onIncomingMessage:(NSString*)param;

/// 被踢下线、其他端登录事件
- (void)onKickout;
@end

4.4.9. 挂断电话

挂断当前通话,同时释放部分资源

-(void)hangup;

4.5. 其他功能

4.5.1. 发送DTMF消息(信令方式)

发送DTMF消息(信令方式),依赖服务器处理,不需要做间隔等设置

/**
 发送DTMF消息(信令方式),依赖服务器处理,不需要做间隔等设置(注,由于网络等不可控因素,可以对比俩种DTMF发送方式选择其中一种效果更好的使用)

 @param tones          所需要发送的DTMF消息.
*/
-(void)sendDTMFSignaling:(NSString *)tones;
  • 由于网络等不可控因素,可以对比俩种DTMF发送方式选择其中一种效果更好的使用

4.5.2. 发送DTMF消息

对发送DTMF符号的任务进行排队。处理tones参数作为一系列字符。字符0到9、A到D、#和*,生成相关的DTMF符号。字符a到d与A到D是等效的。字符","表示在处理tones参数中的下一个字符之前延迟2秒

/**
* 对发送DTMF符号的任务进行排队。处理tones参数作为一系列字符。字符0到9、A到D、#和*,生成相关的DTMF符号。字符a到d与A到D是等效的。字符","表示在处理tones参数中的下一个字符之前延迟2秒
* @param tones          所需要发送的DTMF消息.
* @param duration       消息时长 单位:秒  该参数指示每个在tones参数中传递的字符。持续时间不能超过小于6000ms或小于70ms
* @param interToneGap   消息间隔 单位:秒  该参数表示字符之间的间隔,此参数必须至少为50ms,但应尽可能短
*/
-(void)sendDTMF:(NSString *)tones duration:(NSTimeInterval)duration interToneGap:(NSTimeInterval)interToneGap;

4.5.3. 设置禁音/恢复音量

设置禁音/恢复音量

/**
* @param muted  是否禁音
*                   TRUE    :禁音
*                   FALSE   :恢复音量(默认)
*/
-(void)setMicrophoneMute:(BOOL)muted;

4.5.4. 获取扬声器启用状态

获取扬声器启用状态

/**
* @return TRUE  扬声器已开启,语音会输出到扬声器
* @return FALSE 扬声器未开启,语音会输出到听筒
*/
-(BOOL)isSpeakerphoneEnabled;

4.5.5. 设置启用/关闭扬声器

设置启用/关闭扬声器

/**
* @param enabled 是否将音频外放
*                   TRUE    :切换到外放
                    FALSE   :切换到听筒。
*/
-(void)setEnableSpeakerphone:(BOOL)enabled;

4.5.6. 获取SDK版本号

获取SDK版本号

/**
* 获取SDK版本号
*/
-(NSString *)getVersion;

4.5.7. 设置是否开启Log日志

设置是否开启Log日志

/**
* log文件名称   :tiphone_sdk_(版本号)_ + (当前日期) + .txt
* log文件路径在当前应用的Document下;默认最大100MB,如果超过会删除
*
* @param isDebug 是否开启log
*                   TRUE    :开启打印log
*                   FALSE   :关闭打印log
*/
-(void)setDebug:(BOOL)isDebug;

4.5.8. 设置是否使用手机号外显

设置是否使用手机号外显

/**
 设置是否切换手机号外显还是固话外显
 @isTelObClid 是否需要手机号外显
*/
-(void)setTelObClid:(BOOL)isTelObClid;

4.5.9. 监听websocket消息

@property (nonatomic, weak) id <TiPhoneWebSocketDelegate> webSocketDelegate;

@protocol TiPhoneWebSocketDelegate <NSObject>
- (void)onWebSocketMessage:(NSString *)param;
@end