---
read_when:
    - Создание или отладка клиентов узлов (режим узла iOS/Android/macOS)
    - Исследование сбоев сопряжения или аутентификации моста
    - Аудит поверхности Node, раскрываемой Gateway
summary: 'Исторический протокол моста (устаревшие узлы): TCP JSONL, сопряжение, RPC с областью действия'
title: Протокол моста
x-i18n:
    generated_at: "2026-06-28T22:54:52Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 485d18f94b731018c6e0df493068b0b6aceff9afba6bebf1350db63c04cee98c
    source_path: gateway/bridge-protocol.md
    workflow: 16
---

<Warning>
TCP-мост был **удален**. Текущие сборки OpenClaw не поставляют слушатель моста, а ключей конфигурации `bridge.*` больше нет в схеме. Эта страница сохранена только для исторической справки. Используйте [Протокол Gateway](/ru/gateway/protocol) для всех клиентов узлов и операторов.
</Warning>

## Зачем он существовал

- **Граница безопасности**: мост предоставляет небольшой список разрешений вместо
  полной поверхности API Gateway.
- **Сопряжение + идентичность узла**: допуск узла контролируется Gateway и привязан
  к токену для конкретного узла.
- **UX обнаружения**: узлы могут обнаруживать Gateway через Bonjour в LAN или подключаться
  напрямую через tailnet.
- **Loopback WS**: полная плоскость управления WS остается локальной, если не туннелируется через SSH.

## Транспорт

- TCP, по одному JSON-объекту на строку (JSONL).
- Необязательный TLS (когда `bridge.tls.enabled` имеет значение true).
- Исторический порт слушателя по умолчанию был `18790` (текущие сборки не запускают
  TCP-мост).

Когда TLS включен, TXT-записи обнаружения включают `bridgeTls=1` плюс
`bridgeTlsSha256` как несекретную подсказку. Обратите внимание, что TXT-записи Bonjour/mDNS
не аутентифицированы; клиенты не должны считать объявленный отпечаток
авторитетным закреплением без явного намерения пользователя или другой внеполосной проверки.

## Рукопожатие + сопряжение

1. Клиент отправляет `hello` с метаданными узла + токеном (если уже сопряжен).
2. Если сопряжение отсутствует, Gateway отвечает `error` (`NOT_PAIRED`/`UNAUTHORIZED`).
3. Клиент отправляет `pair-request`.
4. Gateway ожидает одобрения, затем отправляет `pair-ok` и `hello-ok`.

Исторически `hello-ok` возвращал `serverName`; размещенные поверхности Plugin теперь
объявляются через `pluginSurfaceUrls`. Canvas/A2UI использует
`pluginSurfaceUrls.canvas`; устаревший псевдоним `canvasHostUrl` не является частью
переработанного протокола.

## Фреймы

Клиент → Gateway:

- `req` / `res`: RPC Gateway с ограниченной областью действия (чат, сеансы, конфигурация, здоровье, voicewake, skills.bins)
- `event`: сигналы узла (голосовая расшифровка, запрос агента, подписка на чат, жизненный цикл exec)

Gateway → Клиент:

- `invoke` / `invoke-res`: команды узла (`canvas.*`, `camera.*`, `screen.record`,
  `location.get`, `sms.send`)
- `event`: обновления чата для сеансов с подпиской
- `ping` / `pong`: keepalive

Устаревшее применение списка разрешений находилось в `src/gateway/server-bridge.ts` (удалено).

## События жизненного цикла exec

Узлы могут отправлять события `exec.finished`, чтобы показывать завершенную активность `system.run`.
Они сопоставляются с системными событиями в Gateway. (Устаревшие узлы могут все еще отправлять `exec.started`.)
Узлы могут отправлять `exec.denied` для отклоненных попыток `system.run`; Gateway принимает
событие как терминальный отказ и не ставит в очередь системное событие и не пробуждает работу агента.

Поля полезной нагрузки (все необязательны, если не указано иное):

- `sessionKey` (обязательно): сеанс агента для корреляции событий и, для
  `exec.finished`, доставки системного события.
- `runId`: уникальный идентификатор exec для группировки.
- `command`: исходная или отформатированная строка команды.
- `exitCode`, `timedOut`, `success`, `output`: сведения о завершении (только finished).
- `reason`: причина отказа (только denied).

## Историческое использование tailnet

- Привяжите мост к IP tailnet: `bridge.bind: "tailnet"` в
  `~/.openclaw/openclaw.json` (только исторически; `bridge.*` больше недействителен).
- Клиенты подключаются через имя MagicDNS или IP tailnet.
- Bonjour **не** пересекает сети; при необходимости используйте ручной хост/порт или wide-area DNS-SD.

## Версионирование

Мост был **неявной v1** (без согласования min/max). Этот раздел приведен
только для исторической справки; текущие клиенты узлов и операторов используют WebSocket
[Протокол Gateway](/ru/gateway/protocol).

## Связанные материалы

- [Протокол Gateway](/ru/gateway/protocol)
- [Узлы](/ru/nodes)
