Developer and self-hosted

Nostr

Стан: Опціональний вбудований plugin (вимкнений за замовчуванням, доки його не налаштовано).

Nostr — це децентралізований протокол для соціальних мереж. Цей канал дає OpenClaw змогу отримувати зашифровані прямі повідомлення (DM) через NIP-04 і відповідати на них.

Вбудований plugin

Поточні випуски OpenClaw постачають Nostr як вбудований plugin, тож звичайні пакетовані збірки не потребують окремого встановлення.

Старіші/користувацькі встановлення

  • Onboarding (openclaw onboard) і openclaw channels add все ще показують Nostr зі спільного каталогу каналів.
  • Якщо ваша збірка не містить вбудований Nostr, установіть npm-пакет напряму.
bash
openclaw plugins install @openclaw/nostr

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

Використовуйте локальний checkout (dev workflows):

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

Перезапустіть Gateway після встановлення або ввімкнення plugins.

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

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
# Using 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 Політика доступу DM
allowFrom string[] [] Дозволені pubkeys відправників
enabled boolean true Увімкнути/вимкнути канал
name string - Відображуване ім’я
profile object - Метадані профілю NIP-01

Метадані профілю

Дані профілю публікуються як подія NIP-01 kind:0. Ними можна керувати з Control UI (Channels -> Nostr -> Profile) або задати напряму в конфігурації.

Приклад:

json5
{  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://.
  • Імпорт із ретрансляторів об’єднує поля та зберігає локальні перевизначення.

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

Політики DM

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

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

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

Приклад allowlist

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

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

Підтримувані формати:

  • Приватний ключ: nsec... або 64-символьний hex
  • Pubkeys (allowFrom): npub... або hex

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

За замовчуванням: 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 Підтримується Зашифровані DM (kind:4)
NIP-17 Заплановано DM у gift-wrap
NIP-44 Заплановано Версійне шифрування

Тестування

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

bash
# Start strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry
json5
{  channels: {    nostr: {      privateKey: "${NOSTR_PRIVATE_KEY}",      relays: ["ws://localhost:7777"],    },  },}

Ручний тест

  1. Занотуйте pubkey бота (npub) із журналів.
  2. Відкрийте клієнт Nostr (Damus, Amethyst тощо).
  3. Надішліть DM на pubkey бота.
  4. Перевірте відповідь.

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

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

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

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

  • Перевірте, що ретранслятор приймає записи.
  • Перевірте вихідне з’єднання.
  • Стежте за обмеженнями частоти ретранслятора.

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

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

Безпека

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

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

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

Пов’язане

Was this useful?