Nostr

狀態: 選用外掛(預設停用)。

Nostr 是一個去中心化的社交網路協定。此頻道讓 OpenClaw 能透過 NIP-04 接收和回覆加密私訊(DM)。

安裝(依需求)

引導安裝(推薦)

  • 引導精靈(openclaw onboard)和 openclaw channels add 會列出可選的頻道外掛。
  • 選擇 Nostr 會提示你依需求安裝外掛。

安裝預設:

  • 開發頻道 + 可用 git checkout: 使用本機外掛路徑。
  • 穩定版/測試版: 從 npm 下載。

你隨時可以在提示中覆蓋選擇。

手動安裝

openclaw plugins install @openclaw/nostr

使用本機 checkout(開發流程):

openclaw plugins install --link <path-to-openclaw>/extensions/nostr

安裝或啟用外掛後請重啟 Gateway。

快速設定

  1. 產生 Nostr 金鑰對(如有需要):
# 使用 nak
nak key generate
  1. 加入設定:
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
  1. 匯出金鑰:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. 重啟 Gateway。

設定參考

設定鍵類型預設值說明
privateKeystring必填nsec 或十六進位格式的私鑰
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']中繼站 URL(WebSocket)
dmPolicystringpairing私訊存取政策
allowFromstring[][]允許的發送者公鑰
enabledbooleantrue啟用/停用頻道
namestring-顯示名稱
profileobject-NIP-01 個人檔案中繼資料

個人檔案中繼資料

個人檔案資料會以 NIP-01 kind:0 事件發布。你可以從控制面板 UI(Channels -> Nostr -> Profile)管理,或直接在設定中設定。

範例:

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "profile": {
        "name": "openclaw",
        "displayName": "OpenClaw",
        "about": "Personal assistant DM bot",
        "picture": "https://example.com/avatar.png",
        "banner": "https://example.com/banner.png",
        "website": "https://example.com",
        "nip05": "[email protected]",
        "lud16": "[email protected]"
      }
    }
  }
}

備註:

  • 個人檔案 URL 必須使用 https://
  • 從中繼站匯入會合併欄位並保留本機覆寫。

存取控制

私訊政策

  • pairing(預設):未知發送者會收到配對代碼。
  • allowlist:只有 allowFrom 中的公鑰可以私訊。
  • open:開放接收私訊(需設定 allowFrom: ["*"])。
  • disabled:忽略接收的私訊。

許可清單範例

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "dmPolicy": "allowlist",
      "allowFrom": ["npub1abc...", "npub1xyz..."]
    }
  }
}

金鑰格式

接受的格式:

  • 私鑰: nsec... 或 64 字元十六進位
  • 公鑰(allowFrom): npub... 或十六進位

中繼站

預設:relay.damus.ionos.lol

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"]
    }
  }
}

建議:

  • 使用 2-3 個中繼站以確保冗餘。
  • 避免太多中繼站(延遲、重複)。
  • 付費中繼站可以提高可靠性。
  • 本機中繼站適合測試(ws://localhost:7777)。

協定支援

NIP狀態說明
NIP-01支援基本事件格式 + 個人檔案中繼資料
NIP-04支援加密私訊(kind:4
NIP-17計劃中禮物包裝私訊
NIP-44計劃中版本化加密

測試

本機中繼站

# 啟動 strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": ["ws://localhost:7777"]
    }
  }
}

手動測試

  1. 從日誌記下機器人公鑰(npub)。
  2. 開啟 Nostr 用戶端(Damus、Amethyst 等)。
  3. 私訊機器人公鑰。
  4. 確認回覆。

疑難排解

未收到訊息

  • 確認私鑰有效。
  • 確保中繼站 URL 可連線且使用 wss://(本機用 ws://)。
  • 確認 enabled 不是 false
  • 檢查 Gateway 日誌中的中繼站連接錯誤。

未發送回覆

  • 檢查中繼站是否接受寫入。
  • 確認外連網路連線。
  • 注意中繼站頻率限制。

重複回覆

  • 使用多個中繼站時預期會發生。
  • 訊息以事件 ID 去重;只有第一次送達會觸發回覆。

安全性

  • 絕對不要提交私鑰。
  • 使用環境變數管理金鑰。
  • 正式環境的機器人建議使用 allowlist

限制(MVP)

  • 僅限私訊(不支援群組聊天)。
  • 不支援媒體附件。
  • 僅支援 NIP-04(NIP-17 禮物包裝計劃中)。