Developer and self-hosted
Nostr
Nostr هو Plugin قناة قابل للتنزيل (@openclaw/nostr) يتيح لـ OpenClaw تلقي الرسائل المباشرة المشفرة وفق NIP-04 والرد عليها عبر مرحّلات Nostr. حساب واحد لكل Gateway؛ الرسائل المباشرة فقط.
التثبيت
openclaw plugins install @openclaw/nostrاستخدم مواصفة الحزمة المجرّدة لمتابعة وسم الإصدار الرسمي الحالي. ثبّت إصدارًا محددًا بدقة فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج.
من نسخة محلية من المستودع (سير عمل التطوير):
openclaw plugins install --link <path-to-local-nostr-plugin>أعد تشغيل Gateway بعد تثبيت Plugins أو تمكينها. يعرض الإعداد الأولي (openclaw onboard) والأمر openclaw channels add قناة Nostr من كتالوج القنوات المشترك بعد تثبيت Plugin.
الإعداد غير التفاعلي
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"استخدم --use-env للاحتفاظ بـ NOSTR_PRIVATE_KEY في البيئة بدلًا من تخزين المفتاح في الإعدادات (للحساب الافتراضي فقط).
الإعداد السريع
- أنشئ زوج مفاتيح Nostr (عند الحاجة):
# باستخدام naknak 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 |
سياسة الوصول إلى الرسائل المباشرة |
allowFrom |
string[] | [] |
المفاتيح العامة للمرسلين المسموح لهم |
enabled |
boolean | true |
تمكين القناة أو تعطيلها |
name |
string | - | اسم العرض |
profile |
object | - | بيانات الملف الشخصي الوصفية وفق NIP-01 |
بيانات الملف الشخصي الوصفية
تُنشر بيانات الملف الشخصي كحدث NIP-01 من النوع kind:0. يمكنك إدارتها من واجهة التحكم (Channels -> Nostr -> Profile) أو تعيينها مباشرة في الإعدادات.
مثال:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", profile: { name: "openclaw", displayName: "OpenClaw", about: "روبوت رسائل مباشرة يعمل كمساعد شخصي", 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://. - يؤدي الاستيراد من المرحّلات إلى دمج الحقول مع الحفاظ على التجاوزات المحلية.
التحكم في الوصول
سياسات الرسائل المباشرة
- pairing (الافتراضية): يحصل المرسلون غير المعروفين على رمز إقران.
- allowlist: لا يمكن إرسال رسائل مباشرة إلا من المفاتيح العامة الموجودة في
allowFrom. - open: رسائل مباشرة واردة متاحة للعامة (تتطلب
allowFrom: ["*"]). - disabled: تجاهل الرسائل المباشرة الواردة.
ملاحظات الإنفاذ:
- يجري التحقق من توقيعات الأحداث الواردة قبل تطبيق سياسة المرسل وفك تشفير NIP-04، لذلك تُرفض الأحداث المزوّرة مبكرًا.
- تُرسل ردود الإقران دون فك تشفير نص الرسالة المباشرة الأصلية أو معالجته.
- تخضع الرسائل المباشرة الواردة لتحديد المعدل (عموميًا ولكل مرسل)، وتُسقط الحمولات ذات الحجم الزائد قبل فك التشفير.
مثال على قائمة السماح
{ 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"], }, },}نصائح:
- استخدم مرحّلين أو ثلاثة مرحّلات لتحقيق التكرار الاحتياطي.
- تجنّب استخدام عدد كبير جدًا من المرحّلات (بسبب زمن الاستجابة والتكرار).
- يمكن للمرحّلات المدفوعة تحسين الموثوقية.
- المرحّلات المحلية مناسبة للاختبار (
ws://localhost:7777).
دعم البروتوكولات
| NIP | الحالة | الوصف |
|---|---|---|
| NIP-01 | مدعوم | تنسيق الأحداث الأساسي وبيانات الملف الشخصي الوصفية |
| NIP-04 | مدعوم | رسائل مباشرة مشفرة (kind:4) |
| NIP-17 | مخطط له | رسائل مباشرة مغلّفة كهدية |
| NIP-44 | مخطط له | تشفير بإصدارات |
الاختبار
مرحّل محلي
# تشغيل strfrydocker 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 أو غيرهما).
- أرسل رسالة مباشرة إلى المفتاح العام للروبوت.
- تحقّق من الرد.
استكشاف الأخطاء وإصلاحها
عدم تلقي الرسائل
- تحقّق من صلاحية المفتاح الخاص.
- تأكد من إمكانية الوصول إلى عناوين URL للمرحّلات ومن أنها تستخدم
wss://(أوws://للاتصال المحلي). - تأكد من أن
enabledليستfalse. - افحص سجلات Gateway بحثًا عن أخطاء الاتصال بالمرحّلات.
عدم إرسال الردود
- تحقّق من أن المرحّل يقبل عمليات الكتابة.
- تحقّق من الاتصال الصادر.
- راقب حدود المعدل التي تفرضها المرحّلات.
الردود المكررة
- هذا متوقع عند استخدام مرحّلات متعددة.
- تُزال الرسائل المكررة استنادًا إلى معرّف الحدث؛ ولا يؤدي إلى تشغيل رد سوى أول تسليم.
الأمان
- لا تُضمّن المفاتيح الخاصة في المستودع مطلقًا.
- استخدم متغيرات البيئة للمفاتيح.
- فكّر في استخدام
allowlistلروبوتات بيئة الإنتاج. - يجري التحقق من التوقيعات قبل تطبيق سياسة المرسل، وتُطبّق سياسة المرسل قبل فك التشفير، لذلك تُرفض الأحداث المزوّرة مبكرًا ولا يمكن للمرسلين غير المعروفين فرض تنفيذ عمليات التشفير كاملة.
القيود (الحد الأدنى من المنتج القابل للاستخدام)
- الرسائل المباشرة فقط (لا توجد محادثات جماعية).
- لا توجد مرفقات وسائط.
- NIP-04 فقط (من المخطط دعم التغليف كهدية وفق NIP-17).
ذو صلة
- نظرة عامة على القنوات — جميع القنوات المدعومة
- الإقران — مصادقة الرسائل المباشرة ومسار الإقران
- المجموعات — سلوك المحادثات الجماعية والتحكم بالوصول عبر الإشارات
- توجيه القنوات — توجيه جلسات الرسائل
- الأمان — نموذج الوصول وتعزيز الحماية