OpenClaw

OpenClaw Nostr 渠道

去中心化
高级

通过可选插件将 OpenClaw 连接到 Nostr 去中心化网络。该集成使您的 AI 助手能够在任何 Nostr relay 上接收和回复 NIP-04 加密私信,无需中心化服务器、无需注册账户,只需一对加密密钥和 relay 连接即可。非常适合注重隐私、需要抗审查和自主权的部署场景。

快速信息
难度高级
分类去中心化
支持功能数2 / 6

Nostr 支持的功能

文本消息

支持

媒体与文件

不支持

消息反应

支持

消息线程

不支持

语音消息

不支持

群聊

不支持

Nostr 前置条件

  • 已安装并运行 OpenClaw Gateway
  • 一对 Nostr 密钥(私钥为 nsec 或十六进制格式)— 可使用 'nak key generate' 生成
  • 至少一个可通过 WebSocket 访问的 Nostr relay(例如 wss://relay.damus.io)
  • 服务器上已安装 Node.js 18+

Nostr 快速设置

1

安装 Nostr 插件

运行 'openclaw plugins install @openclaw/nostr' 以添加 Nostr 渠道。也可以使用 'openclaw onboard' 或 'openclaw channels add',然后从插件列表中选择 Nostr。安装后请重启 Gateway。

2

生成密钥对并完成配置

使用 'nak key generate' 生成 Nostr 密钥对。将私钥设置为环境变量(export NOSTR_PRIVATE_KEY="nsec1..."),然后在 openclaw.json 配置中通过 ${NOSTR_PRIVATE_KEY} 引用。

3

启动并发送测试 DM

使用 'openclaw start' 重启 Gateway。在启动日志中找到机器人的公钥(npub)。打开任意 Nostr 客户端(如 Damus、Amethyst、Primal),向机器人的 npub 发送加密 DM。如果使用默认的配对策略,需要通过 CLI 批准发送者。

Nostr 配置示例

config.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}",
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol"
      ],
      "dmPolicy": "pairing"
    }
  }
}

Nostr 深入了解

架构概述

与中心化消息平台不同,Nostr 是一种去中心化协议,消息通过独立的 relay 服务器进行分发。OpenClaw 通过 WebSocket 连接到一个或多个 relay,并订阅发送给机器人公钥的 NIP-04 加密私信。 消息流转过程非常直观: 1. 用户从任意 Nostr 客户端(Damus、Amethyst、Primal 等)发送加密 DM 2. 消息传播到用户所发布的 relay 3. OpenClaw 的 relay 订阅接收到该事件 4. Gateway 解密消息,将其传递给 AI 代理进行处理,然后加密响应并发布到配置的 relay 由于 Nostr 基于 relay 架构,不存在单点故障——如果一个 relay 宕机,消息仍可通过其他 relay 流转。机器人和用户无需使用完全相同的 relay,因为 relay 之间通常会交换事件。
机器人的公钥由私钥派生,显示在 Gateway 启动日志中。将此 npub 分享给用户,以便他们找到并给机器人发送消息。
Nostr 没有“在线状态”的概念——消息存储在 relay 上,客户端连接时即可接收。

插件安装

Nostr 渠道以可选的 OpenClaw 插件形式分发,而非内置于核心 Gateway 中。这使得基础安装保持轻量,同时允许您在需要时添加 Nostr 支持。 提供以下几种安装方式: • **npm(推荐):** 运行 'openclaw plugins install @openclaw/nostr' 安装稳定版。 • **Beta 渠道:** 使用 'openclaw plugins install @openclaw/nostr@beta' 获取预发布功能。 • **本地开发:** 克隆插件仓库,使用 'openclaw plugins install --link /path/to/local/checkout' 进行本地链接。 • **交互式安装:** 运行 'openclaw onboard' 或 'openclaw channels add',从列表中选择 Nostr。 安装完成后,需重启 Gateway 使插件生效。
运行 'openclaw plugins list' 可验证 Nostr 插件是否已安装并处于活跃状态。

密钥生成与管理

Nostr 身份基于公钥加密体系。您的机器人身份就是它的密钥对——私钥(nsec)用于签名和解密,公钥(npub)用作地址。 使用 'nak' CLI 工具生成密钥对: 1. 安装 nak:'go install github.com/fiatjaf/nak@latest'(或从发布页下载) 2. 生成密钥:'nak key generate'——输出十六进制格式的私钥 3. 派生公钥:'nak key public <hex-private-key>'——如需转换为 npub 格式 OpenClaw 支持 nsec(Bech32 编码)和 64 字符十六进制两种私钥格式。allowFrom 中的公钥可使用 npub 或十六进制格式。
openclaw.json
{
  "channels": {
    "nostr": {
      "privateKey": "${NOSTR_PRIVATE_KEY}"
    }
  }
}
切勿将私钥直接硬编码在 openclaw.json 中。请始终使用环境变量引用(例如 ${NOSTR_PRIVATE_KEY}),并通过 'export NOSTR_PRIVATE_KEY="nsec1..."' 在 shell 或 .env 文件中设置。

Relay 配置

Relay 是 Nostr 的核心基础设施,负责存储和分发事件。OpenClaw 通过 WebSocket 连接到您配置的 relay 来收发加密 DM。 默认配置使用两个知名的公共 relay:relay.damus.io 和 nos.lol。生产环境中,您应根据实际需求自定义配置。 Relay 选择建议: • 使用 2-3 个 relay,在冗余性和性能之间取得良好平衡 • relay 过多会增加延迟和带宽消耗 • 付费 relay(如 relay.nostr.band)提供更好的可靠性和更少的垃圾信息 • 开发环境下,可通过 Docker 运行本地 relay(如 Strfry),地址为 ws://localhost:7777
openclaw.json
{
  "channels": {
    "nostr": {
      "relays": [
        "wss://relay.damus.io",
        "wss://nos.lol",
        "wss://relay.nostr.band"
      ]
    }
  }
}
公共 relay 免费但可能存在速率限制或垃圾信息。付费 relay 通常提供更好的性能和过滤能力。
机器人和用户无需在同一个 relay 上——大多数 relay 之间会互相交换事件。

DM 策略

DM(私信)策略控制谁可以通过 Nostr 与您的 AI 助手交互。由于 Nostr 在设计上是开放的,访问控制对于防止未授权用户消耗 AI 配额尤为重要。 OpenClaw 支持四种策略: • **pairing(默认)** — 未知发送者会收到一个配对码。您可通过 'openclaw pairing approve nostr <code>' 批准或拒绝。批准后即可自由对话。 • **allowlist** — 仅 allowFrom 列表中的公钥(npub 或十六进制格式)可以给机器人发消息。其他人将被静默忽略。 • **open** — 任何人都可以给机器人发消息。需要设置 allowFrom: ["*"] 来启用。请谨慎使用。 • **disabled** — 机器人不响应任何收到的 DM。
openclaw.json
{
  "channels": {
    "nostr": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "npub1abc...xyz",
        "npub1def...uvw"
      ]
    }
  }
}

个人资料元数据(NIP-01)

您可以使用 NIP-01 kind:0 元数据事件在 Nostr 网络上发布机器人的个人资料。这使您的机器人可以在 Nostr 客户端中被发现——用户查找机器人的 npub 时将看到其名称、头像、简介和其他详细信息。 可配置的资料字段包括: • **name** — 短用户名(例如 "openclaw-bot") • **display_name** — 完整显示名称 • **about** — 个人简介/描述 • **picture** — 头像 URL(必须使用 HTTPS) • **banner** — 横幅图片 URL(必须使用 HTTPS) • **website** — 机器人或项目网站 • **nip05** — NIP-05 验证标识符(例如 "bot@yourdomain.com") • **lud16** — 用于接收 zaps 的闪电网络地址
openclaw.json
{
  "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"
      }
    }
  }
}
NIP-05 验证(bot@yourdomain.com)会在大多数 Nostr 客户端中显示验证标记,帮助用户确认机器人身份。
所有图片 URL(picture、banner)必须使用 HTTPS。

加密与协议支持

OpenClaw 的 Nostr 集成中,所有私信均使用 NIP-04 加密——消息通过 ECDH(椭圆曲线 Diffie-Hellman)从发送方和接收方的密钥对派生共享密钥进行加密。 当前支持的 NIP: • **NIP-01** — 基础协议:事件、订阅、元数据(kind:0) • **NIP-04** — 加密私信(kind:4) 计划未来支持: • **NIP-17** — 封装式私信(改进元数据隐私) • **NIP-44** — 版本化加密(更强的加密原语) NIP-04 在所有 Nostr 客户端中得到广泛支持,但存在已知的元数据泄露问题(relay 运营者可以看到谁在与谁通信,但无法看到内容)。NIP-17 和 NIP-44 将在被广泛采用后解决这些限制。
NIP-04 加密消息内容,但不加密元数据。Relay 运营者可以看到发送方/接收方的公钥和时间戳。
为获得最大程度的隐私保护,请为机器人使用专用密钥对,并通过付费或自托管的 relay 连接。

使用本地 Relay 进行测试

在开发和测试阶段,您可以运行本地 Nostr relay,而无需连接公共 relay。推荐使用 Strfry,这是一个高性能 relay,可通过 Docker 轻松运行。 配置步骤: 1. 运行 relay:'docker run -p 7777:7777 hoytech/strfry' 2. 将 OpenClaw 配置为使用本地 relay:ws://localhost:7777 3. 启动 Gateway 4. 使用配置了本地 relay 的 Nostr 客户端发送测试 DM 这样可以将测试环境与公共 Nostr 网络隔离,实现更快的开发迭代。
openclaw.json (development)
{
  "channels": {
    "nostr": {
      "relays": ["ws://localhost:7777"],
      "dmPolicy": "open",
      "allowFrom": ["*"]
    }
  }
}
在本地测试时,使用 dmPolicy: 'open' 配合 allowFrom: ['*'] 可跳过配对流程。

Nostr 配置参考

privateKey
Type: stringDefault: (required)

Nostr 私钥,支持 nsec(Bech32)或 64 字符十六进制格式。请使用环境变量引用。

relays
Type: string[]Default: ["wss://relay.damus.io", "wss://nos.lol"]

要连接的 Nostr relay WebSocket URL 列表

dmPolicy
Type: stringDefault: "pairing"

DM 访问控制策略:'pairing'、'allowlist'、'open' 或 'disabled'

allowFrom
Type: string[]Default: []

允许给机器人发消息的公钥列表(npub 或十六进制格式),在 dmPolicy 为 'allowlist' 时生效

enabled
Type: booleanDefault: true

启用或禁用 Nostr 渠道

name
Type: stringDefault: ""

此渠道实例的显示名称

profile.name
Type: stringDefault: ""

作为 NIP-01 元数据发布的机器人用户名

profile.display_name
Type: stringDefault: ""

作为 NIP-01 元数据发布的完整显示名称

profile.about
Type: stringDefault: ""

作为 NIP-01 元数据发布的机器人简介/描述

profile.picture
Type: stringDefault: ""

作为 NIP-01 元数据发布的头像图片 URL(须使用 HTTPS)

profile.banner
Type: stringDefault: ""

作为 NIP-01 元数据发布的横幅图片 URL(须使用 HTTPS)

profile.website
Type: stringDefault: ""

作为 NIP-01 元数据发布的网站 URL

profile.nip05
Type: stringDefault: ""

NIP-05 验证标识符(例如 'bot@yourdomain.com')

profile.lud16
Type: stringDefault: ""

用于接收 zaps 的闪电网络地址

Nostr 常见问题

Nostr 故障排查

机器人启动后未收到任何消息

Relay 连接可能失败,或者发送方发布消息的 relay 与机器人订阅的 relay 不同。

检查 Gateway 日志中是否有 WebSocket 连接错误。确认 relay URL 正确且可访问。尝试添加发送方也使用的常用公共 relay(如 wss://relay.damus.io)。确保私钥已正确设置。
错误:无效的私钥格式

私钥不是有效的 nsec(Bech32)或 64 字符十六进制格式,或环境变量未设置。

确认环境变量已正确导出:'echo $NOSTR_PRIVATE_KEY'。确保密钥以 'nsec1' 开头(Bech32 格式)或恰好为 64 个十六进制字符。如需要可使用 'nak key generate' 重新生成。
消息已发送但从未送达接收方

机器人配置的 relay 与接收方客户端的 relay 没有重叠,导致事件无法传播。

添加至少一个接收方 Nostr 客户端也使用的 relay。大多数客户端都连接了 relay.damus.io 和 nos.lol 等常用公共 relay。检查接收方 Nostr 客户端资料中的 relay 列表。
安装后找不到插件

插件安装后未重启 Gateway,或安装过程静默失败。

运行 'openclaw plugins list' 确认 Nostr 插件已安装。如未列出,请重新运行 'openclaw plugins install @openclaw/nostr'。安装后使用 'openclaw start' 重启 Gateway。