Nostr

Статус: Опциональный плагин (по умолчанию отключен).

Nostr — это децентрализованный протокол для социальных сетей. Этот канал позволяет OpenClaw получать и отвечать на зашифрованные личные сообщения (личные сообщения) через NIP-04.

Установка (по требованию)

Онбординг (рекомендуется)

  • Мастер онбординга (openclaw onboard) и openclaw channels add перечисляют опциональные плагины каналов.
  • Выбор Nostr предлагает установить плагин по требованию.

Установка по умолчанию:

  • Dev канал + доступен git-репозиторий: использует локальный путь плагина.
  • Stable/Beta: загружает из npm.

Вы всегда можете переопределить выбор в подсказке.

Ручная установка

openclaw plugins install @openclaw/nostr

Используйте локальную копию (рабочие процессы разработки):

openclaw plugins install --link <path-to-openclaw>/extensions/nostr

Перезапустите Gateway после установки или включения плагинов.

Быстрая настройка

  1. Сгенерируйте пару ключей Nostr (если нужно):
# Использование 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Политика доступа к личным сообщениям
allowFromstring[][]Разрешенные публичные ключи отправителей
enabledbooleantrueВключить/отключить канал
namestring-Отображаемое имя
profileobject-Метаданные профиля NIP-01

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

Данные профиля публикуются как событие NIP-01 kind:0. Вы можете управлять ими из Control UI (Channels -> Nostr -> Profile) или установить напрямую в конфигурации.

Пример:

{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "profile": {
        "name": "openclaw",
        "displayName": "OpenClaw",
        "about": "Бот-помощник для личных сообщений",
        "picture": "https://example.com/avatar.png",
        "banner": "https://example.com/banner.png",
        "website": "https://example.com",
        "nip05": "[email protected]",
        "lud16": "[email protected]"
      }
    }
  }
}

Примечания:

  • URL профиля должны использовать https://.
  • Импорт из ретрансляторов объединяет поля и сохраняет локальные переопределения.

Контроль доступа

Политики личных сообщений

  • pairing (по умолчанию): неизвестные отправители получают код сопряжения.
  • allowlist: только публичные ключи в allowFrom могут отправлять личные сообщения.
  • open: публичные входящие личные сообщения (требует allowFrom: ["*"]).
  • disabled: игнорировать входящие личные сообщения.

Пример списка разрешений

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

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

Принимаемые форматы:

  • Приватный ключ: nsec... или 64-символьный hex
  • Публичные ключи (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ПоддерживаетсяЗашифрованные личные сообщения (kind:4)
NIP-17ЗапланированоУпакованные в подарок личные сообщения
NIP-44ЗапланированоВерсионное шифрование

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

Локальный ретранслятор

# Запустить strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": ["ws://localhost:7777"]
    }
  }
}

Ручное тестирование

  1. Отметьте публичный ключ бота (npub) из журналов.
  2. Откройте клиент Nostr (Damus, Amethyst и т.д.).
  3. Отправьте личное сообщение публичному ключу бота.
  4. Проверьте ответ.

Устранение неполадок

Не получает сообщения

  • Проверьте, что приватный ключ действителен.
  • Убедитесь, что URL ретрансляторов доступны и используют wss:// (или ws:// для локальных).
  • Подтвердите, что enabled не false.
  • Проверьте журналы Gateway на предмет ошибок подключения к ретранслятору.

Не отправляет ответы

  • Проверьте, что ретранслятор принимает записи.
  • Проверьте исходящее подключение.
  • Следите за ограничениями скорости ретранслятора.

Дублированные ответы

  • Ожидается при использовании нескольких ретрансляторов.
  • Сообщения дедуплицируются по ID события; только первая доставка вызывает ответ.

Безопасность

  • Никогда не коммитьте приватные ключи.
  • Используйте переменные окружения для ключей.
  • Рассмотрите allowlist для производственных ботов.

Ограничения (MVP)

  • Только личные сообщения (без групповых чатов).
  • Нет вложений медиа.
  • Только NIP-04 (упаковка в подарок NIP-17 запланирована).