---
read_when:
    - تريد أن يتلقى OpenClaw الرسائل الخاصة عبر Nostr
    - أنت بصدد إعداد مراسلة لامركزية
summary: قناة الرسائل المباشرة في Nostr عبر رسائل مشفّرة وفق NIP-04
title: Nostr
x-i18n:
    generated_at: "2026-07-12T05:37:46Z"
    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>
```

أعد تشغيل Gateway بعد تثبيت Plugins أو تمكينها. يعرض الإعداد الأولي (`openclaw onboard`) والأمر `openclaw channels add` قناة Nostr من كتالوج القنوات المشترك بعد تثبيت Plugin.

### الإعداد غير التفاعلي

```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"
```

استخدم `--use-env` للاحتفاظ بـ `NOSTR_PRIVATE_KEY` في البيئة بدلًا من تخزين المفتاح في الإعدادات (للحساب الافتراضي فقط).

## الإعداد السريع

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']` | عناوين URL للمرحّلات (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",
      },
    },
  },
}
```

ملاحظات:

- يجب أن تستخدم عناوين URL للملف الشخصي `https://`.
- يؤدي الاستيراد من المرحّلات إلى دمج الحقول مع الحفاظ على التجاوزات المحلية.

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

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

- **pairing** (الافتراضية): يحصل المرسلون غير المعروفين على رمز إقران.
- **allowlist**: لا يمكن إرسال رسائل مباشرة إلا من المفاتيح العامة الموجودة في `allowFrom`.
- **open**: رسائل مباشرة واردة متاحة للعامة (تتطلب `allowFrom: ["*"]`).
- **disabled**: تجاهل الرسائل المباشرة الواردة.

ملاحظات الإنفاذ:

- يجري التحقق من توقيعات الأحداث الواردة قبل تطبيق سياسة المرسل وفك تشفير NIP-04، لذلك تُرفض الأحداث المزوّرة مبكرًا.
- تُرسل ردود الإقران دون فك تشفير نص الرسالة المباشرة الأصلية أو معالجته.
- تخضع الرسائل المباشرة الواردة لتحديد المعدل (عموميًا ولكل مرسل)، وتُسقط الحمولات ذات الحجم الزائد قبل فك التشفير.

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

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

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

التنسيقات المقبولة:

- **المفتاح الخاص:** `nsec...` أو قيمة سداسية عشرية من 64 محرفًا
- **المفاتيح العامة (`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. تحقّق من الرد.

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

### عدم تلقي الرسائل

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

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

- تحقّق من أن المرحّل يقبل عمليات الكتابة.
- تحقّق من الاتصال الصادر.
- راقب حدود المعدل التي تفرضها المرحّلات.

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

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

## الأمان

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

## القيود (الحد الأدنى من المنتج القابل للاستخدام)

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

## ذو صلة

- [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة
- [الإقران](/ar/channels/pairing) — مصادقة الرسائل المباشرة ومسار الإقران
- [المجموعات](/ar/channels/groups) — سلوك المحادثات الجماعية والتحكم بالوصول عبر الإشارات
- [توجيه القنوات](/ar/channels/channel-routing) — توجيه جلسات الرسائل
- [الأمان](/ar/gateway/security) — نموذج الوصول وتعزيز الحماية
