Developer and self-hosted

Nostr

Статус: Опциональный встроенный 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 naknak key generate
  1. Добавьте в конфигурацию:
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",    },  },}
  1. Экспортируйте ключ:
bash
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Перезапустите 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 strfrydocker 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 запланирован).

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

Was this useful?
On this page

On this page