|
|
@@ -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)
|
|
|
}
|