Nostr 是一个去中心化的社交网络协议,没有中心服务器,通过密钥对进行身份认证。OpenClaw 通过 Nostr 插件,使用 NIP-04 协议接收和回复加密私信(DM)。
安装插件
# npm registry
openclaw plugins install @openclaw/nostr
# 本地 git checkout(开发模式)
openclaw plugins install --link <path>/extensions/nostr安装后重启 Gateway 才能生效。
快速配置
第一步:生成 Nostr 密钥对
# 使用 nak 工具
npx nak key generate会生成一对密钥:
nsec1...(私钥,保密)npub1...(公钥,公开身份)
第二步:配置 OpenClaw
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}"
}
}
}export NOSTR_PRIVATE_KEY="nsec1..."第三步:重启 Gateway
openclaw gateway restart配置字段参考
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
privateKey | string | 必填 | 私钥,nsec 或 hex 格式 |
relays | string[] | ['wss://relay.damus.io', 'wss://nos.lol'] | 中继服务器 WebSocket URL 列表 |
dmPolicy | string | pairing | DM 访问策略 |
allowFrom | string[] | [] | 允许的发件人公钥列表 |
enabled | boolean | true | 是否启用 |
name | string | — | 显示名称 |
profile | object | — | NIP-01 个人资料元数据 |
密钥格式
Nostr 支持两种私钥格式,OpenClaw 均支持:
nsec格式:nsec1abc123...(Bech32 编码,人类可读)- hex 格式:64 位十六进制字符串
建议使用 nsec 格式,更易辨认。环境变量注入方式(${NOSTR_PRIVATE_KEY})可以避免密钥明文写入配置文件。
个人资料(Profile)
设置 Bot 的 Nostr 身份:
{
"channels": {
"nostr": {
"privateKey": "nsec1...",
"profile": {
"name": "OpenClaw Bot",
"about": "AI assistant powered by OpenClaw",
"picture": "https://example.com/avatar.png"
}
}
}
}访问控制
DM 策略
| 策略 | 说明 |
|---|---|
pairing | 默认,未知用户需先配对 |
open | 允许所有人发私信 |
allowlist | 仅允许 allowFrom 中的公钥 |
公钥白名单
{
"channels": {
"nostr": {
"privateKey": "nsec1...",
"dmPolicy": "allowlist",
"allowFrom": [
"npub1abc...",
"npub1xyz..."
]
}
}
}中继服务器配置
Nostr 消息通过中继服务器(Relay)传播。默认使用 Damus 和 nos.lol,可以自定义:
{
"channels": {
"nostr": {
"privateKey": "nsec1...",
"relays": [
"wss://relay.damus.io",
"wss://nos.lol",
"wss://relay.nostr.band",
"wss://nostr.wine"
]
}
}
}建议配置 3-5 个中继服务器,提高消息可靠性(任意一个中继收到消息即可触发 Bot)。
本地测试
使用本地中继服务器测试(无需公网):
# 运行本地 Nostr 中继(如 strfry)
strfry relay
# 配置使用本地中继
# relays: ["ws://localhost:7777"]手动发送测试消息:
npx nak dm --to npub1<your-bot-pubkey> "Hello Bot" --relay wss://relay.damus.io协议支持
当前支持:NIP-04(加密私信)
NIP-04 使用 ECDH 密钥交换 + AES-256-CBC 加密,消息内容对中继服务器不可见。
已知限制(MVP 版本)
- 仅支持 DM,不支持公开帖子(Notes)和频道
- 不支持消息历史回溯(仅处理新消息)
- 群组(NIP-29)暂不支持
常见问题
收不到消息?
检查中继服务器是否在线,确认 Bot 的公钥已被发件人知晓。运行 openclaw logs --follow 查看连接状态。
发不出回复?
验证 privateKey 格式是否正确,确认连接到至少一个可用中继。
收到重复回复? 这通常是中继同步延迟问题,OpenClaw 有内置去重机制,但多个中继可能导致少量重复。
原文:Nostr - OpenClaw | 来源:OpenClaw 官方文档