Canal Nostr OpenClaw
Connectez OpenClaw au réseau décentralisé Nostr via un plugin optionnel. Cette intégration permet à votre assistant IA de recevoir et de répondre aux messages directs chiffrés NIP-04 à travers n'importe quel relay Nostr — aucun serveur centralisé, aucun compte à créer, juste une paire de clés cryptographiques et une connexion relay. Idéal pour les déploiements axés sur la confidentialité où la résistance à la censure et la souveraineté individuelle comptent.
Nostr Fonctionnalités prises en charge
Messages texte
Pris en charge
Médias et fichiers
Non pris en charge
Réactions
Pris en charge
Fils de discussion
Non pris en charge
Messages vocaux
Non pris en charge
Discussion de groupe
Non pris en charge
Nostr Prérequis
- OpenClaw Gateway installé et en cours d'exécution
- Une paire de clés Nostr (clé privée au format nsec ou hexadécimal) — générez-la avec 'nak key generate'
- Au moins un relay Nostr accessible via WebSocket (par ex., wss://relay.damus.io)
- Node.js 18+ installé sur votre serveur
Nostr Configuration rapide
Installer le plugin Nostr
Exécutez 'openclaw plugins install @openclaw/nostr' pour ajouter le canal Nostr. Vous pouvez également utiliser 'openclaw onboard' ou 'openclaw channels add' et sélectionner Nostr dans la liste des plugins. Redémarrez le Gateway après l'installation.
Générer une paire de clés et configurer
Générez une paire de clés Nostr avec 'nak key generate'. Définissez la clé privée comme variable d'environnement (export NOSTR_PRIVATE_KEY="nsec1...") et référencez-la dans votre configuration openclaw.json en utilisant ${NOSTR_PRIVATE_KEY}.
Démarrer et envoyer un DM de test
Redémarrez le Gateway avec 'openclaw start'. Retrouvez la clé publique (npub) de votre bot dans les journaux de démarrage. Ouvrez n'importe quel client Nostr (par ex., Damus, Amethyst, Primal) et envoyez un DM chiffré à la npub du bot. Si vous utilisez la politique d'appairage par défaut, approuvez l'expéditeur via le CLI.
Nostr Exemple de configuration
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}",
"relays": [
"wss://relay.damus.io",
"wss://nos.lol"
],
"dmPolicy": "pairing"
}
}
}Nostr Documentation Détaillée
Vue d'ensemble de l'architecture
Installation du plugin
Génération et gestion des clés
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}"
}
}
}Configuration des relays
{
"channels": {
"nostr": {
"relays": [
"wss://relay.damus.io",
"wss://nos.lol",
"wss://relay.nostr.band"
]
}
}
}Politiques de DM
{
"channels": {
"nostr": {
"dmPolicy": "allowlist",
"allowFrom": [
"npub1abc...xyz",
"npub1def...uvw"
]
}
}
}Métadonnées de profil (NIP-01)
{
"channels": {
"nostr": {
"profile": {
"name": "openclaw-bot",
"display_name": "OpenClaw AI Assistant",
"about": "AI-powered assistant on Nostr. DM me!",
"picture": "https://example.com/bot-avatar.png",
"nip05": "bot@yourdomain.com"
}
}
}
}Chiffrement et prise en charge du protocole
Tests avec un relay local
{
"channels": {
"nostr": {
"relays": ["ws://localhost:7777"],
"dmPolicy": "open",
"allowFrom": ["*"]
}
}
}Nostr Référence de Configuration
| Key | Type | Default | Description |
|---|---|---|---|
| privateKey | string | (required) | Clé privée Nostr au format nsec (Bech32) ou hexadécimal de 64 caractères. Utilisez une référence de variable d'environnement. |
| relays | string[] | ["wss://relay.damus.io", "wss://nos.lol"] | Liste des URLs WebSocket des relays Nostr auxquels se connecter |
| dmPolicy | string | "pairing" | Politique de contrôle d'accès des DM : 'pairing', 'allowlist', 'open' ou 'disabled' |
| allowFrom | string[] | [] | Clés publiques (npub ou hex) autorisées à envoyer des messages au bot (lorsque dmPolicy est 'allowlist') |
| enabled | boolean | true | Activer ou désactiver le canal Nostr |
| name | string | "" | Nom d'affichage pour cette instance de canal |
| profile.name | string | "" | Nom d'utilisateur du bot publié en tant que métadonnées NIP-01 |
| profile.display_name | string | "" | Nom d'affichage complet publié en tant que métadonnées NIP-01 |
| profile.about | string | "" | Biographie / description du bot publiée en tant que métadonnées NIP-01 |
| profile.picture | string | "" | URL de l'image d'avatar (HTTPS obligatoire) publiée en tant que métadonnées NIP-01 |
| profile.banner | string | "" | URL de l'image de bannière (HTTPS obligatoire) publiée en tant que métadonnées NIP-01 |
| profile.website | string | "" | URL du site web publiée en tant que métadonnées NIP-01 |
| profile.nip05 | string | "" | Identifiant de vérification NIP-05 (par ex., 'bot@yourdomain.com') |
| profile.lud16 | string | "" | Adresse Lightning pour recevoir des zaps |
Clé privée Nostr au format nsec (Bech32) ou hexadécimal de 64 caractères. Utilisez une référence de variable d'environnement.
Liste des URLs WebSocket des relays Nostr auxquels se connecter
Politique de contrôle d'accès des DM : 'pairing', 'allowlist', 'open' ou 'disabled'
Clés publiques (npub ou hex) autorisées à envoyer des messages au bot (lorsque dmPolicy est 'allowlist')
Activer ou désactiver le canal Nostr
Nom d'affichage pour cette instance de canal
Nom d'utilisateur du bot publié en tant que métadonnées NIP-01
Nom d'affichage complet publié en tant que métadonnées NIP-01
Biographie / description du bot publiée en tant que métadonnées NIP-01
URL de l'image d'avatar (HTTPS obligatoire) publiée en tant que métadonnées NIP-01
URL de l'image de bannière (HTTPS obligatoire) publiée en tant que métadonnées NIP-01
URL du site web publiée en tant que métadonnées NIP-01
Identifiant de vérification NIP-05 (par ex., 'bot@yourdomain.com')
Adresse Lightning pour recevoir des zaps
Nostr Questions Fréquentes
Nostr Dépannage
La connexion au relay a peut-être échoué, ou l'expéditeur publie sur des relays différents de ceux auxquels le bot est abonné.
La clé privée n'est pas dans un format nsec (Bech32) ou hexadécimal de 64 caractères valide, ou la variable d'environnement n'est pas définie.
Les relays configurés du bot et ceux du client du destinataire ne se chevauchent pas, les événements ne peuvent donc pas se propager.
Le Gateway n'a pas été redémarré après l'installation du plugin, ou l'installation a échoué silencieusement.