الانتقال إلى المحتوى الرئيسي

Nostr

الحالة: plugin مضمّن اختياري (معطل افتراضيًا حتى تتم تهيئته). Nostr هو بروتوكول لامركزي للشبكات الاجتماعية. تتيح هذه القناة لـ OpenClaw استقبال الرسائل المباشرة (DMs) المشفرة والرد عليها عبر NIP-04.

plugin المضمّن

تشحن إصدارات OpenClaw الحالية Nostr باعتباره plugin مضمّنًا، لذلك لا تحتاج البنيات المعبأة العادية إلى تثبيت منفصل.

عمليات التثبيت الأقدم/المخصصة

  • لا يزال openclaw onboard وopenclaw channels add يعرضان Nostr من فهرس القنوات المشترك.
  • إذا كان البناء الخاص بك يستبعد Nostr المضمّن، فثبّته يدويًا.
openclaw plugins install @openclaw/nostr
استخدم نسخة checkout محلية (سير عمل التطوير):
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 في البيئة بدلًا من تخزين المفتاح في الإعدادات.

إعداد سريع

  1. أنشئ زوج مفاتيح Nostr ‏(إذا لزم الأمر):
# Using nak
nak key generate
  1. أضفه إلى الإعدادات:
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
  1. صدّر المفتاح:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. أعد تشغيل Gateway.

مرجع الإعدادات

المفتاحالنوعالافتراضيالوصف
privateKeystringمطلوبالمفتاح الخاص بتنسيق nsec أو hex
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']عناوين URL للـ relay ‏(WebSocket)
dmPolicystringpairingسياسة الوصول للرسائل المباشرة
allowFromstring[][]مفاتيح pubkeys المسموح بها للمرسلين
enabledbooleantrueتمكين/تعطيل القناة
namestring-اسم العرض
profileobject-بيانات تعريف ملف NIP-01

بيانات تعريف الملف الشخصي

يتم نشر بيانات الملف الشخصي كحدث NIP-01 من النوع kind:0. يمكنك إدارتها من واجهة Control UI ‏(Channels -> Nostr -> Profile) أو ضبطها مباشرة في الإعدادات. مثال:
{
  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://.
  • يؤدي الاستيراد من relays إلى دمج الحقول مع الحفاظ على التجاوزات المحلية.

التحكم في الوصول

سياسات الرسائل المباشرة

  • pairing (الافتراضي): يحصل المرسلون غير المعروفين على رمز اقتران.
  • allowlist: لا يمكن إلا للمفاتيح العامة الموجودة في allowFrom إرسال رسائل مباشرة.
  • open: رسائل مباشرة عامة واردة (يتطلب allowFrom: ["*"]).
  • disabled: تجاهل الرسائل المباشرة الواردة.
ملاحظات التنفيذ:
  • يتم التحقق من تواقيع الأحداث الواردة قبل سياسة المرسل وفك تشفير NIP-04، لذلك تُرفض الأحداث المزورة مبكرًا.
  • يتم إرسال ردود الاقتران من دون معالجة نص الرسالة المباشرة الأصلي.
  • يتم تطبيق حد للمعدل على الرسائل المباشرة الواردة، ويتم إسقاط الحمولات كبيرة الحجم قبل فك التشفير.

مثال على قائمة السماح

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

تنسيقات المفاتيح

التنسيقات المقبولة:
  • المفتاح الخاص: nsec... أو hex من 64 حرفًا
  • المفاتيح العامة (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مدعومالرسائل المباشرة المشفرة (kind:4)
NIP-17مخطط لهالرسائل المباشرة المغلفة بهدايا
NIP-44مخطط لهتشفير بإصدارات

الاختبار

Relay محلي

# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
      relays: ["ws://localhost:7777"],
    },
  },
}

اختبار يدوي

  1. دوّن المفتاح العام الخاص بالبوت (npub) من السجلات.
  2. افتح عميل Nostr ‏(Damus أو Amethyst أو غيرهما).
  3. أرسل رسالة مباشرة إلى المفتاح العام الخاص بالبوت.
  4. تحقق من الاستجابة.

استكشاف الأخطاء وإصلاحها

لا يتم استقبال الرسائل

  • تحقّق من أن المفتاح الخاص صالح.
  • تأكد من إمكانية الوصول إلى عناوين URL الخاصة بـ relay وأنها تستخدم wss:// ‏(أو ws:// للمحلي).
  • أكّد أن enabled ليس false.
  • تحقّق من سجلات Gateway بحثًا عن أخطاء اتصال relay.

لا يتم إرسال الردود

  • تحقّق من أن relay يقبل عمليات الكتابة.
  • تحقّق من الاتصال الصادر.
  • راقب حدود المعدل الخاصة بـ relay.

ردود مكررة

  • هذا متوقع عند استخدام relays متعددة.
  • تتم إزالة التكرار من الرسائل حسب معرّف الحدث؛ ولا يؤدي إلا أول تسليم إلى تشغيل رد.

الأمان

  • لا تلتزم أبدًا بالمفاتيح الخاصة في المستودع.
  • استخدم متغيرات البيئة للمفاتيح.
  • فكّر في استخدام allowlist لبوتات الإنتاج.
  • يتم التحقق من التواقيع قبل سياسة المرسل، ويتم فرض سياسة المرسل قبل فك التشفير، لذلك تُرفض الأحداث المزورة مبكرًا ولا يمكن للمرسلين غير المعروفين فرض عمل تشفيري كامل.

القيود (MVP)

  • الرسائل المباشرة فقط (من دون دردشات جماعية).
  • لا توجد مرفقات وسائط.
  • NIP-04 فقط (تغليف الهدايا في NIP-17 مخطط له).

ذو صلة