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();
}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)事件回调
//
/////////////////////////////////////////////////////////////////////////////////
}