---
read_when:
    - می‌خواهید OpenClaw پیام‌های خصوصی را از طریق Nostr دریافت کند
    - در حال راه‌اندازی پیام‌رسانی غیرمتمرکز هستید
summary: کانال پیام خصوصی Nostr از طریق پیام‌های رمزگذاری‌شدهٔ NIP-04
title: Nostr
x-i18n:
    generated_at: "2026-07-12T09:41:45Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 31fa283f706036a37795ddad71602058ba94388a9cb01044927c4bb2d83ba4a8
    source_path: channels/nostr.md
    workflow: 16
---

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
# با استفاده از nak
nak key generate
```

2. آن را به پیکربندی اضافه کنید:

```json5
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
```

3. کلید را صادر کنید:

```bash
export NOSTR_PRIVATE_KEY="nsec1..."
```

4. 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
# راه‌اندازی strfry
docker 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 برنامه‌ریزی شده است).

## مرتبط

- [نمای کلی کانال‌ها](/fa/channels) — همهٔ کانال‌های پشتیبانی‌شده
- [جفت‌سازی](/fa/channels/pairing) — احراز هویت پیام مستقیم و روند جفت‌سازی
- [گروه‌ها](/fa/channels/groups) — رفتار گفت‌وگوی گروهی و محدودسازی بر اساس اشاره
- [مسیریابی کانال](/fa/channels/channel-routing) — مسیریابی نشست برای پیام‌ها
- [امنیت](/fa/gateway/security) — مدل دسترسی و مقاوم‌سازی
