From d910d48ee8fd56f799c970b4553a0ad1c549021f Mon Sep 17 00:00:00 2001 From: crm-calls agent Date: Wed, 14 Oct 2026 20:59:49 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BA=D0=BD=D0=BE=20=D0=B7=D0=B2=D0=BE?= =?UTF-8?q?=D0=BD=D0=BA=D0=B0:=20=D0=BF=D1=80=D0=B8=20connection.passwordR?= =?UTF-8?q?equired=20(=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA=20=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D1=91=D0=BA=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8)=20=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=20=D0=B8=20=D0=B2=D1=85=D0=BE=D0=B4=D0=B8=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BD=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- calls/frontend/src/Call.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/calls/frontend/src/Call.tsx b/calls/frontend/src/Call.tsx index 3b4f91e..2108d23 100644 --- a/calls/frontend/src/Call.tsx +++ b/calls/frontend/src/Call.tsx @@ -70,7 +70,7 @@ export function BrowserCall(props: { session: string; onSessionLost: (msg: strin setMsg(why); if (fails > 6) { setPhase("error"); return; } setPhase("retry"); - timer = window.setTimeout(() => void start(), Math.min(30, 2 ** (fails - 1)) * 1000); + timer = window.setTimeout(() => void start(), fails === 1 ? 300 : Math.min(30, 2 ** (fails - 1)) * 1000); } async function start() { @@ -108,9 +108,12 @@ export function BrowserCall(props: { session: string; onSessionLost: (msg: strin const err = (e as { error?: { name?: string; isFatal?: boolean; type?: string } }).error ?? {}; diag.errors.push(`${err.type ?? ""}:${err.name ?? ""}${err.isFatal ? ":fatal" : ""}`); if (diag.errors.length > 30) diag.errors.shift(); - // Фатальная ошибка соединения или конференции (в т. ч. отказ по истёкшему пропуску при переподключении): - // Jitsi сам уже не восстановится — входим заново с новым пропуском. - if (err.isFatal && !hungUp && jitsi === j) retryLater("з'єднання перервалося"); + // Jitsi сам уже не восстановится — входим заново с новым пропуском: + // • фатальная ошибка соединения или конференции; + // • отказ по пропуску при переподключении: после долгого обрыва сети пропуск уже истёк, и prosody + // отвечает connection.passwordRequired (Jitsi не помечает её фатальной и показывает окно логина). + const authFail = /passwordRequired|authenticationRequired|notAllowed|notAuthorized/i.test(err.name ?? ""); + if ((err.isFatal || authFail) && !hungUp && jitsi === j) retryLater(authFail ? "пропуск застарів, отримую новий" : "з'єднання перервалося"); }); }