Клиент-серверный протокол
Актуально для: SimpleTwo 0.9.x · Версия протокола: 4 · Проверено: 24.10.2026
Это контракт, а не описание текущей реализации: то, что здесь написано, продукт обязан соблюдать, а менять это можно только по правилам из §14. Страница адресована тем, кто пишет собственного клиента, бота, мост или интеграцию.
1. Единственное правило, из которого следует остальное
Идентификатор — серверный, имя — читательское, а то, что написал клиент, никогда не является удостоверением личности.
Отправителя аутентифицировала служба — значит, только она может сказать, кто говорит. Клиент сообщает, что он делает и кому, но никогда — кто он.
Три следствия, применяемые везде ниже:
- Личность проставляет сервер.
sender,from,userпишет служба из аутентифицированной сессии. У типа запроса по возможности просто нет такого поля — чтобы клиент физически не мог его заявить. - Адресацию проверяет сервер.
toсверяется с членством, а не принимается на веру. - Поле, которое нужно игнорировать, должно быть удалено. Поле, которое читателю велено пропускать, — это поле, которому поверит следующий читатель.
2. Транспорт и аутентификация
| База | https://<хост messaging>/v1 |
| Аутентификация | Authorization: Bearer <токен> в каждом запросе, включая рукопожатие сокета |
| Боты | тот же заголовок с токеном bot_…; ограничены областями и списком бесед, каждый запрос аудируется, включая чтения |
| Ошибки | JSON {"code": "<идентификатор>", "error": "<фраза>"} |
| События | один WebSocket: GET /v1/ws?token=…&device=… |
Коды состояния несут смысл, и клиент обязан их различать:
| Код | Значит | Что делает клиент |
|---|---|---|
| 400 | запрос неверен или называет неизвестное | это дефект: сообщить, не повторять |
| 401 | токен отсутствует, истёк или отозван | обновить и повторить один раз |
| 403 | аутентифицирован и не имеет права | не повторять: это ответ, а не сбой |
| 404 | нет такого — или нет для этого вызывающего | считать отсутствующим |
| 409 | конфликт состояния (повторное вступление, занятое имя) | разрешить и повторить |
| 410 | этой формы больше нет; в сообщении названа замена | чинить клиент |
| 429 | ограничение частоты | отступить; на сокет это не влияет |
403 намеренно покрывает и «не существует», и «не ваше» везде, где различить их означало бы раскрыть каталог, который вызывающему не виден.