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 после установки или включения плагинов.
Быстрая настройка
- Сгенерируйте пару ключей Nostr (если нужно):
# Использование nak
nak key generate
- Добавьте в конфигурацию:
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}"
}
}
}
- Экспортируйте ключ:
export NOSTR_PRIVATE_KEY="nsec1..."
- Перезапустите Gateway.
Справочник по конфигурации
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
| privateKey | string | обязательно | Приватный ключ в формате nsec или hex |
| relays | string[] | ['wss://relay.damus.io', 'wss://nos.lol'] | URL ретрансляторов (WebSocket) |
| dmPolicy | string | pairing | Политика доступа к личным сообщениям |
| allowFrom | string[] | [] | Разрешенные публичные ключи отправителей |
| enabled | boolean | true | Включить/отключить канал |
| name | string | - | Отображаемое имя |
| profile | object | - | Метаданные профиля 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"]
}
}
}
Ручное тестирование
- Отметьте публичный ключ бота (npub) из журналов.
- Откройте клиент Nostr (Damus, Amethyst и т.д.).
- Отправьте личное сообщение публичному ключу бота.
- Проверьте ответ.
Устранение неполадок
Не получает сообщения
- Проверьте, что приватный ключ действителен.
- Убедитесь, что URL ретрансляторов доступны и используют wss:// (или ws:// для локальных).
- Подтвердите, что enabled не false.
- Проверьте журналы Gateway на предмет ошибок подключения к ретранслятору.
Не отправляет ответы
- Проверьте, что ретранслятор принимает записи.
- Проверьте исходящее подключение.
- Следите за ограничениями скорости ретранслятора.
Дублированные ответы
- Ожидается при использовании нескольких ретрансляторов.
- Сообщения дедуплицируются по ID события; только первая доставка вызывает ответ.
Безопасность
- Никогда не коммитьте приватные ключи.
- Используйте переменные окружения для ключей.
- Рассмотрите allowlist для производственных ботов.
Ограничения (MVP)
- Только личные сообщения (без групповых чатов).
- Нет вложений медиа.
- Только NIP-04 (упаковка в подарок NIP-17 запланирована).