Source: index.js

import TcccWorkstationImpl from './TcccWorkstationImpl';

export {TCCCLoginType,TCCCAudioRoute,TCCCEndReason,TCCCSessionDirection} from './lib/TcccDefines.js';
export {TcccErrorCode} from './TcccCode.js';
import { loggerSdk } from './loggerSdk.js';

const version = '1.05.04';
let tcccSDK = null; // tcccWorkstation 单例

/**
 * Tccc坐席台主要功能类
 *
 * @class TcccWorkstation
 */
export class TcccWorkstation {
    /**
     * 创建 TcccWorkstation 单例
     *
     * @name sharedInstance
     * @function
     * @static
     * @memberof TcccWorkstation
     * @example
     * // 获取tccc主要类
	 * this.tcccSDK = TcccWorkstation.sharedInstance();
     */
    static sharedInstance() {
        if (tcccSDK) {
			return tcccSDK;
		}
        const {appId, osVersion,osName,deviceBrand,deviceModel} = uni.getSystemInfoSync();
		loggerSdk.info(`==>  sharedInstance,version=${version},appId=${appId},osVersion=${osVersion},osName=${osName},deviceBrand=${deviceBrand},deviceModel=${deviceModel}`);
		TcccWorkstationImpl._createInstance();
		tcccSDK = new TcccWorkstation();
		return tcccSDK;
    }

    /**
     * 销毁 TcccWorkstation 单例
     * 
     * @name destroyInstance
     * @function
     * @static
     * @memberof TcccWorkstation
     * @example
     * TcccWorkstation.destroyInstance();
	 * tcccSDK = null;
     */
    static destroyInstance() {
		loggerSdk.info("==> destroyInstance");
        TcccWorkstationImpl._destroyInstance();
        tcccSDK = null;
    }
	/**
	 * @ignore
	 */
	_getInstance() {
		return TcccWorkstationImpl._getInstance();
	}
    /**
     * 设置 TcccWorkstation 事件监听
     * 
     * @name on
     * @function
     * @param {String} event 事件名称
     * @param {Function} callback 事件回调
     * @memberof TcccWorkstation
     *
     * @example
     * this.tcccSDK = TcccWorkstation.sharedInstance(); // 创建 TcccWorkstation 实例
     * this.tcccSDK.on('onError', (res) => {});
     */
    on(event, callback) {
		if ('onNewSession' == event || 'onAccepted' == event) {
			loggerSdk.info("==> handle, event="+ event);
		}
        this._getInstance().on(event, callback);
    }
    
    /**
     * 取消事件绑定<br>
     *
     * @name off
     * @function
     * @param {String} event 事件名称,传入通配符 '*' 会解除所有事件绑定。
     * @memberof TcccWorkstation
     * @example
     *
     * this.tcccSDK.off('*'); // 取消所有绑定的事件
     */
    off(event) {
        loggerSdk.info("==> off, event="+ event);
        this._getInstance().off(event);
    }

    /**
     * 登录 TCCC 呼叫中心
     * 
     * @name login
     * @function
     * @param {TCCCLoginParams} params - 登录参数
     * @param {Number} params.sdkAppId      - 应用标识(必填)
     * @param {String} params.userId        - 用户标识(必填)
     * @param {String} params.password      - 用户密码(非必填)
     * @param {String} params.token         - 用户token(非必填)
     * @param {TCCCLoginType} params.type   - 登录模式,默认是Sip模式。Sip模式下需要userId和password,坐席模式暂时不支持
     * @param {Function} callback    登录成功与否回调
     * @memberof TcccWorkstation
     * 
     * @example
     * this.tcccSDK = TcccWorkstation.sharedInstance(); // 创建 TcccWorkstation 实例
     * this.tcccSDK.login({
	 *	 
	 * },() => {
	 *	 
	 * });
     */
    login(params, callback) {
        loggerSdk.setUserId(`${params.userId}`);
		loggerSdk.setSdkAppId(`${params.sdkAppID}`);
        loggerSdk.info("==> login, params="+JSON.stringify(params));
        this._getInstance().login(params, callback);
    }
    /**
	 * 当网络异常不能恢复的时候调用,通常用于手机切后台后不能恢复。
	 * 不要轻易调用(建议调用checkLogin来判断),建议在手机后台切回前台的时候,checkLogin-->onError-->resetSip-->checkLogin
	 *  在uniapp中调用checkLogin失败errocode=408||503会自动调用resetSip。
	 * @param {boolean} isNeedCallReLogin
	 */
	resetSip(isNeedCallReLogin) {
		loggerSdk.info("==> resetSip, isNeedCallReLogin="+isNeedCallReLogin);
		this._getInstance().resetSip(isNeedCallReLogin, callback);
	}
	
	/**
	 * 检查登录状态。
	 * @param {Object} callback 是否已登录回调
	 */
	checkLogin(callback) {
		loggerSdk.info("==> checkLogin");
		this._getInstance().checkLogin(callback);
	}
	
    /**
     * 退出 TCCC 呼叫中心
     * 
     * @name logout
     * @function
     * @param {Function} callback  退出成功与否回调
	 * 
	 * @memberof TcccWorkstation
     */
    logout(callback) {
        loggerSdk.info("==> logout, userId="+loggerSdk.getUserId());
        this._getInstance().logout(callback);
    }

    /**
     * 发起呼出
     * @function
     * @name call
     * @param {TCCCStartCallParams} params  	- 拨打参数
     * @param {String} params.to      			- 被叫号码(必填),可以是电话号码,使用 UTF-8 编码。
     * @param {String} params.remark        	- 号码备注,在通话条中会替代号码显示(可选)
     * @param {String} params.uui      			- 户自定义数据(可选),传入后可通过 [电话 CDR
     * @param {String} params.skillGroupId      - 指定技能组内绑定的外呼号码(可选)
     * @param {String} params.callerPhoneNumber - 指定外呼号码(可选)
	 * @param {String} params.phoneEncodeType   - 号码加密类型(可选)
     * @param {Function} callback   呼出回调,仅仅表示发起呼叫是否成功。当onNewSession回调了表示新会话。 对端接听用onAccepted,对端挂断用onEnded
	 * 
	 * @memberof TcccWorkstation
	 * 
	 */
    call(params, callback) {
        loggerSdk.info("==> call,params="+JSON.stringify(params));
    	this._getInstance().call(params, callback);
    }

    /**
     * 接听
     * @function
     * @name answer
     * 
     * @param {Function} callback  接听成功与否回调
	 * 
	 * @memberof TcccWorkstation
     */
    answer(callback) {
        loggerSdk.info("==> answer");
        this._getInstance().answer(callback);
    }

    /**
     * 结束会话
	 * @function
     * @name terminate
     * 
	 * @memberof TcccWorkstation
     */
    terminate() {
		loggerSdk.info("==> terminate");
        this._getInstance().terminate();
    }

    /**
     * 发送 DTMF(双音多频信号)
     * @function
     * @name sendDTMF
     * @param {String} digit DTMF参数是一个字符串,可以包含字符 0-9、*、#。
     * @param {Function} callback  发送 DTMF成功与否回调,调用一次就会播放一次按键声音
	 * 
	 * @memberof TcccWorkstation
     */
    sendDTMF(digit, callback) {
        loggerSdk.info("==> sendDTMF digit = "+ digit);
    	this._getInstance().sendDTMF(digit, callback);
    }

    /**
     * 静音
	 * @function
     * @name mute
	 * @memberof TcccWorkstation
     */
    mute() {
        loggerSdk.info("==> mute");
        this._getInstance().mute();
    }

    /**
     * 取消静音
     * @function
	 * @name unMute
	 * @memberof TcccWorkstation
     */
    unMute() {
        loggerSdk.info("==> unMute");
		this._getInstance().unMute();
    }

    /**
    * 4.7 启用音量大小提示。
    * @function
    * 开启此功能后,SDK 会在 {@link ITCCCCallback} 中的 {@link onVoiceVolume} 回调中反馈远端音频的音量大小。
    * @name enableAudioVolumeEvaluation
    * 
    * @note 如需打开此功能,请在 接听或者发起呼叫 之前调用才可以生效。
    * @param interval 设置 onVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于 0
    * @param enable_vad  true:打开本地人声检测 ;false:关闭本地人声检测。默认是FALSE
    则会关闭回调,建议设置为300ms;
	*
	* @memberof TcccWorkstation	
    */
    enableAudioVolumeEvaluation(interval, enable_vad) {
        loggerSdk.info("==> enableAudioVolumeEvaluation,interval="+interval+",enable_vad="+enable_vad);
        this._getInstance().enableAudioVolumeEvaluation(interval, enable_vad);
    }

    /**
     * 4.8 开始播放音乐
     *
     * @param path 音乐路径。
     * @param loopCount 音乐循环播放的次数。取值范围为0 - 任意正整数,默认值:1。1 表示播放音乐一次,以此类推。0表示无限循环,手动停止
     */
    startPlayMusic(path, loopCount) {
        loggerSdk.info("==> startPlayMusic,path="+path+",loopCount="+loopCount);
        this._getInstance().startPlayMusic(path, loopCount);
    }

    /**
     * 4.9 停止播放音乐
     */
    stopPlayMusic() {
        loggerSdk.info("==> stopPlayMusic");
        this._getInstance().stopPlayMusic();
    }
    
    /**
     * 12.2 调用实验性接口
     * @function
     * @name callExperimentalAPI
     * @param commandType 类型
     * @param jsonStr 参数
	 * 
	 * @memberof TcccWorkstation
     */
    callExperimentalAPI(commandType, jsonStr) {
		loggerSdk.info("==> callExperimentalAPI, commandType="+commandType+",jsonStr="+jsonStr);
        this._getInstance().callExperimentalAPI(commandType, jsonStr);
    }

    /**
     * 12.3 设置 Log 输出级别,该方法必须在login前调用才生效
     * @function
     * @name setLogLevel
     *
     * @param level 参见 {@link TCCCLogLevel},默认值:{@link TCCCLogLevelInfo}
	 * 
	 * @memberof TcccWorkstation
     */
    setLogLevel(level) {
		loggerSdk.info("==> setLogLevel,level="+level);
        this._getInstance().setLogLevel(level);
    }

    /**
     * 12.4 启用/禁用控制台日志打印
     * @function
     * @name setConsoleEnabled
     * @param enabled 指定是否启用,默认:禁止状态
	 * 
	 * @memberof TcccWorkstation
     */
    setConsoleEnabled(enabled) {
		loggerSdk.info("==> setConsoleEnabled,enabled="+enabled);
        this._getInstance().setConsoleEnabled(enabled);
    }

    /**
     * 12.5 设置日志文件夹,登录前调用才有效
     *
     * @name setLogDirectory
     * @function
     * @param logPath 日志文件夹路径
	 * 
	 * @memberof TcccWorkstation
     */
    setLogDirectory(logPath) {
		loggerSdk.info("==>  setLogDirectory, logPath="+logPath);
		this._getInstance().setLogDirectory(logPath);
    }
	
	/**
	 * 12.6 开启悬浮窗功能。(暂时未实现,二期规划,不要调用)
     * 
     * @name enableFloatWindow
     * @function
	 * @param {Object} enable 是否开启悬浮窗功能
	 * 
	 * @memberof TcccWorkstation
	 */
	enableFloatWindow(enable) {
		loggerSdk.info("==> enableFloatWindow, enable="+enable);
		this._getInstance().enableFloatWindow(enable);
	}

    /**
     *  获取 SDK 版本信息
     * 
     * @name getVersion
     * @function
	 * @memberof TcccWorkstation
	 * 
     * @returns SDK 版本信息
	 * 
     */
    getVersion() {
        loggerSdk.info("==> getVersion");
    	return this._getInstance().getVersion();
    }
	
	/**
	 * 获取设备管理类 
	 * 
     * @name getDeviceManager
     * @function
	 * @returns {DeviceManager} 设备管理类
	 * @memberof TcccWorkstation
	 */
	getDeviceManager() {
		return this._getInstance().getDeviceManager();
	}
    /////////////////////////////////////////////////////////////////////////////////
    //
    //                      (二)事件回调
    //
    /////////////////////////////////////////////////////////////////////////////////

}