मुख्य सामग्री पर जाएं
स्थिति: वैकल्पिक बंडल किया गया Plugin (कॉन्फ़िगर होने तक डिफ़ॉल्ट रूप से अक्षम)। Nostr सोशल नेटवर्किंग के लिए एक विकेंद्रीकृत प्रोटोकॉल है। यह चैनल OpenClaw को NIP-04 के ज़रिए एन्क्रिप्टेड डायरेक्ट मैसेज (DMs) प्राप्त करने और उनका जवाब देने में सक्षम बनाता है।

बंडल किया गया Plugin

वर्तमान OpenClaw रिलीज़ Nostr को बंडल किए गए Plugin के रूप में शिप करती हैं, इसलिए सामान्य पैकेज्ड बिल्ड को अलग इंस्टॉल की ज़रूरत नहीं होती।

पुराने/कस्टम इंस्टॉल

  • ऑनबोर्डिंग (openclaw onboard) और openclaw channels add अब भी साझा चैनल कैटलॉग से Nostr दिखाते हैं।
  • अगर आपका बिल्ड बंडल किए गए Nostr को बाहर रखता है, तो npm पैकेज सीधे इंस्टॉल करें।
openclaw plugins install @openclaw/nostr
वर्तमान आधिकारिक रिलीज़ टैग का अनुसरण करने के लिए बिना संस्करण वाला पैकेज इस्तेमाल करें। सटीक संस्करण केवल तब पिन करें जब आपको पुनरुत्पादनीय इंस्टॉल चाहिए। लोकल चेकआउट इस्तेमाल करें (डेव वर्कफ़्लो):
openclaw plugins install --link <path-to-local-nostr-plugin>
Plugin इंस्टॉल या सक्षम करने के बाद Gateway रीस्टार्ट करें।

गैर-इंटरैक्टिव सेटअप

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"
कुंजी को कॉन्फ़िग में स्टोर करने के बजाय NOSTR_PRIVATE_KEY को एनवायरनमेंट में रखने के लिए --use-env इस्तेमाल करें।

त्वरित सेटअप

  1. Nostr कीपेयर जनरेट करें (यदि ज़रूरत हो):
# Using nak
nak key generate
  1. कॉन्फ़िग में जोड़ें:
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
  1. कुंजी एक्सपोर्ट करें:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Gateway रीस्टार्ट करें।

कॉन्फ़िगरेशन संदर्भ

कुंजीप्रकारडिफ़ॉल्टविवरण
privateKeystringआवश्यकnsec या hex फ़ॉर्मैट में निजी कुंजी
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']रिले URL (WebSocket)
dmPolicystringpairingDM एक्सेस नीति
allowFromstring[][]अनुमत भेजने वाले pubkeys
enabledbooleantrueचैनल सक्षम/अक्षम करें
namestring-प्रदर्शित नाम
profileobject-NIP-01 प्रोफ़ाइल मेटाडेटा

प्रोफ़ाइल मेटाडेटा

प्रोफ़ाइल डेटा NIP-01 kind:0 इवेंट के रूप में प्रकाशित होता है। आप इसे Control UI (चैनल -> Nostr -> प्रोफ़ाइल) से प्रबंधित कर सकते हैं या सीधे कॉन्फ़िग में सेट कर सकते हैं। उदाहरण:
{
  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",
      },
    },
  },
}
नोट्स:
  • प्रोफ़ाइल URL में https:// इस्तेमाल होना चाहिए।
  • रिले से इम्पोर्ट करने पर फ़ील्ड मर्ज होते हैं और लोकल ओवरराइड सुरक्षित रहते हैं।

एक्सेस नियंत्रण

DM नीतियां

  • pairing (डिफ़ॉल्ट): अज्ञात भेजने वालों को पेयरिंग कोड मिलता है।
  • allowlist: केवल allowFrom में मौजूद pubkeys DM कर सकते हैं।
  • open: सार्वजनिक इनबाउंड DMs (allowFrom: ["*"] आवश्यक)।
  • disabled: इनबाउंड DMs अनदेखा करें।
लागू करने के नोट्स:
  • इनबाउंड इवेंट हस्ताक्षर भेजने वाले की नीति और NIP-04 डिक्रिप्शन से पहले सत्यापित किए जाते हैं, इसलिए जाली इवेंट जल्दी अस्वीकार हो जाते हैं।
  • पेयरिंग जवाब मूल DM बॉडी को प्रोसेस किए बिना भेजे जाते हैं।
  • इनबाउंड DMs पर रेट लिमिट लगती है और बहुत बड़े पेलोड डिक्रिप्ट से पहले ड्रॉप कर दिए जाते हैं।

Allowlist उदाहरण

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

कुंजी फ़ॉर्मैट

स्वीकृत फ़ॉर्मैट:
  • निजी कुंजी: nsec... या 64-अक्षर hex
  • Pubkeys (allowFrom): npub... या hex

रिले

डिफ़ॉल्ट: 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स्थितिविवरण
NIP-01समर्थितबेसिक इवेंट फ़ॉर्मैट + प्रोफ़ाइल मेटाडेटा
NIP-04समर्थितएन्क्रिप्टेड DMs (kind:4)
NIP-17योजनाबद्धगिफ़्ट-रैप्ड DMs
NIP-44योजनाबद्धसंस्करणयुक्त एन्क्रिप्शन

टेस्टिंग

लोकल रिले

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

मैनुअल टेस्ट

  1. लॉग से बॉट pubkey (npub) नोट करें।
  2. कोई Nostr क्लाइंट खोलें (Damus, Amethyst, आदि)।
  3. बॉट pubkey को DM करें।
  4. प्रतिक्रिया सत्यापित करें।

समस्या निवारण

संदेश प्राप्त नहीं हो रहे

  • सत्यापित करें कि निजी कुंजी मान्य है।
  • सुनिश्चित करें कि रिले URL पहुंच योग्य हैं और wss:// इस्तेमाल करते हैं (या लोकल के लिए ws://)।
  • पुष्टि करें कि enabled false नहीं है।
  • रिले कनेक्शन त्रुटियों के लिए Gateway लॉग देखें।

प्रतिक्रियाएं नहीं भेजी जा रहीं

  • जांचें कि रिले राइट स्वीकार करता है।
  • आउटबाउंड कनेक्टिविटी सत्यापित करें।
  • रिले रेट लिमिट पर नज़र रखें।

डुप्लिकेट प्रतिक्रियाएं

  • कई रिले इस्तेमाल करते समय यह अपेक्षित है।
  • संदेशों को इवेंट ID से डीडुप्लिकेट किया जाता है; केवल पहली डिलीवरी प्रतिक्रिया ट्रिगर करती है।

सुरक्षा

  • निजी कुंजियां कभी कमिट न करें।
  • कुंजियों के लिए एनवायरनमेंट वैरिएबल इस्तेमाल करें।
  • प्रोडक्शन बॉट्स के लिए allowlist पर विचार करें।
  • हस्ताक्षर भेजने वाले की नीति से पहले सत्यापित किए जाते हैं, और भेजने वाले की नीति डिक्रिप्ट से पहले लागू होती है, इसलिए जाली इवेंट जल्दी अस्वीकार हो जाते हैं और अज्ञात भेजने वाले पूरा क्रिप्टो काम मजबूर नहीं कर सकते।

सीमाएं (MVP)

  • केवल डायरेक्ट मैसेज (ग्रुप चैट नहीं)।
  • कोई मीडिया अटैचमेंट नहीं।
  • केवल NIP-04 (NIP-17 गिफ़्ट-रैप योजनाबद्ध)।

संबंधित