---
read_when:
    - Ви хочете, щоб OpenClaw отримував особисті повідомлення через Nostr
    - Ви налаштовуєте децентралізований обмін повідомленнями
summary: Канал прямих повідомлень Nostr через зашифровані повідомлення NIP-04
title: Nostr
x-i18n:
    generated_at: "2026-05-02T21:58:36Z"
    model: gpt-5.5
    provider: openai
    source_hash: d6158c22c0ffc5aea56d0ac2b68955f30c3a785013dba5410cbd70f9b689dc3c
    source_path: channels/nostr.md
    workflow: 16
---

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

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

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

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

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

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

```bash
openclaw plugins install @openclaw/nostr
```

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

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

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

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

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

```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
# Using nak
nak key generate
```

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

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

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

```bash
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
{
  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
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
      dmPolicy: "allowlist",
      allowFrom: ["npub1abc...", "npub1xyz..."],
    },
  },
}
```

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

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

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

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

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

```json5
{
  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
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
```

```json5
{
  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) — модель доступу та посилення захисту
