---
read_when:
    - Исследование старого кода клиента Node или архивных журналов сопряжения
    - Аудит возможностей, ранее предоставлявшихся устаревшим интерфейсом Node
summary: 'Исторический протокол моста (устаревшие узлы): TCP JSONL, сопряжение, RPC с ограниченной областью действия'
title: Протокол моста
x-i18n:
    generated_at: "2026-07-13T18:07:52Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 6e8b69c59f2170439f0e7b139bf5bbdb429d7c9d8dde7b36cd64aab63939c95d
    source_path: gateway/bridge-protocol.md
    workflow: 16
---

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

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

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

## Транспорт

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

Когда 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`; теперь размещённые поверхности плагинов объявляются через `pluginSurfaceUrls` в текущем протоколе Gateway (Canvas/A2UI использует `pluginSurfaceUrls.canvas`).

## Кадры

От клиента к Gateway:

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

От Gateway к клиенту:

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

Проверка списка разрешённых операций выполнялась в `src/gateway/server-bridge.ts` (удалено).

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

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

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

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

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

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

## Управление версиями

Мост неявно использовал версию v1 без согласования минимальной и максимальной версий. Текущие клиенты узлов и операторов используют WebSocket-[протокол Gateway](/ru/gateway/protocol), в котором согласовывается диапазон версий протокола.

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

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