---
read_when:
    - Вы хотите, чтобы OpenClaw получал личные сообщения через Nostr
    - Вы настраиваете децентрализованный обмен сообщениями
summary: Канал личных сообщений Nostr через зашифрованные сообщения NIP-04
title: Nostr
x-i18n:
    generated_at: "2026-06-28T22:35:54Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    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 (рабочие процессы разработки):

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

Пример:

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

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

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

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