Skip to content

Nostr

狀態: 選用的隨附外掛(在設定前預設為停用)。

Nostr 是一個去中心化的社群網路協定。此管道讓 OpenClaw 能透過 NIP-04 接收並回應加密的私人訊息 (DM)。

目前 OpenClaw 的發行版本將 Nostr 作為隨附外掛提供,因此一般的封裝建置 不需要額外安裝。

  • Onboarding (openclaw onboard) 和 openclaw channels add 仍會從 共用管道目錄中顯示 Nostr。
  • 如果您的構建過程排除了捆綁的 Nostr,請直接安裝 npm 套件。
Terminal window
openclaw plugins install @openclaw/nostr

使用裸套件以遵循當前的官方發行標籤。只有在需要可重現的安裝時才應鎖定確切版本。

使用本地 checkout(開發工作流程):

Terminal window
openclaw plugins install --link <path-to-local-nostr-plugin>

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

Terminal window
openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY"
openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY" --relay-urls "wss://relay.damus.io,wss://relay.primal.net"

使用 --use-envNOSTR_PRIVATE_KEY 保留在環境變數中,而不是將金鑰儲存在設定檔中。

  1. 產生 Nostr 金鑰對(如果需要):
Terminal window
# Using nak
nak key generate
  1. 加入到設定:
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
  1. 匯出金鑰:
Terminal window
export NOSTR_PRIVATE_KEY="nsec1..."
  1. 重新啟動 Gateway。
金鑰類型預設值描述
privateKeystringrequirednsec 或十六進位格式的私鑰
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']Relay URLs (WebSocket)
dmPolicystringpairingDM 存取原則
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",
},
},
},
}

備註:

  • 個人資料 URL 必須使用 https://
  • 從 relays 匯入會合併欄位並保留本機覆蓋設定。
  • pairing (預設):未知發送者會收到配對碼。
  • allowlist:僅 allowFrom 中的公鑰可以發送 DM。
  • open:公開接收的 DM (需要 allowFrom: ["*"])。
  • disabled:忽略接收的 DM。

執行備註:

  • 傳入事件簽章會在發送者原則和 NIP-04 解密之前進行驗證,因此偽造的事件會被提早拒絕。
  • 配對回覆會在未處理原始 DM 內文的情況下發送。
  • 傳入的 DM 受到速率限制,且過大的負載會在解密前被丟棄。
{
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已支援加密 DM (kind:4)
NIP-17計畫中禮物包裝的 DM (Gift-wrapped DMs)
NIP-44計畫中版本化加密
Terminal window
# Start 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. 傳送 DM 給機器人的公鑰。
  4. 驗證回應。
  • 確認私鑰有效。
  • 確保中繼器 URL 可存取並使用 wss:// (或使用 ws:// 連線至本地)。
  • 確認 enabled 未設定為 false
  • 檢查 Gateway 日誌中的中繼器連線錯誤。
  • 檢查中繼器是否接受寫入。
  • 驗證輸出連線能力。
  • 注意中繼器的速率限制。
  • 使用多個中繼器時這是預期行為。
  • 訊息會依事件 ID 進行重複資料刪除;僅首次傳遞會觸發回應。
  • 切勿提交私鑰。
  • 使用環境變數來儲存金鑰。
  • 考慮為生產環境的機器人使用 allowlist
  • 簽章會在發送者原則之前進行驗證,而發送者原則則在解密之前執行,因此偽造的事件會被提早拒絕,且未知的發送者無法強制進行完整的加密運算。
  • 僅限直接訊息(無群組聊天)。
  • 無媒體附件。
  • 僅支援 NIP-04(計畫支援 NIP-17 gift-wrap)。