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

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

الحالة: 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 في البيئة بدلًا من تخزين المفتاح في الإعدادات.

إعداد سريع

  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']عناوين Relay (WebSocket)
dmPolicystringpairingسياسة الوصول إلى DM
allowFromstring[][]مفاتيح pubkey المرسلين المسموح بهم
enabledbooleantrueتمكين/تعطيل القناة
namestring-اسم العرض
profileobject-بيانات تعريف ملف 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: "openclaw@example.com",
        lud16: "openclaw@example.com",
      },
    },
  },
}
ملاحظات:
  • يجب أن تستخدم عناوين 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"],
    },
  },
}

اختبار يدوي

  1. لاحظ pubkey الخاص بالبوت (npub) من السجلات.
  2. افتح عميل Nostr (Damus، Amethyst، إلخ).
  3. أرسل DM إلى pubkey الخاص بالبوت.
  4. تحقق من الرد.

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

عدم استقبال الرسائل

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

عدم إرسال الردود

  • تحقق من أن Relay يقبل الكتابة.
  • تحقق من الاتصال الصادر.
  • راقب حدود معدل Relay.

الردود المكررة

  • متوقعة عند استخدام عدة Relays.
  • تُزال الرسائل المكررة حسب معرّف الحدث؛ ولا يؤدي إلا التسليم الأول إلى إطلاق رد.

الأمان

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

القيود (MVP)

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

ذات صلة