Nostr

Trạng thái: Plugin tùy chọn (mặc định tắt).

Nostr là một giao thức phi tập trung cho mạng xã hội. Channel này cho phép OpenClaw nhận và trả lời tin nhắn riêng tư (DM) được mã hóa qua NIP-04.

Cài đặt (theo nhu cầu)

Onboarding (khuyên dùng)

  • Wizard onboarding (openclaw onboard) và openclaw channels add sẽ liệt kê các plugin channel tùy chọn.
  • Chọn Nostr sẽ nhắc các bạn cài plugin ngay.

Mặc định khi cài:

  • Dev channel + có git checkout: dùng đường dẫn plugin local.
  • Stable/Beta: tải về từ npm.

Các bạn luôn có thể thay đổi lựa chọn trong prompt.

Cài thủ công

openclaw plugins install @openclaw/nostr

Dùng bản checkout local (cho dev workflows):

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

Khởi động lại Gateway sau khi cài hoặc bật plugin.

Thiết lập nhanh

  1. Tạo keypair Nostr (nếu cần):
# Dùng nak
nak key generate
  1. Thêm vào config:
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
  1. Export key:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Khởi động lại Gateway.

Tham chiếu cấu hình

KeyTypeDefaultMô tả
privateKeystringbắt buộcPrivate key dạng nsec hoặc hex
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']URL các relay (WebSocket)
dmPolicystringpairingChính sách truy cập DM
allowFromstring[][]Danh sách pubkey được phép gửi tin
enabledbooleantrueBật/tắt channel
namestring-Tên hiển thị
profileobject-Metadata profile NIP-01

Metadata profile

Dữ liệu profile được publish dưới dạng event NIP-01 kind:0. Các bạn có thể quản lý từ Control UI (Channels -> Nostr -> Profile) hoặc set trực tiếp trong config.

Ví dụ:

{
  "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]"
      }
    }
  }
}

Lưu ý:

  • URL trong profile phải dùng https://.
  • Import từ relay sẽ merge các field và giữ nguyên override local.

Kiểm soát truy cập

Chính sách DM

  • pairing (mặc định): người gửi lạ sẽ nhận pairing code.
  • allowlist: chỉ các pubkey trong allowFrom mới gửi DM được.
  • open: DM công khai (cần allowFrom: ["*"]).
  • disabled: bỏ qua DM đến.

Ví dụ allowlist

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

Định dạng key

Các định dạng được chấp nhận:

  • Private key: nsec... hoặc hex 64 ký tự
  • Pubkeys (allowFrom): npub... hoặc hex

Relay

Mặc định: relay.damus.ionos.lol.

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

Tips:

  • Dùng 2-3 relay để đảm bảo dự phòng.
  • Tránh dùng quá nhiều relay (gây latency, trùng lặp).
  • Relay trả phí có thể cải thiện độ tin cậy.
  • Relay local dùng test cũng được (ws://localhost:7777).

Hỗ trợ giao thức

NIPTrạng tháiMô tả
NIP-01Hỗ trợĐịnh dạng event cơ bản + metadata profile
NIP-04Hỗ trợDM mã hóa (kind:4)
NIP-17Dự kiếnGift-wrapped DM
NIP-44Dự kiếnMã hóa có phiên bản

Testing

Relay local

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

Test thủ công

  1. Ghi lại bot pubkey (npub) từ log.
  2. Mở một Nostr client (Damus, Amethyst, v.v.).
  3. Gửi DM đến bot pubkey.
  4. Kiểm tra phản hồi.

Troubleshooting

Không nhận được tin nhắn

  • Kiểm tra private key có hợp lệ không.
  • Đảm bảo URL relay có thể truy cập và dùng wss:// (hoặc ws:// cho local).
  • Xác nhận enabled không phải false.
  • Check log Gateway xem có lỗi kết nối relay không.

Không gửi được phản hồi

  • Kiểm tra relay có chấp nhận ghi không.
  • Xác minh kết nối outbound.
  • Theo dõi rate limit của relay.

Phản hồi bị trùng

  • Điều này bình thường khi dùng nhiều relay.
  • Tin nhắn được deduplicate theo event ID; chỉ lần nhận đầu tiên mới trigger phản hồi.

Bảo mật

  • Không bao giờ commit private key.
  • Dùng biến môi trường cho key.
  • Cân nhắc dùng allowlist cho bot production.

Giới hạn (MVP)

  • Chỉ hỗ trợ tin nhắn riêng (không có group chat).
  • Không hỗ trợ đính kèm media.
  • Chỉ NIP-04 (NIP-17 gift-wrap đang trong kế hoạch).