Developer and self-hosted
Nostr
الحالة: Plugin مضمّن اختياري (معطّل افتراضيًا حتى تتم تهيئته).
Nostr هو بروتوكول لامركزي للتواصل الاجتماعي. تتيح هذه القناة لـ OpenClaw استقبال الرسائل المباشرة المشفّرة (DMs) والرد عليها عبر NIP-04.
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>
أعد تشغيل Gateway بعد تثبيت Plugins أو تمكينها.
إعداد غير تفاعلي
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 (إذا لزم الأمر):
# Using nak
nak 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'] |
عناوين Relay (WebSocket) |
dmPolicy |
string | pairing |
سياسة الوصول إلى DM |
allowFrom |
string[] | [] |
مفاتيح pubkey المرسلين المسموح بهم |
enabled |
boolean | true |
تمكين/تعطيل القناة |
name |
string | - | اسم العرض |
profile |
object | - | بيانات تعريف ملف NIP-01 الشخصي |
بيانات تعريف الملف الشخصي
تُنشر بيانات الملف الشخصي كحدث NIP-01 من نوع kind:0. يمكنك إدارتها من واجهة التحكم (القنوات -> 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: "[email protected]",
lud16: "[email protected]",
},
},
},
}
ملاحظات:
- يجب أن تستخدم عناوين URL للملف الشخصي
https://. - يدمج الاستيراد من Relays الحقول ويحافظ على التجاوزات المحلية.
التحكم في الوصول
سياسات DM
- pairing (الافتراضي): يحصل المرسلون غير المعروفين على رمز إقران.
- allowlist: لا يمكن إرسال DM إلا لمفاتيح pubkey الموجودة في
allowFrom. - open: رسائل DM واردة عامة (تتطلب
allowFrom: ["*"]). - disabled: تجاهل رسائل DM الواردة.
ملاحظات الإنفاذ:
- يتم التحقق من توقيعات الأحداث الواردة قبل سياسة المرسل وفك تشفير NIP-04، لذلك تُرفض الأحداث المزوّرة مبكرًا.
- تُرسل ردود الإقران دون معالجة متن DM الأصلي.
- تخضع رسائل DM الواردة لتحديد المعدل، ويتم إسقاط الحمولات كبيرة الحجم قبل فك التشفير.
مثال على قائمة السماح
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}
تنسيقات المفاتيح
التنسيقات المقبولة:
- المفتاح الخاص:
nsec...أو hex بطول 64 حرفًا - مفاتيح Pubkeys (
allowFrom):npub...أو hex
Relays
الافتراضيات: 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 Relays للتكرار الاحتياطي.
- تجنب استخدام عدد كبير جدًا من Relays (زمن انتقال، تكرار).
- يمكن أن تحسّن Relays المدفوعة الاعتمادية.
- Relays المحلية مناسبة للاختبار (
ws://localhost:7777).
دعم البروتوكول
| NIP | الحالة | الوصف |
|---|---|---|
| NIP-01 | مدعوم | تنسيق الحدث الأساسي + بيانات تعريف الملف الشخصي |
| NIP-04 | مدعوم | رسائل DM مشفّرة (kind:4) |
| NIP-17 | مخطط له | رسائل DM مغلّفة كهدية |
| NIP-44 | مخطط له | تشفير بإصدارات |
الاختبار
Relay محلي
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
اختبار يدوي
- لاحظ pubkey الخاص بالبوت (npub) من السجلات.
- افتح عميل Nostr (Damus، Amethyst، إلخ).
- أرسل DM إلى pubkey الخاص بالبوت.
- تحقق من الرد.
استكشاف الأخطاء وإصلاحها
عدم استقبال الرسائل
- تحقق من أن المفتاح الخاص صالح.
- تأكد من إمكانية الوصول إلى عناوين URL الخاصة بـ Relay وأنها تستخدم
wss://(أوws://للمحلي). - تأكد من أن
enabledليستfalse. - تحقق من سجلات Gateway بحثًا عن أخطاء اتصال Relay.
عدم إرسال الردود
- تحقق من أن Relay يقبل الكتابة.
- تحقق من الاتصال الصادر.
- راقب حدود معدل Relay.
الردود المكررة
- متوقعة عند استخدام عدة Relays.
- تُزال الرسائل المكررة حسب معرّف الحدث؛ ولا يؤدي إلا التسليم الأول إلى إطلاق رد.
الأمان
- لا تقم أبدًا بإيداع المفاتيح الخاصة.
- استخدم متغيرات البيئة للمفاتيح.
- فكّر في استخدام
allowlistلبوتات الإنتاج. - يتم التحقق من التوقيعات قبل سياسة المرسل، وتُفرض سياسة المرسل قبل فك التشفير، لذلك تُرفض الأحداث المزوّرة مبكرًا ولا يستطيع المرسلون غير المعروفين فرض عمل التشفير الكامل.
القيود (MVP)
- الرسائل المباشرة فقط (لا توجد محادثات جماعية).
- لا توجد مرفقات وسائط.
- NIP-04 فقط (التغليف كهدية عبر NIP-17 مخطط له).
ذات صلة
- نظرة عامة على القنوات — جميع القنوات المدعومة
- الإقران — مصادقة DM وتدفق الإقران
- المجموعات — سلوك المحادثات الجماعية وبوابة الإشارات
- توجيه القنوات — توجيه الجلسات للرسائل
- الأمان — نموذج الوصول والتقوية