Nostr

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

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

Установка (по запросу)

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

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

Значения по умолчанию для установки:

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

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

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

openclaw plugins install @openclaw/nostr

Из локальной копии (dev-workflow):

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": "Personal assistant DM bot",
        "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ПланируетсяGift-wrapped ЛС
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 gift-wrap запланирован).