Платформы для обмена сообщениями

Nostr

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

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

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

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

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

  • Dev-канал + доступен git checkout: использует локальный путь к плагину.
  • 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.

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

КлючТипПо умолчаниюОписание
privateKeyстрокаобязательныйПриватный ключ в формате nsec или hex
relaysмассив строк['wss://relay.damus.io', 'wss://nos.lol']URL ретрансляторов (WebSocket)
dmPolicyстрокаpairingПолитика доступа к личным сообщениям
allowFromмассив строк[]Разрешенные публичные ключи отправителей
enabledлогическийtrueВключить/отключить канал
nameстрока-Отображаемое имя
profileобъект-Метаданные профиля NIP-01

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

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

{
  "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": "openclaw@example.com",
        "lud16": "openclaw@example.com"
      }
    }
  }
}

Примечания:

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

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

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

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

Пример белого списка

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

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

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

  • Приватный ключ: nsec... или hex длиной 64 символа
  • Публичные ключи (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 на наличие ошибок подключения к ретрансляторам.

Ответы не отправляются

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

Дублирующиеся ответы

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

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

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

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

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

Nextcloud TalkSignal