|
@@ -17,51 +17,69 @@ const audioRef = ref(null);
|
|
|
|
|
|
const intervalTimer = ref(null);
|
|
|
|
|
|
-const init = () => {
|
|
|
- workbenchApi.getSeatsByUser({ userId: useUser.id }).then(async({ data }) => {
|
|
|
- if (!data) return;
|
|
|
-
|
|
|
+let worker = null;
|
|
|
+const isInitInProgress = ref(false); // 防止 `init()` 被多次调用
|
|
|
+
|
|
|
+const init = async () => {
|
|
|
+ if (isInitInProgress.value) return; // 防止重复初始化
|
|
|
+ isInitInProgress.value = true;
|
|
|
+
|
|
|
+ try {
|
|
|
+ const { data } = await workbenchApi.getSeatsByUser({ userId: useUser.id });
|
|
|
+ if (data) {
|
|
|
await useVoice.HS_CTI_INSTANCE(data.outId);
|
|
|
const voiceStatus = sessionStorage.getItem('VOICE_STATUS');
|
|
|
- /**
|
|
|
- * 如果用户在有登入的情况下,中途关闭麦克风,获取坐席状态仍是 1( getAgentStatus )
|
|
|
- * HSCTIERRORCODE :- - 100001: SDK 状态不可用,CTIStatus 的状态为 Terminated 100002: 获取坐席媒体权限失败
|
|
|
- * AGENTSTATUS : 1 置忙 2 置闲
|
|
|
- * */
|
|
|
- // console.log("坐席状态", useVoice.AGENTSTATUS);
|
|
|
- // console.log("系统状态", useVoice.HSCTIERRORCODE);
|
|
|
- // 目前先只考虑 100001 100002 错误码 处理
|
|
|
-
|
|
|
- setTimeout(async () => {
|
|
|
- if ( [100001, 100002].includes( Number(useVoice.HSCTIERRORCODE) ) ) {
|
|
|
- // 有错误
|
|
|
- useVoice.systemState = false;
|
|
|
+ setTimeout(async () => {
|
|
|
+ if ( [100001, 100002].includes( Number(useVoice.HSCTIERRORCODE) ) ) {
|
|
|
+ useVoice.systemState = false;
|
|
|
+ } else {
|
|
|
+ await useVoice.getAgentStatus();
|
|
|
+ if ( voiceStatus && [1, 2].includes( Number(useVoice.AGENTSTATUS) )) {
|
|
|
+ voiceStatus == 'busy' ? useVoice.setBusy() : useVoice.setIdle();
|
|
|
} else {
|
|
|
- // 正常
|
|
|
- await useVoice.getAgentStatus();
|
|
|
- if ( voiceStatus && [1, 2].includes( Number(useVoice.AGENTSTATUS) )) {
|
|
|
- voiceStatus === 'busy' ? useVoice.setBusy() : useVoice.setIdle();
|
|
|
- } else {
|
|
|
- useVoice.setIdle();
|
|
|
- }
|
|
|
+ useVoice.setIdle();
|
|
|
}
|
|
|
- }, 1000);
|
|
|
- })
|
|
|
-}
|
|
|
+ }
|
|
|
+ }, 2000);
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error("Error in init:", error);
|
|
|
+ } finally {
|
|
|
+ isInitInProgress.value = false;
|
|
|
+ console.log("init complete");
|
|
|
+ }
|
|
|
|
|
|
-onMounted(() => {
|
|
|
- if ( useVoice.isAuthPane ) {
|
|
|
- init();
|
|
|
- intervalTimer.value = setInterval(async () => {
|
|
|
- const sdkRegister = Cookies.get('sdkRegister')
|
|
|
- if (!sdkRegister && !useVoice.noiceBarVisibleState &&useVoice.AGENTSTATUS !=0) {
|
|
|
- await useVoice.unInit()
|
|
|
- init()
|
|
|
- }
|
|
|
- }, 2000);
|
|
|
+};
|
|
|
+const handleWorkerMessage = async (event) => {
|
|
|
+ if (event.data === "check" && useVoice.isAuthPane) {
|
|
|
+ const sdkRegister = Cookies.get("sdkRegister");
|
|
|
+ if (!sdkRegister && !useVoice.noiceBarVisibleState && useVoice.AGENTSTATUS !== 0) {
|
|
|
+ console.log("Reinitializing...");
|
|
|
+ await useVoice.unInit();
|
|
|
+ await init();
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+onMounted(async() => {
|
|
|
+ if(useVoice.isAuthPane){
|
|
|
+ await init();
|
|
|
+ if (!worker) {
|
|
|
+ worker = new Worker(new URL("@/workers/worker.js", import.meta.url), { type: "module" });
|
|
|
+ worker.onmessage = handleWorkerMessage;
|
|
|
+ worker.postMessage("start");
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+onUnmounted(() => {
|
|
|
+ if(worker && useVoice.isAuthPane){
|
|
|
+ worker.postMessage("stop");
|
|
|
+ worker.terminate();
|
|
|
+ worker = null;
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
</script>
|
|
|
|
|
|
<template>
|