SHA256
76 lines
2.7 KiB
Markdown
76 lines
2.7 KiB
Markdown
# Протокол звонков (MVP)
|
|
|
|
Версия: browser-to-browser, runtime-only signaling.
|
|
|
|
## Цели
|
|
- Технические сообщения звонка не сохраняются в БД direct_messages.
|
|
- Первый INVITE рассылается всем активным сессиям получателя и дублируется web push.
|
|
- Последующие сигналы идут только в конкретную sessionId и не дублируются в push.
|
|
|
|
## Операции API
|
|
|
|
### 1) CallInviteBroadcast
|
|
Отправляет общий вызов пользователю.
|
|
|
|
Запрос payload:
|
|
- `toLogin: string`
|
|
- `callId: string`
|
|
- `type: 100` (INVITE)
|
|
|
|
Поведение сервера:
|
|
- Рассылает `IncomingCallInvite` во все активные WS-сессии `toLogin`.
|
|
- В payload события передаёт:
|
|
- `fromLogin`
|
|
- `fromSessionId` (session инициатора)
|
|
- `toLogin`
|
|
- `callId`
|
|
- `type=100`
|
|
- `timeMs`
|
|
- Отправляет web push уведомление о входящем вызове.
|
|
|
|
Ответ payload:
|
|
- `callId`
|
|
- `deliveredWsSessions`
|
|
- `deliveredFcmSessions`
|
|
|
|
### 2) CallSignalToSession
|
|
Отправляет технический сигнал в конкретную сессию.
|
|
|
|
Запрос payload:
|
|
- `toLogin: string`
|
|
- `targetSessionId: string`
|
|
- `callId: string`
|
|
- `type: int`
|
|
- `data: string` (для SDP/ICE/служебных строк)
|
|
|
|
Поведение сервера:
|
|
- Ищет только `targetSessionId`.
|
|
- Проверяет, что сессия принадлежит `toLogin`.
|
|
- Отправляет `IncomingCallSignal` только в эту сессию.
|
|
- В БД ничего не сохраняет.
|
|
- Push не отправляет.
|
|
|
|
Ответ payload:
|
|
- `delivered: boolean`
|
|
|
|
## Коды type
|
|
- `100` INVITE
|
|
- `110` RINGING
|
|
- `120` ACCEPT
|
|
- `130` DECLINE_BUSY
|
|
- `140` TIMEOUT
|
|
- `150` HANGUP
|
|
- `200` OFFER
|
|
- `210` ANSWER
|
|
- `220` ICE
|
|
|
|
## Правила UI/логики
|
|
- Если уже есть активный звонок и пришел новый INVITE -> автоответ `DECLINE_BUSY` без UI.
|
|
- После ACCEPT `callId` остаётся во всех OFFER/ANSWER/ICE сообщениях до конца звонка.
|
|
- При параллельных звонках A<->B допускается детерминированное правило, кто создаёт OFFER.
|
|
|
|
## Тайминги MVP
|
|
- Ожидание подтверждения/реакции после INVITE: до 5с (у инициатора).
|
|
- Ожидание принятия у входящего звонка: 20с.
|
|
- Общий лимит ожидания до соединения: 22с.
|