2.7 KiB
2.7 KiB
Протокол звонков (MVP)
Версия: browser-to-browser, runtime-only signaling.
Цели
- Технические сообщения звонка не сохраняются в БД direct_messages.
- Первый INVITE рассылается всем активным сессиям получателя и дублируется web push.
- Последующие сигналы идут только в конкретную sessionId и не дублируются в push.
Операции API
1) CallInviteBroadcast
Отправляет общий вызов пользователю.
Запрос payload:
toLogin: stringcallId: stringtype: 100(INVITE)
Поведение сервера:
- Рассылает
IncomingCallInviteво все активные WS-сессииtoLogin. - В payload события передаёт:
fromLoginfromSessionId(session инициатора)toLogincallIdtype=100timeMs
- Отправляет web push уведомление о входящем вызове.
Ответ payload:
callIddeliveredWsSessionsdeliveredFcmSessions
2) CallSignalToSession
Отправляет технический сигнал в конкретную сессию.
Запрос payload:
toLogin: stringtargetSessionId: stringcallId: stringtype: intdata: string(для SDP/ICE/служебных строк)
Поведение сервера:
- Ищет только
targetSessionId. - Проверяет, что сессия принадлежит
toLogin. - Отправляет
IncomingCallSignalтолько в эту сессию. - В БД ничего не сохраняет.
- Push не отправляет.
Ответ payload:
delivered: boolean
Коды type
100INVITE110RINGING120ACCEPT130DECLINE_BUSY140TIMEOUT150HANGUP200OFFER210ANSWER220ICE
Правила UI/логики
- Если уже есть активный звонок и пришел новый INVITE -> автоответ
DECLINE_BUSYбез UI. - После ACCEPT
callIdостаётся во всех OFFER/ANSWER/ICE сообщениях до конца звонка. - При параллельных звонках A<->B допускается детерминированное правило, кто создаёт OFFER.
Тайминги MVP
- Ожидание подтверждения/реакции после INVITE: до 5с (у инициатора).
- Ожидание принятия у входящего звонка: 20с.
- Общий лимит ожидания до соединения: 22с.