Developer and self-hosted

Nostr

स्थिति: वैकल्पिक बंडल किया गया Plugin (कॉन्फ़िगर होने तक डिफ़ॉल्ट रूप से अक्षम)।

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

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

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

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

  • ऑनबोर्डिंग (openclaw onboard) और openclaw channels add अब भी साझा चैनल कैटलॉग से Nostr दिखाते हैं।
  • अगर आपका बिल्ड बंडल किए गए Nostr को बाहर रखता है, तो npm पैकेज सीधे इंस्टॉल करें।
bash
openclaw plugins install @openclaw/nostr

वर्तमान आधिकारिक रिलीज़ टैग का अनुसरण करने के लिए बिना संस्करण वाला पैकेज इस्तेमाल करें। सटीक संस्करण केवल तब पिन करें जब आपको पुनरुत्पादनीय इंस्टॉल चाहिए।

लोकल चेकआउट इस्तेमाल करें (डेव वर्कफ़्लो):

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

Plugin इंस्टॉल या सक्षम करने के बाद Gateway रीस्टार्ट करें।

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

bash
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 कीपेयर जनरेट करें (यदि ज़रूरत हो):
bash
# Using naknak key generate
  1. कॉन्फ़िग में जोड़ें:
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",    },  },}
  1. कुंजी एक्सपोर्ट करें:
bash
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Gateway रीस्टार्ट करें।

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

कुंजी प्रकार डिफ़ॉल्ट विवरण
privateKey string आवश्यक nsec या hex फ़ॉर्मैट में निजी कुंजी
relays string[] ['wss://relay.damus.io', 'wss://nos.lol'] रिले URL (WebSocket)
dmPolicy string pairing DM एक्सेस नीति
allowFrom string[] [] अनुमत भेजने वाले pubkeys
enabled boolean true चैनल सक्षम/अक्षम करें
name string - प्रदर्शित नाम
profile object - NIP-01 प्रोफ़ाइल मेटाडेटा

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

प्रोफ़ाइल डेटा NIP-01 kind:0 इवेंट के रूप में प्रकाशित होता है। आप इसे Control UI (चैनल -> Nostr -> प्रोफ़ाइल) से प्रबंधित कर सकते हैं या सीधे कॉन्फ़िग में सेट कर सकते हैं।

उदाहरण:

json5
{  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 उदाहरण

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

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

स्वीकृत फ़ॉर्मैट:

  • निजी कुंजी: nsec... या 64-अक्षर hex
  • Pubkeys (allowFrom): npub... या hex

रिले

डिफ़ॉल्ट: relay.damus.io और nos.lol

json5
{  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 योजनाबद्ध संस्करणयुक्त एन्क्रिप्शन

टेस्टिंग

लोकल रिले

bash
# Start strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry
json5
{  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 गिफ़्ट-रैप योजनाबद्ध)।

संबंधित

Was this useful?
On this page

On this page