Исправить самообрыв звонка и обновить TURN

This commit is contained in:
AidarKC 2026-06-19 18:25:47 +04:00
parent 722d055e2d
commit 47574100f9
5 changed files with 41 additions and 6 deletions

View File

@ -0,0 +1,14 @@
# Отключение устаревшего TURN-узла `45.136.124.227`
- краткое описание:
- из конфигурации звонков убран устаревший TURN-узел `45.136.124.227:3478`;
- основным и единственным выдаваемым TURN-узлом оставлен `93.170.12.154:3478`.
- что проверять:
- сделать несколько тестовых звонков между разными устройствами/сетями;
- убедиться, что звонок доходит до стадии соединения и появляется звук;
- убедиться, что в логах `CallDeliveryReport` больше не фигурирует `45.136.124.227`.
- ожидаемый результат:
- клиентам больше не выдаётся устаревший TURN-адрес;
- звонки не заваливаются из-за попыток использовать отключённый TURN-узел.
- статус:
- pending

View File

@ -0,0 +1,15 @@
# Фикс самообрыва звонка из-за `stop_call` push своей же сессии
- краткое описание:
- исправлена ситуация, когда активный звонок мог оборваться сразу после соединения;
- причина была в том, что `stop_call` push, предназначенный для других сессий того же пользователя, обрабатывался и в исходной сессии.
- что проверять:
- открыть несколько вкладок/устройств одного пользователя;
- принять звонок на одной сессии;
- убедиться, что активная сессия не обрывает звонок сразу после соединения;
- убедиться, что лишние сессии при этом закрывают свой локальный экран звонка.
- ожидаемый результат:
- звонок не завершается сразу после `call_connected`;
- `accepted_on_other_device` и связанные `stop_call` события больше не убивают исходную активную сессию.
- статус:
- pending

View File

@ -42,14 +42,14 @@ call.ice.turn.password=
# Каждый блок описывает один TURN-узел. Новые узлы добавляются по индексу.
# Приоритет авторизации на узел: sharedSecret -> статические username/password.
# ------------------------------------------------------------
call.ice.turn.servers.1.id=vps-05
call.ice.turn.servers.1.urls=turn:45.136.124.227:3478?transport=udp,turn:45.136.124.227:3478?transport=tcp
call.ice.turn.servers.1.id=promo-node-93
call.ice.turn.servers.1.urls=turn:93.170.12.154:3478?transport=udp,turn:93.170.12.154:3478?transport=tcp
call.ice.turn.servers.1.sharedSecret=def6d444734d380d2f67a9d345b1debf985eaba0973c343e392c060d97c30106
call.ice.turn.servers.1.username=
call.ice.turn.servers.1.password=
call.ice.turn.servers.2.id=promo-node-93
call.ice.turn.servers.2.urls=turn:93.170.12.154:3478?transport=udp,turn:93.170.12.154:3478?transport=tcp
call.ice.turn.servers.2.id=shineup-main-185
call.ice.turn.servers.2.urls=turn:185.229.109.118:3478?transport=udp,turn:185.229.109.118:3478?transport=tcp
call.ice.turn.servers.2.sharedSecret=def6d444734d380d2f67a9d345b1debf985eaba0973c343e392c060d97c30106
call.ice.turn.servers.2.username=
call.ice.turn.servers.2.password=

View File

@ -1,2 +1,2 @@
client.version=1.2.216
server.version=1.2.204
client.version=1.2.217
server.version=1.2.205

View File

@ -1636,7 +1636,13 @@ export async function handleStopCallPush(payload = {}) {
if (!callId) return;
const call = getCall(callId);
if (!call) return;
const fromSessionId = String(payload?.fromSessionId || '').trim();
const reason = String(payload?.reason || 'stop_call_push').trim() || 'stop_call_push';
const currentSessionId = String(state?.session?.sessionId || '').trim();
if (fromSessionId && currentSessionId && fromSessionId === currentSessionId) {
await emitDebug(call, 'info', 'stop_call_push_ignored_for_origin_session', reason);
return;
}
await finalizeCall(call, {
localReasonCode: call.connectedAtMs ? 'completed' : 'no_answer',
debugReason: `stop_call_push:${reason}`,