Developer and self-hosted

Nostr

Durum: İsteğe bağlı paketlenmiş Plugin (yapılandırılana kadar varsayılan olarak devre dışıdır).

Nostr, sosyal ağlar için merkeziyetsiz bir protokoldür. Bu kanal, OpenClaw’ın NIP-04 üzerinden şifrelenmiş doğrudan mesajları (DM’ler) almasını ve yanıtlamasını sağlar.

Paketlenmiş Plugin

Güncel OpenClaw sürümleri Nostr’u paketlenmiş bir Plugin olarak sunar, bu yüzden normal paketlenmiş derlemeler ayrı bir kurulum gerektirmez.

Eski/özel kurulumlar

  • Onboarding (openclaw onboard) ve openclaw channels add, Nostr’u paylaşılan kanal kataloğundan göstermeye devam eder.
  • Derlemeniz paketlenmiş Nostr’u hariç tutuyorsa npm paketini doğrudan kurun.
openclaw plugins install @openclaw/nostr

Güncel resmi sürüm etiketini takip etmek için yalın paketi kullanın. Tam bir sürümü yalnızca tekrarlanabilir bir kurulum gerektiğinde sabitleyin.

Yerel bir checkout kullanın (geliştirme iş akışları):

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

Plugin’leri kurduktan veya etkinleştirdikten sonra Gateway’i yeniden başlatın.

Etkileşimsiz kurulum

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"

Anahtarı yapılandırmada depolamak yerine NOSTR_PRIVATE_KEY değerini ortamda tutmak için --use-env kullanın.

Hızlı kurulum

  1. Bir Nostr anahtar çifti oluşturun (gerekiyorsa):
# Using nak
nak key generate
  1. Yapılandırmaya ekleyin:
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
  1. Anahtarı dışa aktarın:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Gateway’i yeniden başlatın.

Yapılandırma başvurusu

Anahtar Tür Varsayılan Açıklama
privateKey string gerekli nsec veya hex biçiminde özel anahtar
relays string[] ['wss://relay.damus.io', 'wss://nos.lol'] Relay URL’leri (WebSocket)
dmPolicy string pairing DM erişim ilkesi
allowFrom string[] [] İzin verilen gönderen pubkey’leri
enabled boolean true Kanalı etkinleştir/devre dışı bırak
name string - Görünen ad
profile object - NIP-01 profil meta verileri

Profil meta verileri

Profil verileri NIP-01 kind:0 olayı olarak yayımlanır. Bunu Control UI’dan (Channels -> Nostr -> Profile) yönetebilir veya doğrudan yapılandırmada ayarlayabilirsiniz.

Örnek:

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

Notlar:

  • Profil URL’leri https:// kullanmalıdır.
  • Relay’lerden içe aktarma alanları birleştirir ve yerel geçersiz kılmaları korur.

Erişim denetimi

DM ilkeleri

  • pairing (varsayılan): bilinmeyen gönderenler bir eşleştirme kodu alır.
  • allowlist: yalnızca allowFrom içindeki pubkey’ler DM gönderebilir.
  • open: herkese açık gelen DM’ler (allowFrom: ["*"] gerektirir).
  • disabled: gelen DM’leri yok sayar.

Zorunlu kılma notları:

  • Gelen olay imzaları, gönderen ilkesi ve NIP-04 şifre çözümünden önce doğrulanır; böylece sahte olaylar erken reddedilir.
  • Eşleştirme yanıtları, özgün DM gövdesi işlenmeden gönderilir.
  • Gelen DM’ler hız sınırlamasına tabidir ve aşırı büyük yükler şifre çözmeden önce düşürülür.

Allowlist örneği

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

Anahtar biçimleri

Kabul edilen biçimler:

  • Özel anahtar: nsec... veya 64 karakterlik hex
  • Pubkey’ler (allowFrom): npub... veya hex

Relay’ler

Varsayılanlar: relay.damus.io ve nos.lol.

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

İpuçları:

  • Yedeklilik için 2-3 relay kullanın.
  • Çok fazla relay’den kaçının (gecikme, çoğaltma).
  • Ücretli relay’ler güvenilirliği artırabilir.
  • Yerel relay’ler test için uygundur (ws://localhost:7777).

Protokol desteği

NIP Durum Açıklama
NIP-01 Desteklenir Temel olay biçimi + profil meta verileri
NIP-04 Desteklenir Şifrelenmiş DM’ler (kind:4)
NIP-17 Planlandı Hediye paketli DM’ler
NIP-44 Planlandı Sürümlü şifreleme

Test etme

Yerel relay

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

Manuel test

  1. Günlüklerden bot pubkey’ini (npub) not edin.
  2. Bir Nostr istemcisi açın (Damus, Amethyst vb.).
  3. Bot pubkey’ine DM gönderin.
  4. Yanıtı doğrulayın.

Sorun giderme

Mesajlar alınmıyor

  • Özel anahtarın geçerli olduğunu doğrulayın.
  • Relay URL’lerinin erişilebilir olduğundan ve wss:// (veya yerel için ws://) kullandığından emin olun.
  • enabled değerinin false olmadığını doğrulayın.
  • Relay bağlantı hataları için Gateway günlüklerini kontrol edin.

Yanıtlar gönderilmiyor

  • Relay’in yazmaları kabul ettiğini kontrol edin.
  • Giden bağlantıyı doğrulayın.
  • Relay hız sınırlarını izleyin.

Yinelenen yanıtlar

  • Birden fazla relay kullanırken beklenir.
  • Mesajlar olay kimliğine göre tekilleştirilir; yalnızca ilk teslimat bir yanıt tetikler.

Güvenlik

  • Özel anahtarları asla commit etmeyin.
  • Anahtarlar için ortam değişkenleri kullanın.
  • Üretim botları için allowlist kullanmayı değerlendirin.
  • İmzalar gönderen ilkesinden önce doğrulanır ve gönderen ilkesi şifre çözmeden önce uygulanır; böylece sahte olaylar erken reddedilir ve bilinmeyen gönderenler tam kripto çalışmasını zorlayamaz.

Sınırlamalar (MVP)

  • Yalnızca doğrudan mesajlar (grup sohbeti yok).
  • Medya ekleri yok.
  • Yalnızca NIP-04 (NIP-17 hediye paketleme planlandı).

İlgili