> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Nostr

**Стан:** Опціональний вбудований plugin (вимкнений за замовчуванням, доки його не налаштовано).

Nostr — це децентралізований протокол для соціальних мереж. Цей канал дає OpenClaw змогу отримувати зашифровані прямі повідомлення (DM) через NIP-04 і відповідати на них.

## Вбудований plugin

Поточні випуски OpenClaw постачають Nostr як вбудований plugin, тож звичайні пакетовані
збірки не потребують окремого встановлення.

### Старіші/користувацькі встановлення

* Onboarding (`openclaw onboard`) і `openclaw channels add` все ще показують
  Nostr зі спільного каталогу каналів.
* Якщо ваша збірка не містить вбудований Nostr, установіть npm-пакет напряму.

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw plugins install @openclaw/nostr
```

Використовуйте базовий пакет, щоб стежити за поточним офіційним тегом випуску. Закріплюйте точну
версію лише тоді, коли вам потрібне відтворюване встановлення.

Використовуйте локальний checkout (dev workflows):

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw plugins install --link <path-to-local-nostr-plugin>
```

Перезапустіть Gateway після встановлення або ввімкнення plugins.

### Неінтерактивне налаштування

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
# Using nak
nak key generate
```

2. Додайте до конфігурації:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
```

3. Експортуйте ключ:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
export NOSTR_PRIVATE_KEY="nsec1..."
```

4. Перезапустіть Gateway.

## Довідник конфігурації

| Ключ         | Тип       | За замовчуванням                            | Опис                                    |
| ------------ | --------- | ------------------------------------------- | --------------------------------------- |
| `privateKey` | string    | обов’язково                                 | Приватний ключ у форматі `nsec` або hex |
| `relays`     | string\[] | `['wss://relay.damus.io', 'wss://nos.lol']` | URL ретрансляторів (WebSocket)          |
| `dmPolicy`   | string    | `pairing`                                   | Політика доступу DM                     |
| `allowFrom`  | string\[] | `[]`                                        | Дозволені pubkeys відправників          |
| `enabled`    | boolean   | `true`                                      | Увімкнути/вимкнути канал                |
| `name`       | string    | -                                           | Відображуване ім’я                      |
| `profile`    | object    | -                                           | Метадані профілю NIP-01                 |

## Метадані профілю

Дані профілю публікуються як подія NIP-01 `kind:0`. Ними можна керувати з Control UI (Channels -> Nostr -> Profile) або задати напряму в конфігурації.

Приклад:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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://`.
* Імпорт із ретрансляторів об’єднує поля та зберігає локальні перевизначення.

## Контроль доступу

### Політики DM

* **pairing** (за замовчуванням): невідомі відправники отримують код pairing.
* **allowlist**: DM можуть надсилати лише pubkeys у `allowFrom`.
* **open**: публічні вхідні DM (потрібно `allowFrom: ["*"]`).
* **disabled**: ігнорувати вхідні DM.

Примітки щодо примусового застосування:

* Підписи вхідних подій перевіряються перед політикою відправника та розшифруванням NIP-04, тому підроблені події відхиляються рано.
* Відповіді pairing надсилаються без обробки початкового тіла DM.
* Вхідні DM мають обмеження частоти, а завеликі payloads відкидаються перед розшифруванням.

### Приклад allowlist

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
      dmPolicy: "allowlist",
      allowFrom: ["npub1abc...", "npub1xyz..."],
    },
  },
}
```

## Формати ключів

Підтримувані формати:

* **Приватний ключ:** `nsec...` або 64-символьний hex
* **Pubkeys (`allowFrom`):** `npub...` або hex

## Ретранслятори

За замовчуванням: `relay.damus.io` і `nos.lol`.

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
      relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
    },
  },
}
```

Поради:

* Використовуйте 2–3 ретранслятори для резервування.
* Уникайте надмірної кількості ретрансляторів (затримка, дублювання).
* Платні ретранслятори можуть підвищити надійність.
* Локальні ретранслятори підходять для тестування (`ws://localhost:7777`).

## Підтримка протоколів

| NIP    | Стан          | Опис                                    |
| ------ | ------------- | --------------------------------------- |
| NIP-01 | Підтримується | Базовий формат подій + метадані профілю |
| NIP-04 | Підтримується | Зашифровані DM (`kind:4`)               |
| NIP-17 | Заплановано   | DM у gift-wrap                          |
| NIP-44 | Заплановано   | Версійне шифрування                     |

## Тестування

### Локальний ретранслятор

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
```

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
      relays: ["ws://localhost:7777"],
    },
  },
}
```

### Ручний тест

1. Занотуйте pubkey бота (npub) із журналів.
2. Відкрийте клієнт Nostr (Damus, Amethyst тощо).
3. Надішліть DM на pubkey бота.
4. Перевірте відповідь.

## Усунення несправностей

### Повідомлення не надходять

* Перевірте, що приватний ключ чинний.
* Переконайтеся, що URL ретрансляторів доступні та використовують `wss://` (або `ws://` для локального).
* Підтвердьте, що `enabled` не дорівнює `false`.
* Перевірте журнали Gateway на помилки з’єднання з ретрансляторами.

### Відповіді не надсилаються

* Перевірте, що ретранслятор приймає записи.
* Перевірте вихідне з’єднання.
* Стежте за обмеженнями частоти ретранслятора.

### Дубльовані відповіді

* Очікувано під час використання кількох ретрансляторів.
* Повідомлення дедуплікуються за ID події; лише перша доставка запускає відповідь.

## Безпека

* Ніколи не комітьте приватні ключі.
* Використовуйте змінні середовища для ключів.
* Розгляньте `allowlist` для production-ботів.
* Підписи перевіряються перед політикою відправника, а політика відправника застосовується перед розшифруванням, тому підроблені події відхиляються рано, а невідомі відправники не можуть примусити виконувати повну криптографічну роботу.

## Обмеження (MVP)

* Лише прямі повідомлення (без групових чатів).
* Без медіавкладень.
* Лише NIP-04 (NIP-17 gift-wrap заплановано).

## Пов’язане

* [Огляд каналів](/uk/channels) — усі підтримувані канали
* [Pairing](/uk/channels/pairing) — автентифікація DM і потік pairing
* [Групи](/uk/channels/groups) — поведінка групового чату та gating згадок
* [Маршрутизація каналів](/uk/channels/channel-routing) — маршрутизація сеансів для повідомлень
* [Безпека](/uk/gateway/security) — модель доступу та посилення захисту
