Nostr
状態: オプションプラグイン (デフォルトで無効)。
Nostrはソーシャルネットワーキングのための分散型プロトコルです。このチャネルにより、OpenClawはNIP-04経由で暗号化ダイレクトメッセージ (DM) を受信して応答できます。
インストール (オンデマンド)
オンボーディング (推奨)
- オンボーディングウィザード (openclaw onboard) と openclaw channels add はオプションのチャネルプラグインをリストします。
- Nostrを選択すると、オンデマンドでプラグインのインストールを促します。
インストールのデフォルト:
- Devチャネル + gitチェックアウト利用可能: ローカルプラグインパスを使用。
- Stable/Beta: npmからダウンロード。
プロンプトで選択を常に上書きできます。
手動インストール
openclaw plugins install @openclaw/nostr
ローカルチェックアウトを使用 (開発ワークフロー):
openclaw plugins install --link <path-to-openclaw>/extensions/nostr
プラグインのインストールまたは有効化後、ゲートウェイを再起動してください。
クイックセットアップ
- Nostrキーペアを生成 (必要な場合):
# nakを使用
nak key generate
- 設定に追加:
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}"
}
}
}
- キーをエクスポート:
export NOSTR_PRIVATE_KEY="nsec1..."
- ゲートウェイを再起動。
設定リファレンス
| キー | タイプ | デフォルト | 説明 |
|---|---|---|---|
| privateKey | string | 必須 | nsec または16進形式の秘密鍵 |
| relays | string[] | ['wss://relay.damus.io', 'wss://nos.lol'] | リレーURL (WebSocket) |
| dmPolicy | string | pairing | DMアクセスポリシー |
| 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:// を使用する必要があります。
- リレーからのインポートはフィールドをマージし、ローカルオーバーライドを保持します。
アクセス制御
DMポリシー
- pairing (デフォルト): 未知の送信者はペアリングコードを取得します。
- allowlist: allowFrom の公開鍵のみがDM可能。
- open: 公開インバウンドDM (allowFrom: ["*"] が必要)。
- disabled: インバウンドDMを無視。
許可リストの例
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}",
"dmPolicy": "allowlist",
"allowFrom": ["npub1abc...", "npub1xyz..."]
}
}
}
キー形式
受け入れ可能な形式:
- 秘密鍵: nsec... または64文字の16進数
- 公開鍵 (allowFrom): npub... または16進数
リレー
デフォルト: 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 |
| 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など) を開く。
- ボットの公開鍵にDM。
- 応答を確認。
トラブルシューティング
メッセージを受信しない
- 秘密鍵が有効であることを確認。
- リレーURLが到達可能で wss:// を使用していることを確認 (ローカルの場合は ws://)。
- enabled が false でないことを確認。
- ゲートウェイログでリレー接続エラーを確認。
応答を送信しない
- リレーが書き込みを受け入れることを確認。
- アウトバウンド接続を確認。
- リレーのレート制限に注意。
重複応答
- 複数のリレーを使用している場合は予想される動作。
- メッセージはイベントIDで重複排除され、最初の配信のみが応答をトリガー。
セキュリティ
- 秘密鍵をコミットしないでください。
- キーには環境変数を使用。
- 本番ボットには allowlist を検討。
制限事項 (MVP)
- ダイレクトメッセージのみ (グループチャットなし)。
- メディア添付ファイルなし。
- NIP-04のみ (NIP-17ギフトラップは予定)。