Developer and self-hosted

Tlon

Tlon — децентрализованный мессенджер, построенный на Urbit. OpenClaw подключается к вашему кораблю Urbit и отвечает на личные сообщения и сообщения в групповых чатах. По умолчанию для ответов в группах требуется упоминание через @, а поверх этого действуют правила авторизации и процесс одобрения владельцем.

Статус: встроенный плагин. Поддерживаются личные сообщения, упоминания в группах, ветки, форматированный текст, загрузка и скачивание изображений, а также система одобрения владельцем. Реакции и опросы не поддерживаются.

Встроенный плагин

Tlon входит в комплект текущих выпусков OpenClaw; для пакетных сборок отдельная установка не требуется.

В старой сборке или пользовательской установке, из которой он исключён, установите его из npm:

bash
openclaw plugins install @openclaw/tlon

Используйте имя пакета без версии, чтобы отслеживать тег текущего выпуска. Закрепляйте версию (@openclaw/tlon@x.y.z) только для воспроизводимых установок.

Из локального рабочего дерева:

bash
openclaw plugins install ./path/to/local/tlon-plugin

Подробнее: Плагины

Настройка

bash
openclaw channels add --channel tlon --ship ~sampel-palnet --url https://your-ship-host --code lidlut-tabwed-pillex-ridrup

Либо измените конфигурацию напрямую:

json5
{  channels: {    tlon: {      enabled: true,      ship: "~sampel-palnet",      url: "https://your-ship-host",      code: "lidlut-tabwed-pillex-ridrup",      ownerShip: "~your-main-ship", // рекомендуется: ваш корабль, всегда авторизован    },  },}

После прямого изменения конфигурации перезапустите Gateway. Затем отправьте боту личное сообщение или упомяните его через @ в групповом канале.

Частные корабли и корабли в локальной сети

По умолчанию OpenClaw блокирует частные и внутренние имена хостов и диапазоны IP-адресов для защиты от SSRF. Если ваш корабль работает в частной сети (localhost, IP-адрес локальной сети, внутреннее имя хоста), явно разрешите это:

json5
{  channels: {    tlon: {      url: "http://localhost:8080",      network: {        dangerouslyAllowPrivateNetwork: true,      },    },  },}

Применяется к целевым адресам наподобие http://localhost:8080, http://192.168.x.x:8080 и http://my-ship.local:8080. Включайте это только для доверенного URL корабля; данная настройка отключает защиту от SSRF для HTTP-запросов этой учётной записи.

Групповые каналы

Закрепите каналы вручную либо включите автоматическое обнаружение:

json5
{  channels: {    tlon: {      groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"],      autoDiscoverChannels: true,    },  },}

Если autoDiscoverChannels не задан в конфигурации, его значение по умолчанию — false; в мастере настройки ответ на этот вопрос по умолчанию положительный, и мастер явно записывает true. Когда эта настройка включена, OpenClaw при запуске запрашивает присоединённые группы через scry, отслеживает новые каналы по мере принятия приглашений в группы и повторяет проверку каждые 2 минуты.

Управление доступом

Список разрешённых отправителей личных сообщений (пустой список = личные сообщения запрещены всем, кроме ownerShip):

json5
{  channels: {    tlon: {      dmAllowlist: ["~zod", "~nec"],    },  },}

По умолчанию для каждого канала используется режим авторизации restricted. Задайте defaultAuthorizedShips как базовый список и переопределяйте его для отдельных гнёзд каналов:

json5
{  channels: {    tlon: {      defaultAuthorizedShips: ["~zod"],      authorization: {        channelRules: {          "chat/~host-ship/general": {            mode: "restricted",            allowedShips: ["~zod", "~nec"],          },          "chat/~host-ship/announcements": {            mode: "open",          },        },      },    },  },}

После того как бот ответит в ветке, он продолжает отвечать на последующие сообщения в этой ветке, не требуя нового упоминания.

Владелец и система одобрения

json5
{  channels: {    tlon: {      ownerShip: "~your-main-ship",    },  },}

Корабль владельца авторизован везде: приглашения в личные сообщения всегда принимаются автоматически, приглашения в группы всегда принимаются автоматически, а сообщения в каналах всегда проходят авторизацию. Владелец не обязан находиться в dmAllowlist, defaultAuthorizedShips или groupInviteAllowlist.

Если задан ownerShip, неавторизованные запросы не просто отбрасываются — они помещаются в очередь ожидания одобрения, а владельцу отправляется личное сообщение:

  • Запросы на личные сообщения от кораблей, отсутствующих в dmAllowlist
  • Упоминания в каналах, где отправитель не проходит авторизацию
  • Приглашения в группы от кораблей, отсутствующих в groupInviteAllowlist (когда автоматическое принятие отключено либо включено, но пригласивший корабль отсутствует в списке разрешённых)

Чтобы обработать запрос, владелец отвечает в личном сообщении:

Ответ владельца Результат
approve / deny / block Обрабатывает самый последний ожидающий запрос на одобрение
approve <id> / deny <id> Обрабатывает конкретный запрос на одобрение по идентификатору
block Также блокирует корабль средствами платформы, чтобы он не мог подключиться повторно
unblock ~ship Снимает блокировку средствами платформы
blocked Выводит список заблокированных в данный момент кораблей
pending Выводит список ожидающих запросов на одобрение

Если ownerShip не настроен, неавторизованные личные сообщения и упоминания в каналах просто отбрасываются и записываются в журнал; запрос на одобрение не отправляется.

Настройки автоматического принятия

Автоматически принимать приглашения в личные сообщения от кораблей, уже находящихся в dmAllowlist (приглашения от владельца всегда принимаются автоматически независимо от этого флага):

json5
{  channels: {    tlon: {      autoAcceptDmInvites: true,    },  },}

Автоматически принимать приглашения в группы от кораблей из списка разрешённых (безопасный отказ: при autoAcceptGroupInvites: true и пустом groupInviteAllowlist не принимаются приглашения ни от кого, кроме владельца):

json5
{  channels: {    tlon: {      autoAcceptGroupInvites: true,      groupInviteAllowlist: ["~zod"],    },  },}

Горячая перезагрузка через хранилище настроек Urbit

Большинство перечисленных выше настроек (dmAllowlist, groupInviteAllowlist, groupChannels, defaultAuthorizedShips, autoDiscoverChannels, autoAcceptDmInvites, autoAcceptGroupInvites, ownerShip, showModelSignature) при первом запуске копируются в агент %settings корабля (desk moltbot, bucket tlon), а затем считываются оттуда в реальном времени, поэтому изменения, внесённые через клиент Landscape или команды настройки встроенного плагина, применяются без перезапуска Gateway. channelRules и ожидающие запросы на одобрение также сохраняются там в формате JSON. Файловая конфигурация остаётся источником истины для значений, которые никогда не записывались в хранилище настроек.

Целевые адресаты доставки (CLI/cron)

Используйте с openclaw message send или для доставки через cron:

  • Личное сообщение: ~sampel-palnet или dm/~sampel-palnet
  • Группа: chat/~host-ship/channel или group:~host-ship/channel

Встроенный навык

Плагин включает @tloncorp/tlon-skill — CLI для непосредственных операций Urbit, который автоматически становится доступен после установки плагина:

  • Активность: упоминания, ответы, непрочитанные сообщения
  • Каналы: просмотр списка, создание, переименование
  • Контакты: просмотр списка, получение и обновление профилей
  • Группы: создание, присоединение, процессы приглашения и запроса, роли
  • Перехватчики: управление перехватчиками каналов
  • Сообщения: история, поиск
  • Личные сообщения: отправка, реакции, принятие и отклонение
  • Публикации: реакции, удаление
  • Блокнот: публикация в каналах дневника
  • Настройки: горячая перезагрузка конфигурации плагина через описанное выше хранилище настроек

Возможности

Функция Статус
Личные сообщения Поддерживаются
Группы/каналы Поддерживаются (по умолчанию требуется упоминание)
Ветки Поддерживаются (после присоединения продолжает отвечать)
Форматированный текст Markdown преобразуется в собственный формат Tlon
Изображения Входящие скачиваются, исходящие загружаются
Реакции Только через встроенный навык
Опросы Не поддерживаются
Встроенные команды По умолчанию доступны только владельцу

Устранение неполадок

bash
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctor

Распространённые сбои:

  • Личные сообщения игнорируются: отправитель отсутствует в dmAllowlist, и ownerShip не настроен для процесса одобрения.
  • Сообщения в группах игнорируются: канал не обнаружен и не закреплён либо отправитель не проходит авторизацию, а ownerShip для постановки запроса на одобрение в очередь отсутствует.
  • Ошибки подключения: проверьте доступность URL корабля; для локальных кораблей задайте network.dangerouslyAllowPrivateNetwork.
  • Ошибки аутентификации: коды входа меняются — скопируйте текущий код со своего корабля.

Справочник по конфигурации

Полная конфигурация: Конфигурация

Ключ Назначение
channels.tlon.enabled Включает или отключает запуск канала.
channels.tlon.ship Имя корабля Urbit бота (например, ~sampel-palnet).
channels.tlon.url URL корабля (например, https://sampel-palnet.tlon.network).
channels.tlon.code Код входа на корабль.
channels.tlon.network.dangerouslyAllowPrivateNetwork Разрешает URL кораблей на localhost и в локальной сети (явное отключение защиты от SSRF).
channels.tlon.ownerShip Корабль владельца: всегда авторизован и получает запросы на одобрение.
channels.tlon.dmAllowlist Корабли, которым разрешено отправлять личные сообщения (пустой список = никто, кроме владельца).
channels.tlon.autoAcceptDmInvites Автоматически принимает личные сообщения от кораблей в dmAllowlist.
channels.tlon.autoAcceptGroupInvites Автоматически принимает приглашения в группы от кораблей в groupInviteAllowlist.
channels.tlon.groupInviteAllowlist Корабли, приглашения в группы от которых принимаются автоматически.
channels.tlon.autoDiscoverChannels Автоматически обнаруживает присоединённые групповые каналы (по умолчанию: false).
channels.tlon.groupChannels Закреплённые вручную гнёзда каналов.
channels.tlon.defaultAuthorizedShips Корабли, авторизованные для всех каналов (используется, если ни одно правило не совпало).
channels.tlon.authorization.channelRules Режим авторизации и список разрешённых для каждого гнезда канала.
channels.tlon.showModelSignature Добавляет _[Generated by <model>]_ к ответам.
channels.tlon.responsePrefix Статический префикс, добавляемый перед исходящими ответами.
channels.tlon.accounts.<id> Дополнительные именованные учётные записи (конфигурации с несколькими кораблями).

Примечания

  • Для ответов в группах требуется упоминание через @ (например, ~your-bot-ship), если бот ещё не присоединился к этой ветке.
  • Ответы в ветках публикуются внутри ветки; бот также получает последние 10 сообщений контекста ветки, добавленные перед запросом для агента.
  • Форматированный текст (полужирный, курсив, код, заголовки, списки) преобразуется в собственный формат Tlon.
  • Входящее сообщение с просьбой составить сводку канала (например, «составь сводку этого канала») запускает встроенное суммирование истории вместо обычного процесса ответа.

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

Was this useful?
On this page

On this page