Developer and self-hosted
Nostr
Стан: Опціональний вбудований plugin (вимкнений за замовчуванням, доки його не налаштовано).
Nostr — це децентралізований протокол для соціальних мереж. Цей канал дає OpenClaw змогу отримувати зашифровані прямі повідомлення (DM) через NIP-04 і відповідати на них.
Вбудований plugin
Поточні випуски OpenClaw постачають Nostr як вбудований plugin, тож звичайні пакетовані збірки не потребують окремого встановлення.
Старіші/користувацькі встановлення
- Onboarding (
openclaw onboard) іopenclaw channels addвсе ще показують Nostr зі спільного каталогу каналів. - Якщо ваша збірка не містить вбудований Nostr, установіть npm-пакет напряму.
openclaw plugins install @openclaw/nostr
Використовуйте базовий пакет, щоб стежити за поточним офіційним тегом випуску. Закріплюйте точну версію лише тоді, коли вам потрібне відтворюване встановлення.
Використовуйте локальний checkout (dev workflows):
openclaw plugins install --link <path-to-local-nostr-plugin>
Перезапустіть Gateway після встановлення або ввімкнення plugins.
Неінтерактивне налаштування
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 у середовищі замість запису ключа в конфігурацію.
Швидке налаштування
- Згенеруйте пару ключів Nostr (за потреби):
# Using 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 |
Політика доступу DM |
allowFrom |
string[] | [] |
Дозволені pubkeys відправників |
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://. - Імпорт із ретрансляторів об’єднує поля та зберігає локальні перевизначення.
Контроль доступу
Політики DM
- pairing (за замовчуванням): невідомі відправники отримують код pairing.
- allowlist: DM можуть надсилати лише pubkeys у
allowFrom. - open: публічні вхідні DM (потрібно
allowFrom: ["*"]). - disabled: ігнорувати вхідні DM.
Примітки щодо примусового застосування:
- Підписи вхідних подій перевіряються перед політикою відправника та розшифруванням NIP-04, тому підроблені події відхиляються рано.
- Відповіді pairing надсилаються без обробки початкового тіла DM.
- Вхідні DM мають обмеження частоти, а завеликі payloads відкидаються перед розшифруванням.
Приклад allowlist
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}
Формати ключів
Підтримувані формати:
- Приватний ключ:
nsec...або 64-символьний hex - Pubkeys (
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 | Підтримується | Зашифровані DM (kind:4) |
| NIP-17 | Заплановано | DM у gift-wrap |
| NIP-44 | Заплановано | Версійне шифрування |
Тестування
Локальний ретранслятор
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
Ручний тест
- Занотуйте pubkey бота (npub) із журналів.
- Відкрийте клієнт Nostr (Damus, Amethyst тощо).
- Надішліть DM на pubkey бота.
- Перевірте відповідь.
Усунення несправностей
Повідомлення не надходять
- Перевірте, що приватний ключ чинний.
- Переконайтеся, що URL ретрансляторів доступні та використовують
wss://(абоws://для локального). - Підтвердьте, що
enabledне дорівнюєfalse. - Перевірте журнали Gateway на помилки з’єднання з ретрансляторами.
Відповіді не надсилаються
- Перевірте, що ретранслятор приймає записи.
- Перевірте вихідне з’єднання.
- Стежте за обмеженнями частоти ретранслятора.
Дубльовані відповіді
- Очікувано під час використання кількох ретрансляторів.
- Повідомлення дедуплікуються за ID події; лише перша доставка запускає відповідь.
Безпека
- Ніколи не комітьте приватні ключі.
- Використовуйте змінні середовища для ключів.
- Розгляньте
allowlistдля production-ботів. - Підписи перевіряються перед політикою відправника, а політика відправника застосовується перед розшифруванням, тому підроблені події відхиляються рано, а невідомі відправники не можуть примусити виконувати повну криптографічну роботу.
Обмеження (MVP)
- Лише прямі повідомлення (без групових чатів).
- Без медіавкладень.
- Лише NIP-04 (NIP-17 gift-wrap заплановано).
Пов’язане
- Огляд каналів — усі підтримувані канали
- Pairing — автентифікація DM і потік pairing
- Групи — поведінка групового чату та gating згадок
- Маршрутизація каналів — маршрутизація сеансів для повідомлень
- Безпека — модель доступу та посилення захисту