Developer and self-hosted
Nostr
स्थिति: वैकल्पिक बंडल किया गया 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 इस्तेमाल करें।
त्वरित सेटअप
- Nostr कीपेयर जनरेट करें (यदि ज़रूरत हो):
# Using naknak key generate- कॉन्फ़िग में जोड़ें:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", }, },}- कुंजी एक्सपोर्ट करें:
export NOSTR_PRIVATE_KEY="nsec1..."- 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 -> प्रोफ़ाइल) से प्रबंधित कर सकते हैं या सीधे कॉन्फ़िग में सेट कर सकते हैं।
उदाहरण:
{ 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 strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}मैनुअल टेस्ट
- लॉग से बॉट pubkey (npub) नोट करें।
- कोई Nostr क्लाइंट खोलें (Damus, Amethyst, आदि)।
- बॉट pubkey को DM करें।
- प्रतिक्रिया सत्यापित करें।
समस्या निवारण
संदेश प्राप्त नहीं हो रहे
- सत्यापित करें कि निजी कुंजी मान्य है।
- सुनिश्चित करें कि रिले URL पहुंच योग्य हैं और
wss://इस्तेमाल करते हैं (या लोकल के लिएws://)। - पुष्टि करें कि
enabledfalseनहीं है। - रिले कनेक्शन त्रुटियों के लिए Gateway लॉग देखें।
प्रतिक्रियाएं नहीं भेजी जा रहीं
- जांचें कि रिले राइट स्वीकार करता है।
- आउटबाउंड कनेक्टिविटी सत्यापित करें।
- रिले रेट लिमिट पर नज़र रखें।
डुप्लिकेट प्रतिक्रियाएं
- कई रिले इस्तेमाल करते समय यह अपेक्षित है।
- संदेशों को इवेंट ID से डीडुप्लिकेट किया जाता है; केवल पहली डिलीवरी प्रतिक्रिया ट्रिगर करती है।
सुरक्षा
- निजी कुंजियां कभी कमिट न करें।
- कुंजियों के लिए एनवायरनमेंट वैरिएबल इस्तेमाल करें।
- प्रोडक्शन बॉट्स के लिए
allowlistपर विचार करें। - हस्ताक्षर भेजने वाले की नीति से पहले सत्यापित किए जाते हैं, और भेजने वाले की नीति डिक्रिप्ट से पहले लागू होती है, इसलिए जाली इवेंट जल्दी अस्वीकार हो जाते हैं और अज्ञात भेजने वाले पूरा क्रिप्टो काम मजबूर नहीं कर सकते।
सीमाएं (MVP)
- केवल डायरेक्ट मैसेज (ग्रुप चैट नहीं)।
- कोई मीडिया अटैचमेंट नहीं।
- केवल NIP-04 (NIP-17 गिफ़्ट-रैप योजनाबद्ध)।
संबंधित
- चैनल अवलोकन — सभी समर्थित चैनल
- पेयरिंग — DM प्रमाणीकरण और पेयरिंग फ़्लो
- ग्रुप — ग्रुप चैट व्यवहार और मेंशन गेटिंग
- चैनल रूटिंग — संदेशों के लिए सेशन रूटिंग
- सुरक्षा — एक्सेस मॉडल और हार्डनिंग