Developer and self-hosted

Tlon

Tlon 是建構於 Urbit 上的去中心化通訊軟體。OpenClaw 會連線至你的 Urbit ship,並 回覆私訊和群組聊天訊息。群組回覆預設需要 @ 提及,並在此基礎上套用 授權規則和擁有者核准流程。

狀態:隨附外掛。支援私訊、群組提及、討論串、富文字、圖片上傳/下載,以及 擁有者核准系統。不支援表情回應和投票。

隨附外掛

目前的 OpenClaw 版本隨附 Tlon;封裝版本不需要另行安裝。

若是未包含此外掛的舊版建置或自訂安裝,請從 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", // 建議:你的 ship,永遠具有授權    },  },}

直接編輯設定後,請重新啟動閘道。接著私訊機器人,或在群組 頻道中 @ 提及它。

傳入訊息的持久性

OpenClaw 會在分派給代理程式前,持久儲存已接受的 Tlon 私訊和群組聊天事件。待處理或可重試的回合可在閘道重新啟動後保留,且每個群組頻道或直接通訊對象的工作仍會依序處理。只要穩定的 Urbit 訊息 ID 所對應的佇列記錄或保留的完成記錄仍存在,也會抑制重新傳送的事件。

從佇列到代理程式的邊界採至少一次傳遞:交接期間發生當機可能會重播某個回合。因此,在可行情況下,會產生外部副作用的代理程式動作應維持等冪性。

私有/區域網路 ship

為防範 SSRF,OpenClaw 預設會封鎖私有/內部主機名稱和 IP 範圍。如果你的 ship 在私有網路上執行(localhost、區域網路 IP、內部主機名稱),請明確選擇啟用:

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

適用於 http://localhost:8080http://192.168.x.x:8080http://my-ship.local:8080 等目標。只有在你信任該 ship URL 時才啟用;這會停用 該帳號 HTTP 要求的 SSRF 防護。

群組頻道

手動固定頻道,或開啟自動探索:

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

若設定中未指定 autoDiscoverChannels,其預設值為 false;設定精靈會將 提示的預設值設為「是」,並明確寫入 true。啟用後,OpenClaw 會在啟動時探查已加入的群組, 在接受群組邀請時監看新頻道,並每 2 分鐘重新檢查一次。

存取控制

私訊允許清單(空白 = 除非傳送者是 ownerShip,否則不允許私訊):

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

每個頻道的群組授權預設為 restricted。設定 defaultAuthorizedShips 作為 基準,並依各頻道 nest 覆寫:

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

機器人一旦在討論串中回覆,便會持續回覆該討論串後續的訊息, 不需要再次提及。

設定 channels.tlon.implicitMentions.threadParticipation: false,即可要求這些後續訊息必須再次明確提及。 帳號覆寫使用 channels.tlon.accounts.<id>.implicitMentions。Tlon 目前不會產生 replyToBotquotedBot 事實,因此這些旗標在此不會生效。

擁有者和核准系統

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

擁有者 ship 在所有位置都具有授權:私訊邀請一律自動接受、群組邀請一律 自動接受,且頻道訊息一律通過授權。擁有者不需要列在 dmAllowlistdefaultAuthorizedShipsgroupInviteAllowlist 中。

設定 ownerShip 後,未授權的要求不會只是遭到捨棄,而是會排入待處理 核准佇列,並私訊擁有者:

  • 來自未列於 dmAllowlist 中之 ship 的私訊要求
  • 傳送者未通過授權的頻道提及
  • 來自未列於 groupInviteAllowlist 中之 ship 的群組邀請(當自動接受關閉,或已開啟但 邀請者未列於允許清單時)

擁有者可透過私訊回覆來處理要求:

擁有者回覆 效果
approve / deny / block 處理最近一筆待核准要求
approve <id> / deny <id> 依 ID 處理特定核准要求
block 同時以原生方式封鎖該 ship,使其無法重新連線
unblock ~ship 解除原生封鎖
blocked 列出目前遭封鎖的 ship
pending 列出待處理的核准要求

若未設定 ownerShip,未授權的私訊和頻道提及只會遭到捨棄並記錄; 不會顯示核准提示。

自動接受設定

自動接受來自已列於 dmAllowlist 中之 ship 的私訊邀請(無論此旗標為何, 擁有者一律會自動接受):

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

自動接受允許清單中 ship 的群組邀請(失敗時採封閉策略:當 autoAcceptGroupInvites: truegroupInviteAllowlist 為空白時,不接受任何非擁有者邀請):

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

透過 Urbit 設定儲存區熱重新載入

上述大多數設定(dmAllowlistgroupInviteAllowlistgroupChannelsdefaultAuthorizedShipsautoDiscoverChannelsautoAcceptDmInvitesautoAcceptGroupInvitesownerShipshowModelSignature)會在第一次執行時鏡像到 ship 的 %settings 代理程式(desk moltbot、bucket tlon),之後再從該處即時讀取, 因此透過 Landscape 用戶端或隨附 Skill 的設定命令所做的變更,不必重新啟動 閘道即可套用。channelRules 和待處理的核准要求也會以 JSON 格式持久儲存於該處。對於 從未寫入設定儲存區的值,檔案設定仍是事實來源。

傳遞目標(命令列介面/排程)

搭配 openclaw message send 或排程傳遞使用:

  • 私訊:~sampel-palnetdm/~sampel-palnet
  • 群組:chat/~host-ship/channelgroup:~host-ship/channel

隨附 Skill

此外掛隨附 @tloncorp/tlon-skill,這是一個用於 直接執行 Urbit 操作的命令列介面,安裝外掛後即可自動使用:

  • 動態:提及、回覆、未讀項目
  • 頻道:列出、建立、重新命名
  • 聯絡人:列出/取得/更新個人檔案
  • 群組:建立、加入、邀請/申請流程、角色
  • 鉤子:管理頻道鉤子
  • 訊息:歷史記錄、搜尋
  • 私訊:傳送、回應、接受/拒絕
  • 貼文:回應、刪除
  • 筆記本:發佈至日記頻道
  • 設定:透過上述設定儲存區熱重新載入外掛設定

功能

功能 狀態
私訊 支援
群組/頻道 支援(預設須提及)
討論串 支援(加入後會持續回覆)
富文字 Markdown 轉換為 Tlon 的原生格式
圖片 下載傳入圖片,上傳傳出圖片
表情回應 僅能透過隨附 Skill
投票 不支援
原生命令 預設僅限擁有者

疑難排解

bash
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctor

常見失敗:

  • 私訊遭忽略:傳送者不在 dmAllowlist 中,且未設定用於核准流程的 ownerShip
  • 群組訊息遭忽略:頻道未被探索/固定,或傳送者未通過授權,且沒有 ownerShip 可將核准要求排入佇列。
  • 連線錯誤:檢查 ship URL 是否可連線;若是本機 ship,請設定 network.dangerouslyAllowPrivateNetwork
  • 驗證錯誤:登入碼會輪替,請從你的 ship 複製目前的代碼。

設定參考

完整設定:設定

意義
channels.tlon.enabled 啟用/停用頻道啟動。
channels.tlon.ship 機器人的 Urbit ship 名稱(例如 ~sampel-palnet)。
channels.tlon.url Ship URL(例如 https://sampel-palnet.tlon.network)。
channels.tlon.code Ship 登入碼。
channels.tlon.network.dangerouslyAllowPrivateNetwork 允許 localhost/區域網路 ship URL(選擇啟用 SSRF)。
channels.tlon.ownerShip 擁有者 ship:永遠具有授權,並接收核准要求。
channels.tlon.dmAllowlist 允許私訊的 ship(空白 = 除擁有者外皆不允許)。
channels.tlon.autoAcceptDmInvites 自動接受來自 dmAllowlist 中 ship 的私訊。
channels.tlon.autoAcceptGroupInvites 自動接受來自 groupInviteAllowlist 的群組邀請。
channels.tlon.groupInviteAllowlist 群組邀請會被自動接受的 ship。
channels.tlon.autoDiscoverChannels 自動探索已加入的群組頻道(預設:false)。
channels.tlon.implicitMentions.threadParticipation 允許已參與討論串的後續訊息略過提及限制。
channels.tlon.groupChannels 手動固定的頻道 nest。
channels.tlon.defaultAuthorizedShips 所有頻道皆授權的 ship(沒有符合規則時使用)。
channels.tlon.authorization.channelRules 各頻道 nest 的驗證模式與允許清單。
channels.tlon.showModelSignature _[Generated by <model>]_ 附加至回覆。
channels.tlon.responsePrefix 加在傳出回覆之前的靜態前置字串。
channels.tlon.accounts.<id> 其他具名帳號(多 ship 設定)。

備註

  • 群組回覆需要 @ 提及(例如 ~your-bot-ship),除非機器人已加入該討論串。
  • 討論串回覆會送至討論串內;系統也會將討論串內容的最後 10 則訊息附加在前面, 提供給代理程式。
  • 富文字(粗體、斜體、程式碼、標題、清單)會轉換為 Tlon 的原生格式。
  • 傳送要求頻道摘要的傳入訊息(例如「摘要此 頻道」),會觸發內建的歷史記錄摘要功能,而非一般回覆流程。

相關內容

Was this useful?
On this page

On this page