---
read_when:
    - Налагодження або налаштування доступу до WebChat
summary: Статичний хостинг WebChat у loopback і використання Gateway WS для інтерфейсу чату
title: WebChat
x-i18n:
    generated_at: "2026-04-27T19:49:02Z"
    model: gpt-5.4
    provider: openai
    source_hash: d8a4fef0aab37ca82bff249c6b31eb65475f12c16dfb9b86ddd62c1a938a34f3
    source_path: web/webchat.md
    workflow: 15
---

Статус: інтерфейс чату SwiftUI для macOS/iOS напряму взаємодіє з Gateway WebSocket.

## Що це таке

- Нативний інтерфейс чату для gateway (без вбудованого браузера і без локального статичного сервера).
- Використовує ті самі сеанси й правила маршрутизації, що й інші канали.
- Детермінована маршрутизація: відповіді завжди повертаються до WebChat.

## Швидкий старт

1. Запустіть gateway.
2. Відкрийте інтерфейс WebChat (застосунок macOS/iOS) або вкладку чату в Control UI.
3. Переконайтеся, що налаштовано дійсний шлях автентифікації gateway (типово — shared-secret, навіть у loopback).

## Як це працює (поведінка)

- Інтерфейс підключається до Gateway WebSocket і використовує `chat.history`, `chat.send` і `chat.inject`.
- `chat.history` обмежений для стабільності: Gateway може обрізати довгі текстові поля, пропускати важкі метадані та замінювати надто великі записи на `[chat.history omitted: message too large]`.
- `chat.history` дотримується активної гілки транскрипту для сучасних append-only файлів сеансу, тож покинуті гілки перезапису й витіснені копії промптів не відображаються у WebChat.
- Control UI об’єднує дублікати поточних відправлень для того самого сеансу, повідомлення й вкладень перед створенням нового run id для `chat.send`; Gateway усе одно дедуплікує повторні запити, що повторно використовують той самий idempotency key.
- `chat.history` також нормалізується для відображення: з видимого тексту прибираються контекст OpenClaw лише для runtime, обгортки вхідних конвертів, вбудовані теги директив доставки на кшталт `[[reply_to_*]]` і `[[audio_as_voice]]`, XML-пейлоади викликів інструментів у plain text (зокрема `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і обрізані блоки викликів інструментів), а також ASCII/full-width токени керування моделі, що просочилися; записи помічника, весь видимий текст яких складається лише з точного silent token `NO_REPLY` / `no_reply`, пропускаються.
- Пейлоади відповідей, позначені як reasoning (`isReasoning: true`), виключаються з вмісту повідомлень помічника у WebChat, тексту повторного відтворення транскрипту та аудіоблоків, щоб пейлоади лише з міркуваннями не з’являлися як видимі повідомлення помічника або відтворюване аудіо.
- `chat.inject` напряму додає нотатку помічника до транскрипту й транслює її в інтерфейс (без запуску агента).
- Перервані запуски можуть залишати частковий вивід помічника видимим в інтерфейсі.
- Gateway зберігає частковий текст помічника з перерваних запусків в історії транскрипту, коли існує буферизований вивід, і позначає такі записи метаданими переривання.
- Історія завжди отримується з gateway (без локального відстеження файлів).
- Якщо gateway недосяжний, WebChat доступний лише для читання.

## Панель інструментів агентів у Control UI

- Панель Tools у розділі `/agents` в Control UI має два окремі подання:
  - **Доступно зараз** використовує `tools.effective(sessionKey=...)` і показує, що поточний сеанс справді може використовувати під час runtime, зокрема інструменти, що належать core, Plugin і каналу.
  - **Конфігурація інструментів** використовує `tools.catalog` і залишається зосередженою на профілях, перевизначеннях і семантиці каталогу.
- Доступність під час runtime прив’язана до сеансу. Перемикання між сеансами на тому самому агенті може змінити список **Доступно зараз**.
- Редактор конфігурації не означає доступність під час runtime; фактичний доступ і далі визначається пріоритетом політик (`allow`/`deny`, перевизначеннями для окремого агента та provider/channel).

## Віддалене використання

- Віддалений режим тунелює Gateway WebSocket через SSH/Tailscale.
- Вам не потрібно запускати окремий сервер WebChat.

## Довідник з конфігурації (WebChat)

Повна конфігурація: [Конфігурація](/uk/gateway/configuration)

Параметри WebChat:

- `gateway.webchat.chatHistoryMaxChars`: максимальна кількість символів для текстових полів у відповідях `chat.history`. Коли запис транскрипту перевищує цей ліміт, Gateway обрізає довгі текстові поля й може замінювати надто великі повідомлення плейсхолдером. Клієнт також може передати `maxChars` у запиті, щоб перевизначити це значення за замовчуванням для одного виклику `chat.history`.

Пов’язані глобальні параметри:

- `gateway.port`, `gateway.bind`: хост/порт WebSocket.
- `gateway.auth.mode`, `gateway.auth.token`, `gateway.auth.password`:
  автентифікація WebSocket через shared-secret.
- `gateway.auth.allowTailscale`: вкладка чату браузерного Control UI може використовувати заголовки ідентифікації Tailscale Serve, якщо це ввімкнено.
- `gateway.auth.mode: "trusted-proxy"`: автентифікація через reverse proxy для браузерних клієнтів за identity-aware **не-loopback** джерелом proxy (див. [Автентифікація Trusted Proxy](/uk/gateway/trusted-proxy-auth)).
- `gateway.remote.url`, `gateway.remote.token`, `gateway.remote.password`: цільовий віддалений gateway.
- `session.*`: сховище сеансів і типові значення основного ключа.

## Пов’язане

- [Control UI](/uk/web/control-ui)
- [Панель керування](/uk/web/dashboard)
