Перевести звонки на SendSignal с client key

This commit is contained in:
AidarKC
2026-08-09 20:09:54 +04:00
parent 5c38f8f0d8
commit c511910b8f
11 changed files with 556 additions and 43 deletions
+18 -1
View File
@@ -297,6 +297,7 @@
Первый целевой сценарий:
- `remote AddBlock via homeserver session`
- межсессионная доставка звонковых `call_*` сигналов между устройствами пользователя
То есть телефон без локального `blockchain.key` может:
@@ -336,6 +337,12 @@
- запрос должен быть подписан и `session key`, и `client key`;
- в будущем для отдельных wallet-сценариев `clientSignatureB64` может быть пустой.
Для звонковых сигналов `signalType = call_*` правило строже:
- `clientSignatureB64` обязателен;
- сервер отклоняет такой `SendSignal`, если `client key` подпись не передана;
- это правило действует и для `single_session`, и для `all_sessions`.
### Запрос в одну сессию
```json
@@ -366,11 +373,20 @@
"ok": true,
"payload": {
"deliveredCount": 1,
"deliveredSessionIds": ["sess-hs-001"]
"deliveredSessionIds": ["sess-hs-001"],
"deliveredWsSessions": 1,
"deliveredFcmSessions": 0,
"deliveredWebPushSessions": 0
}
}
```
Для `call_invite` с `targetMode = "all_sessions"` сервер может дополнительно отправить offline web-push в те сессии адресата, которые сейчас не подключены по WebSocket. В таком случае:
- `deliveredWsSessions` — сколько сессий получили `IncomingSignal` по WebSocket;
- `deliveredWebPushSessions` — сколько offline-сессий получили web-push;
- `deliveredFcmSessions` пока дублирует тот же счётчик push-доставки и зарезервирован под отдельные push-каналы.
### Событие на принимающей стороне
```json
@@ -428,6 +444,7 @@
- `404 / USER_NOT_FOUND` — логин адресата не найден.
- `400 / BAD_DATA` — сервер не смог обработать `data`.
- `400 / BAD_SESSION_SIGNATURE` — некорректная подпись `session key`.
- `400 / CLIENT_SIGNATURE_REQUIRED` — для `call_*` сигнала не передана обязательная подпись `client key`.
- `400 / BAD_CLIENT_SIGNATURE` — некорректная подпись `client key`.
- `404 / SESSION_NOT_FOUND` — при `single_session` целевая сессия не найдена или не онлайн.
- `404 / NO_TARGET_SESSIONS` — при `all_sessions` у пользователя сейчас нет активных онлайн-сессий.