Ir al contenido

Nostr

Estado: Complemento opcional (desactivado por defecto).

Nostr es un protocolo descentralizado para redes sociales. Este canal permite a OpenClaw recibir y responder a mensajes directos cifrados (DM) a través de NIP-04.

  • Onboarding (openclaw onboard) y openclaw channels add listan los complementos de canal opcionales.
  • Seleccionar Nostr le pedirá que instale el complemento bajo demanda.

Valores predeterminados de instalación:

  • Canal de desarrollo + git checkout disponible: utiliza la ruta local del complemento.
  • Estable/Beta: descargas desde npm.

Siempre puede anular la elección en el mensaje.

Ventana de terminal
openclaw plugins install @openclaw/nostr

Use un checkout local (flujos de trabajo de desarrollo):

Ventana de terminal
openclaw plugins install --link <path-to-local-nostr-plugin>

Reinicie la puerta de enlace (Gateway) después de instalar o activar complementos.

Ventana de terminal
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 --use-env para mantener NOSTR_PRIVATE_KEY en el entorno en lugar de almacenar la clave en la configuración.

  1. Genere un par de claves Nostr (si es necesario):
Ventana de terminal
# Using nak
nak key generate
  1. Añadir a la configuración:
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}
  1. Exportar la clave:
Ventana de terminal
export NOSTR_PRIVATE_KEY="nsec1..."
  1. Reinicie el Gateway.
ClaveTipoPredeterminadoDescripción
privateKeystringrequeridoClave privada en formato nsec o hexadecimal
relaysstring[]['wss://relay.damus.io', 'wss://nos.lol']URLs de relay (WebSocket)
dmPolicystringpairingPolítica de acceso DM
allowFromstring[][]Claves públicas de remitentes permitidos
enabledbooleantrueHabilitar/deshabilitar canal
namestring-Nombre para mostrar
profileobject-Metadatos de perfil NIP-01

Los datos del perfil se publican como un evento NIP-01 kind:0. Puede gestionarlos desde la UI de Control (Channels -> Nostr -> Profile) o establecerlos directamente en la configuración.

Ejemplo:

{
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",
},
},
},
}

Notas:

  • Las URLs de perfil deben usar https://.
  • La importación desde relays fusiona los campos y conserva las anulaciones locales.
  • pairing (predeterminado): los remitentes desconocidos reciben un código de emparejamiento.
  • allowlist: solo las claves públicas en allowFrom pueden enviar DM.
  • open: DM entrantes públicos (requiere allowFrom: ["*"]).
  • disabled: ignorar DM entrantes.

Notas sobre el cumplimiento:

  • La política del remitente se verifica antes de la verificación de la firma y el descifrado de NIP-04.
  • Las respuestas de emparejamiento se envían sin procesar el cuerpo del DM original.
  • Los DM entrantes tienen límite de velocidad y las cargas excesivamente grandes se descartan antes de descifrar.
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}

Formatos aceptados:

  • Clave privada: nsec... o hexadecimal de 64 caracteres
  • Claves públicas (allowFrom): npub... o hexadecimal

Predeterminados: relay.damus.io y nos.lol.

{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
},
},
}

Consejos:

  • Use 2-3 relés para redundancia.
  • Evite usar demasiados relés (latencia, duplicación).
  • Los relés de pago pueden mejorar la confiabilidad.
  • Los relés locales están bien para pruebas (ws://localhost:7777).
NIPEstadoDescripción
NIP-01SoportadoFormato de evento básico + metadatos de perfil
NIP-04SoportadoDM cifrados (kind:4)
NIP-17PlanificadoDM envueltos (gift-wrapped)
NIP-44PlanificadoCifrado con versiones
Ventana de terminal
# Start strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfry
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}
  1. Anote la clave pública del bot (npub) de los registros.
  2. Abra un cliente de Nostr (Damus, Amethyst, etc.).
  3. Envíe un DM a la clave pública del bot.
  4. Verifique la respuesta.
  • Verifique que la clave privada sea válida.
  • Asegúrese de que las URL de los relés sean accesibles y usen wss:// (o ws:// para local).
  • Confirme que enabled no sea false.
  • Revise los registros de Gateway para ver errores de conexión de relé.
  • Compruebe que el relé acepte escrituras.
  • Verifique la conectividad saliente.
  • Vigile los límites de velocidad del relé.
  • Esperado al usar múltiples relés.
  • Los mensajes se deduplican por ID de evento; solo la primera entrega activa una respuesta.
  • Nunca confirme claves privadas.
  • Use variables de entorno para las claves.
  • Considere allowlist para bots de producción.
  • La política de emparejamiento y lista de permitidos se aplica antes de descifrar, por lo que los remitentes desconocidos no pueden forzar todo el trabajo criptográfico.
  • Solo mensajes directos (sin chats grupales).
  • Sin archivos adjuntos multimedia.
  • Solo NIP-04 (NIP-17 gift-wrap planificado).