소스 검색

鸿德堂 SIP外呼相关

Long 1 주 전
부모
커밋
ebf84846b6
1개의 변경된 파일11개의 추가작업 그리고 0개의 파일을 삭제
  1. 11 0
      src/utils/SoftPhoneService.js

+ 11 - 0
src/utils/SoftPhoneService.js

@@ -45,6 +45,8 @@ class SoftPhoneService {
   // 通话管理
   _currentCallUuid = ''
   _callUuidMap = {}
+  /** 已发起同步的 UUID 集合,防止重复调用 callEndSyncByUuid */
+  _syncedCallUuids = new Set()
   _callDuration = '00:00'
   _dialNumber = ''
   /** UI 展示用号码(掩码/密文),优先于 _dialNumber 显示 */
@@ -650,10 +652,18 @@ class SoftPhoneService {
       return
     }
 
+    // 防止同一 UUID 被多个 IPCC 事件重复同步(CALLER_HANGUP / CALLEE_HANGUP / OUTBOUND_FINISHED 可能同时触发)
+    if (this._syncedCallUuids.has(callUuid)) {
+      console.warn('[通话结束] UUID 已同步, 跳过:', callUuid)
+      return
+    }
+    this._syncedCallUuids.add(callUuid)
+
     setTimeout(() => {
       callEndSyncByUuid({ uuid: callUuid })
         .then(() => {
           console.log('[通话结束] 后端同步成功, UUID:', callUuid)
+          this._syncedCallUuids.delete(callUuid)
           const keys = Object.keys(this._callUuidMap)
           if (keys.length > 10) {
             delete this._callUuidMap[keys[0]]
@@ -661,6 +671,7 @@ class SoftPhoneService {
         })
         .catch(err => {
           console.error('[通话结束] 后端同步失败:', err)
+          this._syncedCallUuids.delete(callUuid)
         })
     }, 10000)
   }