> ## 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 (рабочие процессы разработки):

```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`. Ими можно управлять из интерфейса управления (Каналы -> Nostr -> Профиль) или задать напрямую в конфигурации.

Пример:

```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 ограничиваются по частоте, а слишком большие payload отбрасываются до расшифровки.

### Пример 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 (gift-wrap NIP-17 запланирован).

## Связанные материалы

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