Developer and self-hosted

Nostr

Nostr یک Plugin کانال قابل دانلود (@openclaw/nostr) است که به OpenClaw امکان می‌دهد پیام‌های مستقیم رمزگذاری‌شده NIP-04 را از طریق رله‌های Nostr دریافت کند و به آن‌ها پاسخ دهد. برای هر Gateway یک حساب؛ فقط پیام‌های مستقیم.

نصب

bash
openclaw plugins install @openclaw/nostr

برای دنبال‌کردن برچسب انتشار رسمی فعلی، از مشخصهٔ سادهٔ بسته استفاده کنید. فقط زمانی نسخه‌ای دقیق را سنجاق کنید که به نصبی تکرارپذیر نیاز دارید.

از یک نسخهٔ محلی مخزن (گردش‌کارهای توسعه):

bash
openclaw plugins install --link <path-to-local-nostr-plugin>

پس از نصب یا فعال‌سازی Pluginها، Gateway را راه‌اندازی مجدد کنید. پس از نصب Plugin، فرایند راه‌اندازی اولیه (openclaw onboard) و openclaw channels add، کانال Nostr را از کاتالوگ مشترک کانال‌ها ارائه می‌کنند.

راه‌اندازی غیرتعاملی

bash
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 استفاده کنید (فقط حساب پیش‌فرض).

راه‌اندازی سریع

  1. یک جفت‌کلید Nostr ایجاد کنید (در صورت نیاز):
bash
# با استفاده از naknak key generate
  1. آن را به پیکربندی اضافه کنید:
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",    },  },}
  1. کلید را صادر کنید:
bash
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Gateway را راه‌اندازی مجدد کنید.

مرجع پیکربندی

کلید نوع پیش‌فرض توضیحات
privateKey string الزامی کلید خصوصی با قالب nsec یا هگز؛ ارجاع به راز مجاز است
relays string[] ['wss://relay.damus.io', 'wss://nos.lol'] نشانی‌های رله (WebSocket)
dmPolicy string pairing سیاست دسترسی پیام مستقیم
allowFrom string[] [] کلیدهای عمومی فرستندگان مجاز
enabled boolean true فعال/غیرفعال‌کردن کانال
name string - نام نمایشی
profile object - فرادادهٔ نمایهٔ NIP-01

فرادادهٔ نمایه

داده‌های نمایه به‌صورت رویداد NIP-01 با kind:0 منتشر می‌شوند. می‌توانید آن را از رابط کاربری کنترل (Channels -> Nostr -> Profile) مدیریت کنید یا مستقیماً در پیکربندی تنظیم کنید.

مثال:

json5
{  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",      },    },  },}

نکته‌ها:

  • نشانی‌های نمایه باید از https:// استفاده کنند.
  • واردکردن داده‌ها از رله‌ها، فیلدها را ادغام و مقادیر بازنویسی‌شدهٔ محلی را حفظ می‌کند.

کنترل دسترسی

سیاست‌های پیام مستقیم

  • جفت‌سازی (پیش‌فرض): فرستندگان ناشناس یک کد جفت‌سازی دریافت می‌کنند.
  • فهرست مجاز: فقط کلیدهای عمومی موجود در allowFrom می‌توانند پیام مستقیم بفرستند.
  • باز: پیام‌های مستقیم ورودی عمومی (به allowFrom: ["*"] نیاز دارد).
  • غیرفعال: پیام‌های مستقیم ورودی نادیده گرفته می‌شوند.

نکته‌های اعمال سیاست:

  • امضاهای رویدادهای ورودی پیش از اعمال سیاست فرستنده و رمزگشایی NIP-04 تأیید می‌شوند؛ بنابراین رویدادهای جعل‌شده زودهنگام رد می‌شوند.
  • پاسخ‌های جفت‌سازی بدون رمزگشایی یا پردازش متن اصلی پیام مستقیم ارسال می‌شوند.
  • نرخ پیام‌های مستقیم ورودی محدود می‌شود (در سطح کلی و برای هر فرستنده) و بارهای دادهٔ بیش‌ازحد بزرگ پیش از رمزگشایی کنار گذاشته می‌شوند.

نمونهٔ فهرست مجاز

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

قالب‌های کلید

قالب‌های پذیرفته‌شده:

  • کلید خصوصی: nsec... یا مقدار هگز ۶۴ نویسه‌ای
  • کلیدهای عمومی (allowFrom): npub... یا هگز

رله‌ها

پیش‌فرض‌ها: relay.damus.io و nos.lol.

json5
{  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 برنامه‌ریزی‌شده رمزگذاری نسخه‌بندی‌شده

آزمایش

رلهٔ محلی

bash
# راه‌اندازی strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",      relays: ["ws://localhost:7777"],    },  },}

آزمایش دستی

  1. کلید عمومی ربات را از گزارش‌های Gateway یا openclaw channels status یادداشت کنید (هگز؛ در صورت نیاز، آن را در کارخواه خود به npub تبدیل کنید).
  2. یک کارخواه Nostr باز کنید (Amethyst، Damus و غیره).
  3. به کلید عمومی ربات پیام مستقیم بفرستید.
  4. پاسخ را تأیید کنید.

عیب‌یابی

پیام‌ها دریافت نمی‌شوند

  • معتبر بودن کلید خصوصی را تأیید کنید.
  • مطمئن شوید نشانی‌های رله در دسترس‌اند و از wss:// استفاده می‌کنند (یا برای محیط محلی از ws://).
  • تأیید کنید enabled برابر با false نیست.
  • گزارش‌های Gateway را برای خطاهای اتصال به رله بررسی کنید.

پاسخ‌ها ارسال نمی‌شوند

  • بررسی کنید که رله نوشتن را می‌پذیرد.
  • اتصال خروجی را تأیید کنید.
  • مراقب محدودیت‌های نرخ رله باشید.

پاسخ‌های تکراری

  • هنگام استفاده از چند رله انتظار می‌رود.
  • پیام‌ها بر اساس شناسهٔ رویداد تکرارزدایی می‌شوند؛ فقط نخستین تحویل باعث ایجاد پاسخ می‌شود.

امنیت

  • هرگز کلیدهای خصوصی را در مخزن ثبت نکنید.
  • برای کلیدها از متغیرهای محیطی استفاده کنید.
  • برای ربات‌های محیط عملیاتی، استفاده از allowlist را در نظر بگیرید.
  • امضاها پیش از سیاست فرستنده تأیید می‌شوند و سیاست فرستنده پیش از رمزگشایی اعمال می‌شود؛ بنابراین رویدادهای جعل‌شده زودهنگام رد می‌شوند و فرستندگان ناشناس نمی‌توانند پردازش کامل رمزنگاری را تحمیل کنند.

محدودیت‌ها (محصول کمینهٔ پذیرفتنی)

  • فقط پیام‌های مستقیم (بدون گفت‌وگوی گروهی).
  • بدون پیوست رسانه‌ای.
  • فقط NIP-04 (بسته‌بندی هدیه‌ای NIP-17 برنامه‌ریزی شده است).

مرتبط

Was this useful?
On this page

On this page