Developer and self-hosted
Nostr
Nostr — це завантажуваний Plugin каналу (@openclaw/nostr), який дає OpenClaw змогу отримувати зашифровані особисті повідомлення NIP-04 через ретранслятори Nostr і відповідати на них. Один обліковий запис на кожен Gateway; лише особисті повідомлення.
Встановлення
openclaw plugins install @openclaw/nostrВикористовуйте специфікацію пакета без версії, щоб отримувати поточний офіційний тег випуску. Фіксуйте точну версію лише тоді, коли потрібне відтворюване встановлення.
З локальної робочої копії (процеси розробки):
openclaw plugins install --link <path-to-local-nostr-plugin>Перезапустіть Gateway після встановлення або ввімкнення плагінів. Після встановлення Plugin початкове налаштування (openclaw onboard) і команда openclaw channels add відображають Nostr зі спільного каталогу каналів.
Неінтерактивне налаштування
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 (за потреби):
# За допомогою naknak 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. Ними можна керувати в інтерфейсі керування (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: "openclaw@example.com", lud16: "openclaw@example.com", }, }, },}Примітки:
- URL-адреси профілю мають використовувати
https://. - Під час імпорту з ретрансляторів поля об’єднуються, а локальні перевизначення зберігаються.
Керування доступом
Політики особистих повідомлень
- pairing (за замовчуванням): невідомі відправники отримують код сполучення.
- allowlist: надсилати особисті повідомлення можуть лише відкриті ключі з
allowFrom. - open: загальнодоступні вхідні особисті повідомлення (потрібне
allowFrom: ["*"]). - disabled: ігнорувати вхідні особисті повідомлення.
Примітки щодо застосування правил:
- Підписи вхідних подій перевіряються до застосування політики відправника й розшифрування NIP-04, тому підроблені події відхиляються на ранньому етапі.
- Відповіді для сполучення надсилаються без розшифрування чи обробки початкового вмісту особистого повідомлення.
- Частота вхідних особистих повідомлень обмежується глобально й окремо для кожного відправника, а завеликі корисні навантаження відкидаються до розшифрування.
Приклад списку дозволених
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", dmPolicy: "allowlist", allowFrom: ["npub1abc...", "npub1xyz..."], }, },}Формати ключів
Прийнятні формати:
- Закритий ключ:
nsec...або 64-символьне шістнадцяткове значення - Відкриті ключі (
allowFrom):npub...або шістнадцяткове значення
Ретранслятори
За замовчуванням: 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 | Заплановано | Версійне шифрування |
Тестування
Локальний ретранслятор
# Запустіть strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}Ручна перевірка
- Знайдіть відкритий ключ бота в журналах Gateway або за допомогою
openclaw channels status(у шістнадцятковому форматі; за потреби перетворіть його на npub у своєму клієнті). - Відкрийте клієнт Nostr (Amethyst, Damus тощо).
- Надішліть особисте повідомлення на відкритий ключ бота.
- Перевірте відповідь.
Усунення несправностей
Повідомлення не надходять
- Переконайтеся, що закритий ключ дійсний.
- Переконайтеся, що URL-адреси ретрансляторів доступні та використовують
wss://(абоws://для локальних ретрансляторів). - Переконайтеся, що
enabledне має значенняfalse. - Перевірте журнали Gateway на наявність помилок підключення до ретрансляторів.
Відповіді не надсилаються
- Перевірте, чи приймає ретранслятор операції запису.
- Перевірте вихідне підключення.
- Зважайте на обмеження частоти запитів ретранслятора.
Дубльовані відповіді
- Це очікувана поведінка під час використання кількох ретрансляторів.
- Повідомлення дедуплікуються за ідентифікатором події; відповідь спричиняє лише перше доставлення.
Безпека
- Ніколи не фіксуйте закриті ключі в репозиторії.
- Використовуйте змінні середовища для ключів.
- Для робочих ботів варто використовувати
allowlist. - Підписи перевіряються до застосування політики відправника, а політика відправника застосовується до розшифрування, тому підроблені події відхиляються на ранньому етапі, а невідомі відправники не можуть примусово запустити повний обсяг криптографічних обчислень.
Обмеження (MVP)
- Лише особисті повідомлення (без групових чатів).
- Без медіавкладень.
- Лише NIP-04 (подарункову обгортку NIP-17 заплановано).
Пов’язані матеріали
- Огляд каналів — усі підтримувані канали
- Сполучення — автентифікація особистих повідомлень і процес сполучення
- Групи — поведінка групових чатів і обмеження за згадуваннями
- Маршрутизація каналів — маршрутизація сеансів для повідомлень
- Безпека — модель доступу та посилення захисту