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 после установки или включения плагинов.
Быстрая настройка
- Сгенерируйте пару ключей 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": "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"]
}
}
}
Ручное тестирование
- Запишите публичный ключ бота (npub) из логов.
- Откройте клиент Nostr (Damus, Amethyst и т.д.).
- Отправьте ЛС на публичный ключ бота.
- Проверьте ответ.
Устранение неполадок
Сообщения не приходят
- Убедитесь, что приватный ключ валиден.
- Убедитесь, что URL ретрансляторов доступны и используют
wss://(илиws://для локальных). - Убедитесь, что
enabledне равенfalse. - Проверьте логи Gateway на ошибки подключения к ретрансляторам.
Ответы не отправляются
- Проверьте, принимает ли ретранслятор запись.
- Проверьте исходящее подключение.
- Следите за лимитами частоты ретранслятора.
Дублирование ответов
- Ожидаемо при использовании нескольких ретрансляторов.
- Сообщения дедуплицируются по ID события; ответ вызывает только первая доставка.
Безопасность
- Никогда не коммитьте приватные ключи.
- Используйте переменные окружения для ключей.
- Для продакшен-ботов рассмотрите режим
allowlist.
Ограничения (MVP)
- Только прямые сообщения (без групповых чатов).
- Без медиа-вложений.
- Только NIP-04 (NIP-17 gift-wrap запланирован).