Developer and self-hosted

Nostr

Nostr — це завантажуваний Plugin каналу (@openclaw/nostr), який дає OpenClaw змогу отримувати зашифровані особисті повідомлення NIP-04 через ретранслятори Nostr і відповідати на них. Один обліковий запис на кожен Gateway; лише особисті повідомлення.

Встановлення

bash
openclaw plugins install @openclaw/nostr

Використовуйте специфікацію пакета без версії, щоб отримувати поточний офіційний тег випуску. Фіксуйте точну версію лише тоді, коли потрібне відтворюване встановлення.

З локальної робочої копії (процеси розробки):

bash
openclaw plugins install --link <path-to-local-nostr-plugin>

Перезапустіть Gateway після встановлення або ввімкнення плагінів. Після встановлення Plugin початкове налаштування (openclaw onboard) і команда openclaw channels add відображають Nostr зі спільного каталогу каналів.

Неінтерактивне налаштування

bash
openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY"openclaw channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY" --relay-urls "wss://relay.damus.io,wss://relay.primal.net"

Використовуйте --use-env, щоб зберігати NOSTR_PRIVATE_KEY у середовищі, а не записувати ключ у конфігурацію (лише для облікового запису за замовчуванням).

Швидке налаштування

  1. Створіть пару ключів Nostr (за потреби):
bash
# За допомогою naknak key generate
  1. Додайте до конфігурації:
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",    },  },}
  1. Експортуйте ключ:
bash
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Перезапустіть 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. Ними можна керувати в інтерфейсі керування (Channels -> Nostr -> Profile) або задавати їх безпосередньо в конфігурації.

Приклад:

json5
{  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: ігнорувати вхідні особисті повідомлення.

Примітки щодо застосування правил:

  • Підписи вхідних подій перевіряються до застосування політики відправника й розшифрування NIP-04, тому підроблені події відхиляються на ранньому етапі.
  • Відповіді для сполучення надсилаються без розшифрування чи обробки початкового вмісту особистого повідомлення.
  • Частота вхідних особистих повідомлень обмежується глобально й окремо для кожного відправника, а завеликі корисні навантаження відкидаються до розшифрування.

Приклад списку дозволених

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

Формати ключів

Прийнятні формати:

  • Закритий ключ: nsec... або 64-символьне шістнадцяткове значення
  • Відкриті ключі (allowFrom): npub... або шістнадцяткове значення

Ретранслятори

За замовчуванням: relay.damus.io і nos.lol.

json5
{  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 Заплановано Версійне шифрування

Тестування

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

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

Ручна перевірка

  1. Знайдіть відкритий ключ бота в журналах Gateway або за допомогою openclaw channels status (у шістнадцятковому форматі; за потреби перетворіть його на npub у своєму клієнті).
  2. Відкрийте клієнт Nostr (Amethyst, Damus тощо).
  3. Надішліть особисте повідомлення на відкритий ключ бота.
  4. Перевірте відповідь.

Усунення несправностей

Повідомлення не надходять

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

Відповіді не надсилаються

  • Перевірте, чи приймає ретранслятор операції запису.
  • Перевірте вихідне підключення.
  • Зважайте на обмеження частоти запитів ретранслятора.

Дубльовані відповіді

  • Це очікувана поведінка під час використання кількох ретрансляторів.
  • Повідомлення дедуплікуються за ідентифікатором події; відповідь спричиняє лише перше доставлення.

Безпека

  • Ніколи не фіксуйте закриті ключі в репозиторії.
  • Використовуйте змінні середовища для ключів.
  • Для робочих ботів варто використовувати allowlist.
  • Підписи перевіряються до застосування політики відправника, а політика відправника застосовується до розшифрування, тому підроблені події відхиляються на ранньому етапі, а невідомі відправники не можуть примусово запустити повний обсяг криптографічних обчислень.

Обмеження (MVP)

  • Лише особисті повідомлення (без групових чатів).
  • Без медіавкладень.
  • Лише NIP-04 (подарункову обгортку NIP-17 заплановано).

Пов’язані матеріали

Was this useful?
On this page

On this page