Developer and self-hosted
Nostr
Nostr एक डाउनलोड करने योग्य चैनल Plugin (@openclaw/nostr) है, जो OpenClaw को Nostr रिले पर NIP-04 एन्क्रिप्टेड प्रत्यक्ष संदेश प्राप्त करने और उनका उत्तर देने देता है। प्रत्येक Gateway पर एक खाता; केवल DM।
इंस्टॉल करें
openclaw plugins install @openclaw/nostrवर्तमान आधिकारिक रिलीज़ टैग का अनुसरण करने के लिए केवल पैकेज विनिर्देश का उपयोग करें। सटीक संस्करण को केवल तभी पिन करें, जब आपको पुनरुत्पाद्य इंस्टॉलेशन चाहिए।
स्थानीय चेकआउट से (डेवलपमेंट कार्यप्रवाह):
openclaw plugins install --link <path-to-local-nostr-plugin>Plugins इंस्टॉल या सक्षम करने के बाद Gateway को पुनः प्रारंभ करें। Plugin इंस्टॉल हो जाने पर ऑनबोर्डिंग (openclaw onboard) और openclaw channels add, साझा चैनल कैटलॉग से Nostr दिखाते हैं।
गैर-इंटरैक्टिव सेटअप
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 कुंजी-युग्म जनरेट करें (यदि आवश्यक हो):
# nak का उपयोग करकेnak key generate- कॉन्फ़िगरेशन में जोड़ें:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", }, },}- कुंजी एक्सपोर्ट करें:
export NOSTR_PRIVATE_KEY="nsec1..."- Gateway को पुनः प्रारंभ करें।
कॉन्फ़िगरेशन संदर्भ
| कुंजी | प्रकार | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
privateKey |
string | आवश्यक | nsec या हेक्स प्रारूप में निजी कुंजी; सीक्रेट संदर्भ अनुमत हैं |
relays |
string[] | ['wss://relay.damus.io', 'wss://nos.lol'] |
रिले URL (WebSocket) |
dmPolicy |
string | pairing |
DM अभिगम नीति |
allowFrom |
string[] | [] |
अनुमत प्रेषक सार्वजनिक कुंजियाँ |
enabled |
boolean | true |
चैनल सक्षम/अक्षम करें |
name |
string | - | प्रदर्शन नाम |
profile |
object | - | NIP-01 प्रोफ़ाइल मेटाडेटा |
प्रोफ़ाइल मेटाडेटा
प्रोफ़ाइल डेटा NIP-01 kind:0 इवेंट के रूप में प्रकाशित किया जाता है। आप इसे Control UI (Channels -> Nostr -> Profile) से प्रबंधित कर सकते हैं या सीधे कॉन्फ़िगरेशन में सेट कर सकते हैं।
उदाहरण:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", profile: { name: "openclaw", displayName: "OpenClaw", about: "व्यक्तिगत सहायक DM बॉट", 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 नीतियाँ
- पेयरिंग (डिफ़ॉल्ट): अज्ञात प्रेषकों को पेयरिंग कोड मिलता है।
- अनुमति-सूची: केवल
allowFromमें मौजूद सार्वजनिक कुंजियाँ DM भेज सकती हैं। - खुला: सार्वजनिक इनबाउंड DM (
allowFrom: ["*"]आवश्यक है)। - अक्षम: इनबाउंड DM अनदेखे करें।
प्रवर्तन संबंधी टिप्पणियाँ:
- प्रेषक नीति और NIP-04 डिक्रिप्शन से पहले इनबाउंड इवेंट हस्ताक्षर सत्यापित किए जाते हैं, इसलिए जाली इवेंट पहले ही अस्वीकार कर दिए जाते हैं।
- मूल DM का मुख्य भाग डिक्रिप्ट या प्रोसेस किए बिना पेयरिंग उत्तर भेजे जाते हैं।
- इनबाउंड DM पर दर सीमा लागू होती है (विश्व स्तर पर और प्रत्येक प्रेषक के लिए) और अत्यधिक बड़े पेलोड डिक्रिप्शन से पहले हटा दिए जाते हैं।
अनुमति-सूची का उदाहरण
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", dmPolicy: "allowlist", allowFrom: ["npub1abc...", "npub1xyz..."], }, },}कुंजी प्रारूप
स्वीकृत प्रारूप:
- निजी कुंजी:
nsec...या 64-वर्णीय हेक्स - सार्वजनिक कुंजियाँ (
allowFrom):npub...या हेक्स
रिले
डिफ़ॉल्ट: 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 | समर्थित | एन्क्रिप्टेड DM (kind:4) |
| NIP-17 | नियोजित | गिफ़्ट-रैप किए गए DM |
| NIP-44 | नियोजित | संस्करणयुक्त एन्क्रिप्शन |
परीक्षण
स्थानीय रिले
# strfry प्रारंभ करेंdocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}मैन्युअल परीक्षण
- Gateway लॉग या
openclaw channels statusसे बॉट की सार्वजनिक कुंजी नोट करें (हेक्स; यदि आवश्यक हो, तो अपने क्लाइंट में इसे npub में बदलें)। - कोई Nostr क्लाइंट खोलें (Amethyst, Damus आदि)।
- बॉट की सार्वजनिक कुंजी पर DM भेजें।
- उत्तर सत्यापित करें।
समस्या निवारण
संदेश प्राप्त नहीं हो रहे हैं
- सत्यापित करें कि निजी कुंजी मान्य है।
- सुनिश्चित करें कि रिले URL तक पहुँचा जा सकता है और वे
wss://(या स्थानीय उपयोग के लिएws://) का उपयोग करते हैं। - पुष्टि करें कि
enabled,falseनहीं है। - रिले कनेक्शन त्रुटियों के लिए Gateway लॉग जाँचें।
उत्तर नहीं भेजे जा रहे हैं
- जाँचें कि रिले लेखन स्वीकार करता है।
- आउटबाउंड कनेक्टिविटी सत्यापित करें।
- रिले की दर सीमाओं पर नज़र रखें।
डुप्लिकेट उत्तर
- एकाधिक रिले का उपयोग करते समय यह अपेक्षित है।
- संदेशों से इवेंट ID के आधार पर डुप्लिकेट हटाए जाते हैं; केवल पहली डिलीवरी उत्तर ट्रिगर करती है।
सुरक्षा
- निजी कुंजियाँ कभी कमिट न करें।
- कुंजियों के लिए परिवेश चर का उपयोग करें।
- प्रोडक्शन बॉट के लिए
allowlistपर विचार करें। - प्रेषक नीति से पहले हस्ताक्षर सत्यापित किए जाते हैं और डिक्रिप्शन से पहले प्रेषक नीति लागू की जाती है, इसलिए जाली इवेंट पहले ही अस्वीकार कर दिए जाते हैं और अज्ञात प्रेषक पूर्ण क्रिप्टोग्राफ़िक प्रोसेसिंग को बाध्य नहीं कर सकते।
सीमाएँ (MVP)
- केवल प्रत्यक्ष संदेश (कोई समूह चैट नहीं)।
- कोई मीडिया अटैचमेंट नहीं।
- केवल NIP-04 (NIP-17 गिफ़्ट-रैप नियोजित है)।
संबंधित
- चैनल का अवलोकन — सभी समर्थित चैनल
- पेयरिंग — DM प्रमाणीकरण और पेयरिंग प्रवाह
- समूह — समूह चैट का व्यवहार और उल्लेख गेटिंग
- चैनल रूटिंग — संदेशों के लिए सत्र रूटिंग
- सुरक्षा — अभिगम मॉडल और सुदृढ़ीकरण