Developer and self-hosted
ClickClack
ClickClack подключает OpenClaw к самостоятельно размещённому рабочему пространству ClickClack с помощью полноценных токенов ботов ClickClack.
Используйте этот вариант, если агент OpenClaw должен отображаться как пользователь-бот ClickClack. ClickClack поддерживает независимых служебных ботов и ботов, принадлежащих пользователям; боты, принадлежащие пользователям, сохраняют owner_user_id и получают только предоставленные вами области действия токена.
Быстрая настройка
В ClickClack откройте Workspace settings → Integrations → OpenClaw, создайте бота и скопируйте его токен. Затем настройте канал:
openclaw channels add clickclack --base-url https://clickclack.example.com --token ccb_... --workspace defaultworkspace принимает идентификатор рабочего пространства (wsp_...), слаг или отображаемое имя.
После сохранения channels add проверяет сервер, токен и рабочее пространство, а затем
сообщает, подхватил ли работающий Gateway новую учётную запись. Если OpenClaw
уже запущен, ClickClack подключается автоматически, и вторая команда не
требуется. В противном случае запустите его:
openclaw gatewayДля пошаговой настройки выполните:
openclaw onboardВыберите ClickClack, затем по запросу введите URL-адрес сервера, токен бота и рабочее пространство. После сохранения пошаговая настройка проверяет сервер, токен и рабочее пространство; неудачная проверка не удаляет конфигурацию.
Альтернативный вариант: токен из переменной окружения
Учётная запись по умолчанию может считывать CLICKCLACK_BOT_TOKEN вместо хранения токена
в конфигурации:
export CLICKCLACK_BOT_TOKEN="ccb_..."openclaw channels add clickclack --base-url https://clickclack.example.com --workspace default --use-envopenclaw gatewayИменованные учётные записи должны использовать настроенный токен или файл токена; общая переменная окружения намеренно доступна только учётной записи по умолчанию.
Справочник JSON5
Эквивалентная структура конфигурации:
{ channels: { clickclack: { enabled: true, baseUrl: "https://clickclack.example.com", token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", defaultTo: "channel:general", }, },}Учётная запись считается настроенной, только если заданы baseUrl, источник токена и
workspace. Источником токена может быть token, tokenFile или
CLICKCLACK_BOT_TOKEN для учётной записи по умолчанию. workspace принимает идентификатор
рабочего пространства (wsp_...), слаг или имя; Gateway преобразует его в идентификатор при запуске.
Ключи конфигурации учётной записи
| Ключ | Значение по умолчанию | Примечания |
|---|---|---|
baseUrl |
нет (обязательно) | URL-адрес сервера ClickClack. |
token |
нет | Токен бота в виде обычной строки или ссылки на секрет (source: "env" | "file" | "exec"). |
tokenFile |
нет | Путь к файлу токена бота; имеет приоритет над token. |
workspace |
нет (обязательно) | Идентификатор, слаг или имя рабочего пространства. |
replyMode |
"agent" |
"agent" запускает полный конвейер агента; "model" отправляет короткие прямые ответы модели. |
defaultTo |
"channel:general" |
Цель, используемая, когда исходящий путь не указывает цель. |
allowFrom |
["*"] |
Список разрешённых идентификаторов пользователей для входящих личных сообщений и сообщений каналов. |
botUserId |
определяется автоматически | Определяется из идентичности токена бота при запуске. |
agentId |
маршрут по умолчанию | Закрепляет входящие сообщения этой учётной записи за одним агентом. |
toolsAllow |
нет | Список разрешённых инструментов для ответов агента от этой учётной записи. |
model, systemPrompt |
нет | Используются ответами replyMode: "model". |
commandMenu |
true |
Публикует собственные команды в автодополнении редактора ClickClack. |
reconnectMs |
1500 |
Задержка повторного подключения в реальном времени (от 100 до 60000). |
Если plugins.allow представляет собой непустой ограничительный список, явный выбор
ClickClack при настройке канала или выполнение openclaw plugins enable clickclack
добавляет clickclack в этот список. Установка во время первоначальной настройки использует такое же
поведение явного выбора. Эти пути не переопределяют plugins.deny или
глобальную настройку plugins.enabled: false. Прямое выполнение
openclaw plugins install @openclaw/clickclack следует обычной
политике установки плагинов и также добавляет ClickClack в существующий список разрешённых.
Несколько ботов
Каждая учётная запись открывает собственное подключение ClickClack в реальном времени и использует собственный токен бота.
{ channels: { clickclack: { enabled: true, baseUrl: "https://clickclack.example.com", defaultAccount: "service", accounts: { service: { token: { source: "env", provider: "default", id: "CLICKCLACK_SERVICE_BOT_TOKEN" }, workspace: "default", defaultTo: "channel:general", agentId: "service-bot", }, support: { token: { source: "env", provider: "default", id: "CLICKCLACK_SUPPORT_BOT_TOKEN" }, workspace: "default", defaultTo: "dm:usr_...", agentId: "support-bot", }, }, }, },}Режимы ответов
replyMode: "agent"(по умолчанию) направляет входящие сообщения через обычный конвейер агента, включая запись сеанса и политику инструментов.replyMode: "model"пропускает конвейер агента и используетllm.completeсреды выполнения плагина для прямых ответов бота, форму которых при необходимости определяютmodelиsystemPrompt. Бюджет генерации определяется выбранными поставщиком и моделью.
В режиме модели генерация выполняется для определённого идентификатора агента бота, для чего требуется
явный бит доверия plugins.entries.clickclack.llm.allowAgentIdOverride: true:
{ plugins: { entries: { clickclack: { llm: { allowAgentIdOverride: true, }, }, }, },}Оставьте бит доверия выключенным, если используется только режим ответов agent по умолчанию;
в этом режиме он не нужен.
Меню команд
При запуске Gateway каждая настроенная учётная запись публикует собственные команды OpenClaw в ClickClack. Они отображаются в автодополнении редактора с меткой, содержащей дескриптор бота. При каждом запуске опубликованный набор полностью заменяется, включая удаление устаревшего меню, если каталог собственных команд пуст.
Синхронизация меню команд включена по умолчанию. Чтобы отключить её, задайте commandMenu: false
для учётной записи:
{ channels: { clickclack: { enabled: true, token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", commandMenu: false, }, },}Токену требуется commands:write. Текущие наборы ClickClack bot:write и
bot:admin включают эту область действия; её также можно предоставить
отдельно. Для токенов, созданных до появления меню команд, может потребоваться
добавить область действия или выпустить новый токен.
Синхронизация выполняется по мере возможности один раз при каждом запуске Gateway. При отсутствии области действия или сетевом сбое в журнал записывается предупреждение; для старого сервера ClickClack без этой конечной точки сообщение записывается на уровне отладки. Ни один из этих сбоев не блокирует запуск подключения в реальном времени. Меню остаются доступными, пока агент не подключён, и удаляются, когда бот покидает рабочее пространство.
В этом выпуске публикуются только спецификации собственных команд. Псевдонимы и каталоги команд Skills, плагинов или пользовательских команд в меню не добавляются. Если имя также зарегистрировано как HTTP-команда с косой чертой, ClickClack сначала обрабатывает эту регистрацию; остальные команды меню продолжают поступать через обычную доставку сообщений.
Используйте режим agent для получения данных корреляции между сервисами. Для достоверного
идентификатора сообщения ClickClack в его канонической форме msg_<ulid> канал формирует
детерминированный идентификатор запуска OpenClaw clickclack:<message-id>. Каждый вызов модели
затем отображается в диагностике как clickclack:<message-id>:model:<n>; когда в этом
ходе используется ClawRouter, тот же идентификатор вызова модели отправляется как X-Request-ID.
Режим model обходит обычную диагностику запуска и сеанса агента, поэтому
не подходит для этого способа получения данных.
Когда событие реального времени содержит проверенное значение payload.correlation_id,
канал передаёт его как X-Correlation-ID при достоверном получении сообщения и
в результирующих запросах ответа ClickClack. Значения используют безопасный
128-символьный набор ClickClack (A-Z, a-z, 0-9, ., _, : и -); недопустимые значения
пропускаются. Эти связи содержат только идентификаторы и никогда не включают тела сообщений,
промпты, результаты генерации, учётные данные или вывод инструментов.
Надёжная доставка медиафайлов
Ответы агента с медиафайлами используют обязательную надёжную доставку. OpenClaw назначает стабильные одноразовые значения сообщений и загрузок для каждой части до первой записи в ClickClack, поэтому при повторной попытке используются те же загрузка и сообщение без расходования квоты хранилища и публикации дубликатов. Если загрузка уже существует после перезапуска, OpenClaw не считывает повторно исходный локальный путь или удалённый URL-адрес медиафайла.
Для этого контракта восстановления требуется сервер ClickClack, поддерживающий:
GET /api/uploads/by-nonceсX-ClickClack-Upload-Nonce: supportedдля результатов обнаружения и отсутствия.GET /api/messages/by-nonceсX-ClickClack-Message-Nonce: supportedдля результатов обнаружения и отсутствия.- Идемпотентное создание сообщений и связывание вложений для одного и того же одноразового значения в области владельца и загрузки.
Универсальный ответ 404 старого сервера не считается доказательством отсутствия отправки. OpenClaw оставляет состояние доставки неопределённым, чтобы не создавать дубликаты; обновите ClickClack перед включением ответов агента с медиафайлами.
Строки активности агента
По умолчанию канал ClickClack ничего не показывает во время выполнения хода агента; отображается только окончательный ответ. Задайте agentActivity: true для учётной записи, чтобы публиковать сохраняемые строки сообщений agent_commentary и agent_tool во время выполнения хода:
{ channels: { clickclack: { enabled: true, token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", agentActivity: true, }, },}Требования и поведение:
- По умолчанию выключено. Стандартные конфигурации и старые серверы ClickClack не затрагиваются.
- Требуется область действия токена
agent_activity:write. Эта область действия отделена отbot:writeи не наследуется от неё; перед включением параметра создайте токен бота с--scopes bot:write,agent_activity:write(или предоставьте эту область действия существующему токену). - Постепенное ухудшение по мере возможности. Если у токена нет
agent_activity:writeили сервер отклоняет записи активности, ошибки заносятся в журнал, а окончательный ответ по-прежнему доставляется обычным образом; строки активности не отображаются. - Строки группируются по ходам (
turn_id) и объединяются так, чтобы одному логическому шагу соответствовала одна строка; строки инструментов используют то же форматирование хода выполнения, что и Discord/Slack/Telegram (имя инструмента и сведения о команде). - Метаданные атрибуции. Созданные агентом публикации (строки активности и окончательный ответ) содержат поля
author_modelиauthor_thinking, определённые на основе модели, фактически использованной для хода (в том числе после перехода на резервный вариант). Серверы, в которых эти столбцы не определены, игнорируют неизвестные поля JSON; серверы, сохраняющие их, могут для каждого сообщения ответить на вопрос «какая модель создала эту строку и на каком уровне рассуждения».
Цели
channel:<name-or-id>отправляет сообщение в канал рабочего пространства. Для целей без префикса по умолчанию используетсяchannel:.dm:<user_id>создаёт или повторно использует прямой диалог с указанным пользователем.thread:<message_id>отвечает в ветке, начатой этим сообщением.
Явные цели исходящих сообщений также могут содержать префикс провайдера clickclack: или cc:.
Исходящие медиафайлы загружаются через API загрузки ClickClack, после чего постоянная загрузка прикрепляется к созданному сообщению канала, ответу в ветке или личному сообщению. Локальные файлы и поддерживаемые URL удалённых медиафайлов обрабатываются согласно обычной политике OpenClaw по доступу к медиафайлам, с ограничением 64 MiB на файл. Для постоянных отправок из очереди используются отдельные одноразовые значения, привязанные к владельцу, для каждой загрузки и части сообщения, после чего привязка вложения повторяется с теми же объектами. Контракт сервера и поведение при восстановлении описаны в разделе Постоянная доставка медиафайлов.
Примеры:
openclaw message send --channel clickclack --target channel:general --message "hello"openclaw message send --channel clickclack --target dm:usr_123 --message "hello"openclaw message send --channel clickclack --target thread:msg_123 --message "following up"Разрешения
Области действия токена ClickClack контролируются API ClickClack.
bot:read: чтение данных рабочего пространства, каналов, сообщений, веток, личных сообщений, обмена данными в реальном времени и профилей.bot:write:bot:read, а также сообщения каналов, ответы в ветках, личные сообщения, загрузки и публикация меню команд.bot:admin:bot:write, а также создание каналов.commands:write: публикация меню команд бота. Включено в текущие наборыbot:writeиbot:admin, а также может предоставляться отдельно.agent_activity:write: постоянные строки активности агента (agent_commentary/agent_tool). Не наследуется разрешениямиbot:writeилиbot:admin; требуется только при заданномagentActivity: true.
Для обычного чата с агентом и синхронизации меню команд OpenClaw требуется только текущий bot:write. При включении строк активности агента добавьте agent_activity:write.
Устранение неполадок
ClickClack is not configured for account "<id>": задайтеbaseUrl,token(например, черезCLICKCLACK_BOT_TOKEN) иworkspaceдля этой учётной записи.ClickClack workspace not found: <value>: задайте дляworkspaceидентификатор, слаг или имя рабочего пространства, возвращённые ClickClack.- Нет входящих ответов: убедитесь, что токен имеет доступ на чтение данных в реальном времени, и учтите, что бот игнорирует собственные сообщения и сообщения других ботов.
- Не удаётся отправлять сообщения в каналы: убедитесь, что бот является участником рабочего пространства и имеет
bot:write. - Нет меню команд: убедитесь, что
commandMenuне имеет значенияfalse, сервер ClickClack поддерживаетPUT /api/bots/self/commands, а токен имеетcommands:write.