Перейти к основному содержанию
Статус: Опциональный встроенный Plugin (по умолчанию отключен до настройки). Nostr — децентрализованный протокол для социальных сетей. Этот канал позволяет OpenClaw получать зашифрованные личные сообщения (DM) и отвечать на них через NIP-04.

Встроенный Plugin

Текущие выпуски OpenClaw поставляют Nostr как встроенный Plugin, поэтому обычным пакетированным сборкам не требуется отдельная установка.

Более старые/пользовательские установки

  • Onboarding (openclaw onboard) и openclaw channels add по-прежнему показывают Nostr из общего каталога каналов.
  • Если ваша сборка исключает встроенный Nostr, установите npm-пакет напрямую.
openclaw plugins install @openclaw/nostr
Используйте пакет без указания версии, чтобы следовать текущему официальному тегу выпуска. Закрепляйте точную версию только тогда, когда нужна воспроизводимая установка. Используйте локальный checkout (рабочие процессы разработки):
openclaw plugins install --link <path-to-local-nostr-plugin>
Перезапустите Gateway после установки или включения Plugins.

Неинтерактивная настройка

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 (если нужно):
# Using nak
nak key generate
  1. Добавьте в конфигурацию:
{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
    },
  },
}
  1. Экспортируйте ключ:
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Перезапустите Gateway.

Справочник конфигурации

КлючТипПо умолчаниюОписание
privateKeystringобязательноПриватный ключ в формате nsec или hex
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']URL реле (WebSocket)
dmPolicystringpairingПолитика доступа к DM
allowFromstring[][]Разрешенные pubkeys отправителей
enabledbooleantrueВключить/отключить канал
namestring-Отображаемое имя
profileobject-Метаданные профиля NIP-01

Метаданные профиля

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

{
  channels: {
    nostr: {
      privateKey: "${NOSTR_PRIVATE_KEY}",
      dmPolicy: "allowlist",
      allowFrom: ["npub1abc...", "npub1xyz..."],
    },
  },
}

Форматы ключей

Поддерживаемые форматы:
  • Приватный ключ: nsec... или 64-символьный hex
  • Pubkeys (allowFrom): npub... или hex

Реле

По умолчанию: relay.damus.io и nos.lol.
{
  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ЗапланированоВерсионированное шифрование

Тестирование

Локальное реле

# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
  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 запланирован).

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