OpenClaw

OpenClaw Nostr 頻道

去中心化
進階

透過選用外掛將 OpenClaw 連接到 Nostr 去中心化網路。此整合讓您的 AI 助理能夠在任何 Nostr relay 上接收和回覆 NIP-04 加密 DM,無需中心化伺服器、無需註冊帳號,只需一組密碼金鑰對和 relay 連線即可。非常適合重視隱私、需要抗審查和自主主權的部署場景。

快速資訊
難度進階
分類去中心化
支援功能數2 / 6

Nostr 支援功能

文字訊息

支援

媒體與檔案

不支援

表情回應

支援

討論串

不支援

語音訊息

不支援

群組聊天

不支援

Nostr 前置條件

  • 已安裝並運行 OpenClaw Gateway
  • 一組 Nostr 金鑰對(nsec 或十六進位格式的私鑰)——可使用 'nak key generate' 產生
  • 至少一個可透過 WebSocket 存取的 Nostr relay(例如 wss://relay.damus.io)
  • 伺服器上已安裝 Node.js 18+

Nostr 快速設定

1

安裝 Nostr 外掛

執行 'openclaw plugins install @openclaw/nostr' 來新增 Nostr 頻道。也可以使用 'openclaw onboard' 或 'openclaw channels add',然後從外掛清單中選擇 Nostr。安裝完成後請重新啟動 Gateway。

2

產生金鑰對並進行設定

使用 'nak key generate' 產生 Nostr 金鑰對。將私鑰設定為環境變數(export NOSTR_PRIVATE_KEY="nsec1..."),並在 openclaw.json 設定中使用 ${NOSTR_PRIVATE_KEY} 引用它。

3

啟動並傳送測試 DM

使用 'openclaw start' 重新啟動 Gateway。在啟動日誌中找到您的機器人公鑰(npub)。開啟任意 Nostr 用戶端(例如 Damus、Amethyst、Primal),向機器人的 npub 傳送加密 DM。如果使用預設的配對策略,請透過 CLI 核准傳送者。

Nostr 設定範例

config.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol"
      ],
      "dmPolicy": "pairing"
    }
  }
}

Nostr 深入了解

架構概覽

與中心化通訊平台不同,Nostr 是一個去中心化協定,訊息透過獨立的 relay 伺服器進行分發。OpenClaw 透過 WebSocket 連接到一個或多個 relay,並訂閱傳送給機器人公鑰的 NIP-04 加密 DM。 訊息流程非常直觀: 1. 使用者從任意 Nostr 用戶端(Damus、Amethyst、Primal 等)傳送加密 DM 2. 訊息傳播到使用者發布的 relay 3. OpenClaw 的 relay 訂閱接收到該事件 4. Gateway 解密訊息,透過您的 AI 代理處理後,將回覆加密並發布回已設定的 relay 由於 Nostr 是基於 relay 的架構,不存在單點故障——如果某個 relay 停機,訊息仍可透過其他 relay 傳遞。機器人和使用者不需要使用完全相同的 relay,因為 relay 之間通常會交換事件。
機器人的公鑰由私鑰衍生而來,會顯示在 Gateway 啟動日誌中。請將此 npub 分享給使用者,以便他們找到並傳送訊息給您的機器人。
Nostr 沒有「線上狀態」的概念——訊息儲存在 relay 上,當用戶端連線時即可收到。

外掛安裝

Nostr 頻道以選用的 OpenClaw 外掛形式發布,而非內建於核心 Gateway 中。這使得基礎安裝保持輕量,同時允許您在需要時新增 Nostr 支援。 有多種安裝方式: • **npm(建議):** 執行 'openclaw plugins install @openclaw/nostr' 安裝穩定版。 • **Beta 頻道:** 使用 'openclaw plugins install @openclaw/nostr@beta' 取得預覽功能。 • **本機開發:** 複製外掛儲存庫,然後使用 'openclaw plugins install --link /path/to/local/checkout' 進行連結。 • **互動式設定:** 執行 'openclaw onboard' 或 'openclaw channels add',從清單中選擇 Nostr。 安裝完成後,請重新啟動 Gateway 以使外掛生效。
執行 'openclaw plugins list' 可驗證 Nostr 外掛是否已安裝並處於啟用狀態。

金鑰產生與管理

Nostr 身份基於公鑰密碼學。您的機器人身份就是其金鑰對——私鑰(nsec)用於簽名和解密,公鑰(npub)用作其地址。 使用 'nak' CLI 工具產生金鑰對: 1. 安裝 nak:'go install github.com/fiatjaf/nak@latest'(或從 releases 下載) 2. 產生金鑰:'nak key generate'——輸出十六進位格式的私鑰 3. 衍生公鑰:'nak key public <hex-private-key>'——如需要可轉換為 npub 格式 OpenClaw 同時接受 nsec(Bech32 編碼)和 64 字元十六進位格式的私鑰。allowFrom 中的公鑰可使用 npub 或十六進位格式。
openclaw.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
切勿將私鑰直接寫入 openclaw.json。請務必使用環境變數(例如 ${NOSTR_PRIVATE_KEY}),並透過 'export NOSTR_PRIVATE_KEY="nsec1..."' 在 shell 或 .env 檔案中設定。

Relay 設定

Relay 是 Nostr 的骨幹——它們負責儲存和分發事件。OpenClaw 透過 WebSocket 連接到您設定的 relay,以傳送和接收加密 DM。 預設設定使用兩個知名的公共 relay:relay.damus.io 和 nos.lol。在正式環境中,您應根據需求自訂此設定。 Relay 選擇建議: • 使用 2 至 3 個 relay 可在冗餘和效能之間取得良好平衡 • 過多 relay 會增加延遲和頻寬消耗 • 付費 relay(例如 relay.nostr.band)提供更好的可靠性和較少的垃圾訊息 • 開發時可在本機執行 relay(例如透過 Docker 執行 Strfry),地址為 ws://localhost:7777
openclaw.json
{
  "channels": {
    "nostr": {
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol",
        "wss://relay.nostr.band"
      ]
    }
  }
}
公共 relay 免費但可能有速率限制或垃圾訊息。付費 relay 通常提供更好的效能和過濾功能。
您的機器人和使用者不需要在同一個 relay 上——大多數 relay 會彼此交換事件。

DM 策略

DM(私訊)策略控制誰可以透過 Nostr 與您的 AI 助理互動。由於 Nostr 在設計上是開放的,存取控制對於防止未授權使用您的 AI 配額尤為重要。 OpenClaw 支援四種策略: • **pairing(預設)** ——未知的傳送者會收到配對碼。您可以透過 'openclaw pairing approve nostr <code>' 來核准或拒絕。核准後即可自由對話。 • **allowlist** ——只有 allowFrom 中列出的公鑰(npub 或十六進位格式)可以向機器人傳送訊息。其他人將被靜默忽略。 • **open** ——任何人都可以向機器人傳送訊息。需要設定 allowFrom: ["*"] 才能啟用。請謹慎使用。 • **disabled** ——機器人不回應任何傳入的 DM。
openclaw.json
{
  "channels": {
    "nostr": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "npub1abc...xyz",
        "npub1def...uvw"
      ]
    }
  }
}

個人資料中繼資料 (NIP-01)

您可以使用 NIP-01 kind:0 中繼資料事件在 Nostr 網路上發布機器人的個人資料。這使您的機器人在 Nostr 用戶端中可被搜尋——使用者查閱機器人的 npub 時會看到其名稱、頭像、簡介及其他詳細資訊。 可設定的個人資料欄位包括: • **name** ——簡短使用者名稱(例如 "openclaw-bot") • **display_name** ——完整顯示名稱 • **about** ——個人簡介/說明 • **picture** ——頭像 URL(必須使用 HTTPS) • **banner** ——橫幅圖片 URL(必須使用 HTTPS) • **website** ——機器人或專案網站 • **nip05** ——NIP-05 驗證識別碼(例如 "bot@yourdomain.com") • **lud16** ——用於接收 zaps 的 Lightning 地址
openclaw.json
{
  "channels": {
    "nostr": {
      "profile": {
        "name": "openclaw-bot",
        "display_name": "OpenClaw AI Assistant",
        "about": "AI-powered assistant on Nostr. DM me!",
        "picture": "https://example.com/bot-avatar.png",
        "nip05": "bot@yourdomain.com"
      }
    }
  }
}
NIP-05 驗證(bot@yourdomain.com)會在大多數 Nostr 用戶端中顯示勾選標記,幫助使用者確認您的機器人身份。
所有圖片 URL(picture、banner)必須使用 HTTPS。

加密與協定支援

OpenClaw Nostr 整合中的所有 DM 均使用 NIP-04 加密——訊息使用 ECDH(橢圓曲線 Diffie-Hellman)從傳送者和接收者的金鑰對衍生出的共享密鑰進行加密。 目前支援的 NIP: • **NIP-01** ——基礎協定:事件、訂閱、中繼資料(kind:0) • **NIP-04** ——加密 DM(kind:4) 計劃未來支援: • **NIP-17** ——禮物包裝式私訊(改善中繼資料隱私) • **NIP-44** ——版本化加密(更強的密碼學原語) 雖然 NIP-04 在所有 Nostr 用戶端中被廣泛支援,但它存在已知的中繼資料洩漏問題(relay 營運者可以看到誰在和誰通訊,但無法看到內容)。NIP-17 和 NIP-44 在被採用後將解決這些限制。
NIP-04 會加密訊息內容,但不會加密中繼資料。Relay 營運者可以看到傳送者/接收者的公鑰和時間戳記。
為獲得最大隱私保護,請為您的機器人使用專用金鑰對,並透過付費或自行架設的 relay 連線。

使用本機 Relay 進行測試

在開發和測試時,您可以執行本機 Nostr relay 而非連接到公共 relay。建議使用 Strfry,這是一個高效能 relay,可透過 Docker 輕鬆執行。 設定步驟: 1. 執行 relay:'docker run -p 7777:7777 hoytech/strfry' 2. 將 OpenClaw 設定為使用本機 relay:ws://localhost:7777 3. 啟動 Gateway 4. 使用已設定連接到本機 relay 的 Nostr 用戶端傳送測試 DM 這可以將您的測試與公共 Nostr 網路隔離,並提供更快的迭代週期。
openclaw.json (development)
{
  "channels": {
    "nostr": {
      "relays": ["ws://localhost:7777"],
      "dmPolicy": "open",
      "allowFrom": ["*"]
    }
  }
}
在本機測試時使用 dmPolicy: 'open' 搭配 allowFrom: ['*'] 可跳過配對流程。

Nostr 設定參考

privateKey
Type: stringDefault: (required)

Nostr 私鑰,nsec(Bech32)或 64 字元十六進位格式。請使用環境變數引用。

relays
Type: string[]Default: ["wss://relay.damus.io", "wss://nos.lol"]

要連接的 Nostr relay WebSocket URL 清單

dmPolicy
Type: stringDefault: "pairing"

DM 存取控制策略:'pairing'、'allowlist'、'open' 或 'disabled'

allowFrom
Type: string[]Default: []

允許向機器人傳送訊息的公鑰(npub 或十六進位格式),適用於 dmPolicy 為 'allowlist' 時

enabled
Type: booleanDefault: true

啟用或停用 Nostr 頻道

name
Type: stringDefault: ""

此頻道實例的顯示名稱

profile.name
Type: stringDefault: ""

作為 NIP-01 中繼資料發布的機器人使用者名稱

profile.display_name
Type: stringDefault: ""

作為 NIP-01 中繼資料發布的完整顯示名稱

profile.about
Type: stringDefault: ""

作為 NIP-01 中繼資料發布的機器人個人簡介/說明

profile.picture
Type: stringDefault: ""

作為 NIP-01 中繼資料發布的頭像圖片 URL(需使用 HTTPS)

profile.banner
Type: stringDefault: ""

作為 NIP-01 中繼資料發布的橫幅圖片 URL(需使用 HTTPS)

profile.website
Type: stringDefault: ""

作為 NIP-01 中繼資料發布的網站 URL

profile.nip05
Type: stringDefault: ""

NIP-05 驗證識別碼(例如 'bot@yourdomain.com')

profile.lud16
Type: stringDefault: ""

用於接收 zaps 的 Lightning 地址

Nostr 常見問題

Nostr 故障排除

機器人已啟動但未收到任何訊息

Relay 連線可能失敗,或傳送者發布到的 relay 與機器人訂閱的 relay 不同。

檢查 Gateway 日誌中是否有 WebSocket 連線錯誤。確認 relay URL 正確且可存取。嘗試新增一個傳送者也使用的常見公共 relay(例如 wss://relay.damus.io)。確保私鑰已正確設定。
錯誤:無效的私鑰格式

私鑰不是有效的 nsec(Bech32)或 64 字元十六進位格式,或環境變數未設定。

確認環境變數已正確匯出:'echo $NOSTR_PRIVATE_KEY'。確保金鑰以 'nsec1' 開頭(Bech32 格式)或恰好為 64 個十六進位字元。如有需要,使用 'nak key generate' 重新產生。
訊息已傳送但未送達接收者

機器人設定的 relay 與接收者用戶端的 relay 沒有重疊,因此事件無法傳播。

新增至少一個接收者的 Nostr 用戶端也使用的 relay。常見的公共 relay 如 relay.damus.io 和 nos.lol 大多數用戶端都有連接。檢查接收者 Nostr 用戶端個人資料中的 relay 清單。
安裝後找不到外掛

外掛安裝後 Gateway 未重新啟動,或安裝靜默失敗。

執行 'openclaw plugins list' 確認 Nostr 外掛已安裝。如未列出,請重新執行 'openclaw plugins install @openclaw/nostr'。安裝後使用 'openclaw start' 重新啟動 Gateway。