Appearance
Nostr
状态: 可选插件(默认禁用)。
Nostr 是用于社交网络的去中心化协议。该渠道让 OpenClaw 能够通过 NIP-04 接收和响应加密私信(DM)。
安装
向导引导安装(推荐)
- 启动向导(
openclaw onboard)和openclaw channels add会列出可选的渠道插件。 - 选择 Nostr 会提示你按需安装插件。
默认安装方式:
- 开发渠道 + git 仓库可用: 使用本地插件路径。
- 稳定版/Beta 版: 从 npm 下载。
你可以在提示中随时修改选择。
手动安装
bash
openclaw plugins install @openclaw/nostr本地仓库(开发工作流):
bash
openclaw plugins install --link <path-to-openclaw>/extensions/nostr安装或启用插件后,重启 Gateway。
非交互式配置
bash
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 保留在环境变量中,而不是存储在配置文件里。
快速配置
- 生成 Nostr 密钥对(如需要):
bash
# 使用 nak
nak key generate- 添加到配置:
json5
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
},
},
}- 导出密钥:
bash
export NOSTR_PRIVATE_KEY="nsec1..."- 重启 Gateway。
配置参考
| 键 | 类型 | 默认值 | 说明 |
|---|---|---|---|
privateKey | string | 必填 | nsec 或十六进制格式的私钥 |
relays | string[] | ['wss://relay.damus.io', 'wss://nos.lol'] | 中继 URL(WebSocket) |
dmPolicy | string | pairing | 私信访问策略 |
allowFrom | string[] | [] | 允许的发送者公钥列表 |
enabled | boolean | true | 启用/禁用渠道 |
name | string | - | 显示名称 |
profile | object | - | NIP-01 档案元数据 |
档案元数据
档案数据以 NIP-01 kind:0 事件发布。你可以在控制 UI(渠道 -> Nostr -> 档案)中管理,或直接在配置中设置。
示例:
json5
{
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://。 - 从中继导入时会合并字段并保留本地覆盖。
访问控制
私信策略
- pairing(默认):未知发送者收到配对码。
- allowlist:只有
allowFrom中的公钥才能发私信。 - open:开放入站私信(需要
allowFrom: ["*"])。 - disabled:忽略所有入站私信。
执行规则:
- 发送者策略在签名验证和 NIP-04 解密之前检查。
- 配对回复在不处理原始私信内容的情况下发送。
- 入站私信有速率限制,过大的载荷在解密前会被丢弃。
白名单示例
json5
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
dmPolicy: "allowlist",
allowFrom: ["npub1abc...", "npub1xyz..."],
},
},
}密钥格式
接受的格式:
- 私钥:
nsec...或 64 位十六进制 - 公钥(
allowFrom):npub...或十六进制
中继配置
默认中继:relay.damus.io 和 nos.lol。
json5
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
},
},
}使用建议:
- 使用 2-3 个中继保证冗余。
- 不要配置过多中继(延迟增加、消息重复)。
- 付费中继可以提高可靠性。
- 本地中继适合测试(
ws://localhost:7777)。
协议支持
| NIP | 状态 | 说明 |
|---|---|---|
| NIP-01 | 支持 | 基础事件格式 + 档案元数据 |
| NIP-04 | 支持 | 加密私信(kind:4) |
| NIP-17 | 计划 | Gift-wrapped 私信 |
| NIP-44 | 计划 | 版本化加密 |
测试
本地中继
bash
# 启动 strfry
docker run -p 7777:7777 ghcr.io/hoytech/strfryjson5
{
channels: {
nostr: {
privateKey: "${NOSTR_PRIVATE_KEY}",
relays: ["ws://localhost:7777"],
},
},
}手动测试
- 从日志中记录 Bot 公钥(npub)。
- 打开 Nostr 客户端(Damus、Amethyst 等)。
- 向 Bot 公钥发送私信。
- 验证响应。
故障排查
收不到消息
- 确认私钥有效。
- 确保中继 URL 可访问,使用
wss://(本地用ws://)。 - 确认
enabled不为false。 - 查看 Gateway 日志中的中继连接错误。
不发送响应
- 检查中继是否允许写入。
- 验证出站网络连通性。
- 注意中继速率限制。
重复响应
- 使用多个中继时属于正常现象。
- 消息按事件 ID 去重;只有第一次投递才触发响应。
安全建议
- 永远不要将私钥提交到代码仓库。
- 使用环境变量管理密钥。
- 生产环境 Bot 考虑使用
allowlist策略。 - 配对和白名单策略在解密前执行,未知发送者无法强迫 Bot 完成完整的加密操作。
当前限制(MVP)
- 仅支持私信(不支持群聊)。
- 不支持媒体附件。
- 仅支持 NIP-04(NIP-17 Gift-wrap 在规划中)。