OpenClawでNostr連携:DM送受信を3ステップで設定
新しい通信プロトコルを自分のプロジェクトに組み込もうとすると、設定の複雑さや仕様の理解に時間がかかってしまうことがありますよね。特に分散型プロトコルの場合、どこから手をつければいいのか迷ってしまうこともあるはずです。
OpenClaw の Nostr プラグインを使えば、そんな悩みも解消されます。分散型ソーシャルネットワークである Nostr を活用して、暗号化されたダイレクトメッセージ(DM)を介したやり取りを、驚くほどスムーズに Gateway へ統合できます。
ステータス: オプションプラグイン(デフォルトでは無効)
Nostr は、分散型のソーシャルネットワーク用プロトコルです。このチャネルを有効にすると、OpenClaw は NIP-04 を通じて暗号化されたダイレクトメッセージ(DM)を受信し、応答できるようになります。
インストール(オンデマンド)
Section titled “インストール(オンデマンド)”オンボーディング(推奨)
Section titled “オンボーディング(推奨)”- オンボーディング(
openclaw onboard)およびopenclaw channels addを実行すると、オプションのチャネルプラグインが表示されます。 - Nostr を選択すると、必要に応じてプラグインをインストールするよう促されます。
インストールのデフォルト設定:
- Dev チャネル + git チェックアウトが利用可能: ローカルのプラグインパスを使用します。
- Stable/Beta: npm からダウンロードします。
プロンプトが表示された際、いつでも選択を上書きできます。
手動インストール
Section titled “手動インストール”openclaw plugins install @openclaw/nostrローカルのチェックアウトを使用する場合(開発ワークフロー用):
openclaw plugins install --link <path-to-local-nostr-plugin>プラグインをインストールまたは有効化した後は、Gateway を再起動してください。
非対話形式のセットアップ
Section titled “非対話形式のセットアップ”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 を設定ファイルに保存せず、環境変数として保持できます。
クイックセットアップ
Section titled “クイックセットアップ”- Nostr のキーペアを生成します(必要な場合):
# Using naknak key generate- 設定に追加します:
{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", }, },}- キーをエクスポートします:
export NOSTR_PRIVATE_KEY="nsec1..."- Gateway を再起動します。
設定リファレンス
Section titled “設定リファレンス”| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
privateKey | string | 必須 | nsec または hex 形式の秘密鍵 |
relays | string[] | ['wss://relay.damus.io', 'wss://nos.lol'] | リレーの URL (WebSocket) |
dmPolicy | string | pairing | DM のアクセス制御ポリシー |
allowFrom | string[] | [] | 許可する送信者の公開鍵(pubkey) |
enabled | boolean | true | チャネルの有効化/無効化 |
name | string | - | 表示名 |
profile | object | - | NIP-01 プロフィールメタデータ |
プロフィールメタデータ
Section titled “プロフィールメタデータ”プロフィールデータは、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: "openclaw@example.com", lud16: "openclaw@example.com", }, }, },}注意点:
- プロフィールの URL には
https://を使用してください。 - リレーからインポートする場合、フィールドがマージされ、ローカルの設定が優先して保持されます。
アクセス制御
Section titled “アクセス制御”DM ポリシー
Section titled “DM ポリシー”- pairing (デフォルト): 未知の送信者に対してペアリングコードを送信します。
- allowlist:
allowFromに含まれる公開鍵のみが DM を送信できます。 - open: パブリックな受信 DM を許可します(
allowFrom: ["*"]が必要)。 - disabled: 受信 DM を無視します。
適用に関する注意:
- 送信者ポリシーのチェックは、署名の検証や NIP-04 の復号の前に行われます。
- ペアリングの返信は、元の DM 本文を処理せずに送信されます。
- 受信 DM にはレート制限が適用され、サイズが大きすぎるペイロードは復号前に破棄されます。
許可リスト(Allowlist)の例
Section titled “許可リスト(Allowlist)の例”{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", dmPolicy: "allowlist", allowFrom: ["npub1abc...", "npub1xyz..."], }, },}以下の形式が使用可能です:
- 秘密鍵:
nsec...または 64文字の hex - 公開鍵 (
allowFrom):npub...または hex
リレー(Relays)
Section titled “リレー(Relays)”デフォルト設定: 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)でも問題ありません。
プロトコルサポート
Section titled “プロトコルサポート”| NIP | ステータス | 説明 |
|---|---|---|
| NIP-01 | サポート済 | 基本的なイベント形式 + プロフィールメタデータ |
| NIP-04 | サポート済 | 暗号化 DM (kind:4) |
| NIP-17 | 計画中 | Gift-wrapped DM |
| NIP-44 | 計画中 | バージョン管理された暗号化 |
ローカルリレー
Section titled “ローカルリレー”# Start strfrydocker run -p 7777:7777 ghcr.io/hoytech/strfry{ channels: { nostr: { privateKey: "${NOSTR_PRIVATE_KEY}", relays: ["ws://localhost:7777"], }, },}- ログからボットの公開鍵(npub)を確認します。
- Nostr クライアント(Damus, Amethyst など)を開きます。
- ボットの公開鍵宛に DM を送信します。
- 応答が返ってくるか確認します。
トラブルシューティング
Section titled “トラブルシューティング”メッセージを受信できない
Section titled “メッセージを受信できない”- 秘密鍵が有効であることを確認してください。
- リレーの URL に到達可能か、
wss://(ローカルの場合はws://)が正しく使われているか確認してください。 enabledがfalseになっていないか確認してください。- Gateway のログを確認し、リレー接続エラーが出ていないかチェックしてください。
応答を送信できない
Section titled “応答を送信できない”- リレーが書き込みを許可しているか確認してください。
- アウトバウンドの接続性を確認してください。
- リレーのレート制限にかかっていないか注意してください。
応答が重複する
Section titled “応答が重複する”- 複数のリレーを使用している場合、これは予想される動作です。
- メッセージはイベント ID によって重複排除されるため、最初のリ答のみがトリガーされます。
セキュリティ
Section titled “セキュリティ”- 秘密鍵をコミットしないでください。
- キーの管理には環境変数を使用してください。
- 本番環境のボットでは
allowlistの使用を検討してください。 - ペアリングおよび許可リストのポリシーは復号前に適用されるため、未知の送信者が暗号処理に負荷をかけることはできません。
制限事項 (MVP)
Section titled “制限事項 (MVP)”- ダイレクトメッセージのみ対応しています(グループチャットは未対応)。
- メディアの添付はできません。
- NIP-04 のみに対応しています(NIP-17 gift-wrap は計画中です)。
関連ドキュメント
Section titled “関連ドキュメント”- Channels Overview — サポートされているすべてのチャネル
- Pairing — DM 認証とペアリングのフロー
- Groups — グループチャットの動作とメンション制御
- Channel Routing — メッセージのセッションルーティング
- Security — アクセスモデルとセキュリティ強化
次のステップ
Section titled “次のステップ”設定で困ったことがあれば、AI Setup Assistant に相談してみてください。最適な構成を一緒に見つけましょう。
OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。