設定 OpenClaw Nostr 頻道:快速啟用去中心化訊息功能
想要在去中心化社交網路上架設機器人,卻發現處理加密訊息和中繼站連線比想像中還麻煩?如果你正打算讓你的 AI 助手進入 Nostr 宇宙,這篇指南會幫你省下不少摸索的時間。
Nostr 是一個去中心化的社交網路協定。這個 Channel 讓 OpenClaw 能夠透過 NIP-04 接收並回覆加密的直接訊息 (DMs)。
狀態: 選配 Plugin(預設停用)。
安裝(按需安裝)
Section titled “安裝(按需安裝)”引導流程(推薦)
Section titled “引導流程(推薦)”- 使用 Onboarding (
openclaw onboard) 或openclaw channels add會列出可選的 Channel Plugin。 - 選擇 Nostr 後,系統會提示你按需安裝該 Plugin。
安裝預設值:
- Dev channel + 可使用 git checkout: 使用本地 Plugin 路徑。
- Stable/Beta: 從 npm 下載。
你隨時可以在提示字元中覆蓋這些選擇。
openclaw plugins install @openclaw/nostr使用本地 checkout(開發工作流):
openclaw plugins install --link <path-to-local-nostr-plugin>安裝或啟用 Plugin 後,請重啟 Gateway。
非互動式設定
Section titled “非互動式設定”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-env 可以將 NOSTR_PRIVATE_KEY 保留在環境變數中,而不是存放在設定檔裡。
- 產生 Nostr 金鑰對(如果需要):
# Using naknak key generate- 加入設定檔:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", }, },}- 匯出金鑰:
export NOSTR_PRIVATE_KEY="nsec1..."- 重啟 Gateway。
| Key | Type | Default | Description |
|---|---|---|---|
privateKey | string | required | Private key in nsec or hex format |
relays | string[] | ['wss://relay.damus.io', 'wss://nos.lol'] | Relay URLs (WebSocket) |
dmPolicy | string | pairing | DM access policy |
allowFrom | string[] | [] | Allowed sender pubkeys |
enabled | boolean | true | Enable/disable channel |
name | string | - | Display name |
profile | object | - | NIP-01 profile metadata |
個人資料元數據
Section titled “個人資料元數據”個人資料會以 NIP-01 kind:0 事件發佈。你可以從 Control 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: "openclaw@example.com", lud16: "openclaw@example.com", }, }, },}注意:
- Profile URL 必須使用
https://。 - 從中繼站匯入時會合併欄位,並保留本地的覆蓋設定。
- pairing (預設):未知的傳送者會收到配對碼。
- allowlist:只有在
allowFrom中的 pubkey 可以傳送 DM。 - open:公開接收 DM(需要設定
allowFrom: ["*"])。 - disabled:忽略所有傳入的 DM。
執行說明:
- 在進行簽章驗證和 NIP-04 解密之前,會先檢查傳送者策略。
- 配對回覆會在不處理原始 DM 內容的情況下送出。
- 傳入的 DM 會受到速率限制,且過大的內容會在解密前被捨棄。
Allowlist 範例
Section titled “Allowlist 範例”{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", dmPolicy: "allowlist", allowFrom: ["npub1abc...", "npub1xyz..."], }, },}支援的格式:
- Private key:
nsec...或 64 字元 hex - Pubkeys (
allowFrom):npub...或 hex
中繼站 (Relays)
Section titled “中繼站 (Relays)”預設值:relay.damus.io 和 nos.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 | Status | Description |
|---|---|---|
| NIP-01 | Supported | Basic event format + profile metadata |
| NIP-04 | Supported | Encrypted DMs (kind:4) |
| NIP-17 | Planned | Gift-wrapped DMs |
| NIP-44 | Planned | Versioned encryption |
# Start strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}- 從日誌中記錄機器人的 pubkey (npub)。
- 開啟 Nostr 用戶端(如 Damus, Amethyst 等)。
- 傳送 DM 給機器人的 pubkey。
- 驗證回覆內容。
無法接收訊息
Section titled “無法接收訊息”- 驗證 Private key 是否有效。
- 確保中繼站 URL 可以連線,且使用
wss://(本地測試則用ws://)。 - 確認
enabled沒有被設為false。 - 檢查 Gateway 日誌是否有中繼站連線錯誤。
無法傳送回覆
Section titled “無法傳送回覆”- 檢查中繼站是否接受寫入。
- 驗證對外連線能力。
- 注意中繼站的速率限制。
- 使用多個中繼站時這是正常現象。
- 訊息會透過事件 ID 進行去重;只有第一次送達會觸發回覆。
- 絕對不要提交 Private key 到版本控制系統。
- 使用環境變數來管理金鑰。
- 生產環境的機器人建議考慮使用
allowlist。 - 配對和白名單策略會在解密前執行,因此未知傳送者無法強制消耗加密運算資源。
限制 (MVP)
Section titled “限制 (MVP)”- 僅支援直接訊息(不支援群組聊天)。
- 不支援媒體附件。
- 僅支援 NIP-04(已規劃支援 NIP-17 gift-wrap)。
- Channels Overview — 所有支援的 Channel
- Pairing — DM 身分驗證與配對流程
- Groups — 群組聊天行為與提及過濾
- Channel Routing — 訊息的會話路由
- Security — 存取模型與安全性強化
OpenClaw Expert
還是卡住了?
如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。