using-nostr(Nostr协议集成技能):用几行 JavaScript 打通去中心化社交发布与加密私信
- 零门槛接入:技能封装了
nostr-sdk的最小直接导出函数,安装依赖后即可发帖、回复、发私信、看动态,无需自己实现签名、事件构造与中继分发逻辑。 - 双协议私信:同时支持旧版 NIP-4 与新版 NIP-17(礼物包裹、密封发送者、NIP-44 加密),可按隐私需求自由切换。
- 默认中继覆盖广:内置多个默认中继(含
wss://relay.damus.io、wss://nos.lol等),减少手动配置中继的工作量。 - 安全性有指引:文档明确要求私钥不入库、走环境变量或保险库,并给出 POW 防垃圾与错误处理范式。
- 适合谁用:想给机器人、内容工具、告警系统加一条「去中心化社交通道」的开发者与效率工具用户。
该技能叫什么?如何下载安装 AI 技能提升开发效率?
技能中文名:Nostr协议集成技能Skill 技能英文名:using-nostr 技能ID:13106
这个技能解决的核心问题是:Nostr 是一个去中心化社交协议,想在上面发一条笔记,开发者通常要自己搞懂事件(event)结构、密钥签名、多个中继的 WebSocket 分发与结果聚合,甚至要处理工作证明(POW)与加密私信的 NIP 细节。using-nostr 把这些繁琐环节收敛成若干可直接调用的函数导出,你只关心「发什么、发给谁」,剩下的交给技能。
「一键安装」的思路很简单:先装依赖,再调用函数,最后验证结果。
第一步:确认安装前提
- 已具备 Node.js 运行环境与 npm 包管理器(版本以官方说明为准);
- 准备一个 Nostr 身份:
nsec开头的私钥(Bech32 格式)。没有的话,技能内提供密钥生成能力,可先生成测试用密钥。
第二步:安装技能依赖 按技能详情给出的安装方式执行:
npm install nostr-sdk
第三步:验证是否生效
先跑一段最小验证:用 generateNewKey() 生成一对测试密钥,确认库能正常加载并返回 nsec / npub;再用测试密钥调用一次 posttoNostr() 发一条测试笔记,看返回值中的 success、published、totalRelays 是否符合预期。能拿到 eventId 且 published 大于 0,说明安装与中继连通性都正常。
至于该技能在具体 AI 技能平台上的安装入口、命令名称与版本号,以官方说明为准;本文只依据技能详情中的 npm install nostr-sdk 展开。
该技能的主要功能和特点
- 发布公共笔记:
posttoNostr()一条调用完成内容签名与多中继广播,返回成功中继数、失败中继数、总中继数与错误列表。 - 自动标签提取:内容里写
#nostr会自动转成["t","nostr"]话题标签,@npub1...提及会转成["p", 公钥],note1...引用会转成["e", 事件ID],链接原样保留——省掉手写 tags 的麻烦。 - 回复帖子:
replyToPost()传入事件 ID、回复内容与作者公钥即可进入线程对话。 - 加密私信双通道:
sendmessage()走 NIP-4 旧版兼容路线;sendMessageNIP17()走现代礼物包裹方案,密封发送者、使用临时密钥、NIP-44 加密,隐私更强。 - 消息监听:
getmessage()与getMessageNIP17()以回调方式接收私信,支持since时间戳增量拉取,并返回unsubscribe用于停止监听。 - 全局动态读取:
getGlobalFeed()支持按数量、时间窗、事件类型(如kinds:[1]仅文本笔记)、作者、中继过滤,适合做阅读器或趋势分析。 - 密钥工具链:
generateNewKey()生成完整密钥对,generateRandomNsec()快速生成私钥,nsecToPublic()由私钥推导公钥与 npub。 - POW 防垃圾:
powDifficulty参数默认 4,设为 0 可关闭,在公开广播场景下可降低被中继拒收的概率。
和「自己从零写 Nostr 客户端」相比,它的优势在于:默认中继已内置、标签自动解析、发布结果按中继聚合统计、私信同时覆盖新旧两代标准。
如何使用该技能?
步骤 1:准备密钥并放进环境变量
不要把 nsec 提交到 git。按技能建议:
export NOSTR_NSEC="nsec1...your-private-key"
步骤 2:发布一条公共笔记
const { posttoNostr } = require("nostr-sdk");
const result = await posttoNostr("Hello Nostr! #introduction", {
nsec: process.env.NOSTR_NSEC,
tags: [],
relays: null,
powDifficulty: 4
});
console.log(result);
输入为文本内容与可选项;输出形如:
{
success: true,
eventId: "abc123...",
published: 12,
failed: 2,
totalRelays: 14,
powDifficulty: 4,
errors: []
}
看 published 与 failed 就能判断覆盖情况,失败原因在 errors 里。
步骤 3:回复某条帖子
const { replyToPost } = require("nostr-sdk");
await replyToPost(
"note1...event-id",
"Great post! @npub1...author",
"npub1...author-pubkey",
[],
null,
4
);
步骤 4:发送私信(按隐私需求二选一)
const { sendMessageNIP17 } = require("nostr-sdk");
await sendMessageNIP17(
"npub1...recipient",
"Private message!",
{ nsec: process.env.NOSTR_NSEC }
);
需要兼容旧客户端时改用 sendmessage()(NIP-4)。
步骤 5:监听私信并处理
const { getMessageNIP17 } = require("nostr-sdk");
const unsubscribe = getMessageNIP17((msg) => {
console.log(`来自 ${msg.senderNpub} 的消息: ${msg.content}`);
}, {
nsec: process.env.NOSTR_NSEC,
since: Math.floor(Date.now() / 1000) - 300
});
// 不需要时调用 unsubscribe() 停止
步骤 6:读取全局动态或生成测试密钥
const { getGlobalFeed, generateNewKey } = require("nostr-sdk");
const events = await getGlobalFeed({
limit: 50,
since: Math.floor(Date.now() / 1000) - 3600,
kinds: [1]
});
events.forEach(e => console.log(e.authorNpub, e.content, e.noteId, e.createdAtDate));
步骤 7:加错误处理兜底
try {
const r = await posttoNostr("Hello", { nsec: process.env.NOSTR_NSEC });
if (!r.success) console.error("发布失败:", r.errors);
} catch (err) {
console.error("错误:", err.message);
}
常见错误包括「私钥未设置」「无效的 nsec 格式」「发布到 Nostr 失败(中继连接)」「解密消息失败(收件人私钥错误)」,按提示逐项排查即可。
同类型竞品对比分析
| 方案名称 | 定位 | 核心功能 | 安装/使用门槛 | 适用场景 | 优势与不足 |
|---|---|---|---|---|---|
| using-nostr(本技能) | AI 技能形态的 Nostr 快速集成层 | 发笔记、回复、NIP-4/NIP-17 私信收发、全局动态、密钥生成与转换 | 低:npm install nostr-sdk 后调用函数;私钥需自行管理 |
机器人发帖、告警通知、私信客服、内容监控 | 优势:函数直出、默认中继多、标签自动解析、新旧私信标准都覆盖;不足:功能聚焦基础收发,不含客户端界面与复杂应用层能力 |
| 自行基于 Nostr 底层库开发 | 完全定制 | 事件构造、签名、中继池、加密均由自己实现 | 高:需理解 NIP 规范与事件模型 | 需要深度定制协议行为的团队 | 优势:完全可控;不足:开发周期长,标签解析、多中继聚合、私信兼容都要自己填坑 |
| 现成 Nostr 客户端(如技能中提到的网页/iOS 客户端) | 面向终端用户的成品应用 | 浏览、发帖、私信等图形化操作 | 低:注册/导入密钥即可用 | 人工日常发帖与阅读 | 优势:开箱即用、有界面;不足:难以嵌入自动化流程,批量发布与程序化监听能力弱 |
| 传统中心化社交平台开放接口 | 平台内集成 | 发帖、私信、拉取内容 | 中:需申请开发者资质与密钥,受平台规则约束 | 面向中心化平台的内容运营 | 优势:用户基数大、生态成熟;不足:依赖平台审核与限流,非去中心化,身份与数据不自主 |
选型建议:要「程序化、可自动化、身份自持」,本技能最省事;要「人工日常使用」,现成客户端更顺手;要「协议级深度定制」,才值得自研。
该技能的典型应用场景与实际体验情况
场景一:自动化公告与内容分发(运营/开发者)
痛点:每次发公告都要手动登录客户端,多平台复制粘贴。使用方式:把 posttoNostr() 接到发布流水线里,公告正文写好话题标签,调用后检查 published 数量。实际体验:标签自动提取非常省事,#tag、@提及、引用笔记不用手动组 tags;注意首次使用要先确认中继连通性,failed 偏高时补充自定义 relays。
场景二:私信客服机器人(开发者)
痛点:需要一个能监听来信并自动回复的通道,还希望发送者身份对第三方不可见。使用方式:用 getMessageNIP17() 常驻监听,解析 senderNpub 与 content 后调用 sendMessageNIP17() 回复。实际体验:NIP-17 的密封发送者与临时密钥让元数据保护明显更好;但需要自己设计回调里的业务分流逻辑,长驻进程要处理重连与 since 增量,避免重复消费。
场景三:舆情与趋势监控(数据分析/研究者)
痛点:想按关键词、时间窗、作者维度观察公共讨论。使用方式:getGlobalFeed() 设 kinds:[1]、limit、since 拉取,再对 content 做本地过滤统计。实际体验:参数维度够用,返回体带 authorNpub、noteId、createdAtDate 便于二次处理;注意不同中继内容不完全一致,覆盖范围取决于你使用的默认或自定义中继集合。
场景四:低成本环境验证与测试(个人开发者)
痛点:想先试试水,不想马上暴露真实身份。使用方式:generateNewKey() 或 generateRandomNsec() 生成一次性测试密钥,用小号 powDifficulty 试着发一条。实际体验:上手难度低,一个 npm install 加一个函数就能跑通;但测试密钥用完即弃,切勿与主身份混用,且永远不要把 nsec 写进源码。
该技能能为用户带来的价值
- 效率提升:把「读协议文档 → 写签名与事件构造 → 维护中继池 → 聚合发布结果」压缩为一次函数调用,发帖从半天工作量降到几分钟;回复、私信、拉取动态同理,减少重复造轮子。
- 门槛降低:无需先精读 NIP 规范,也能完成发帖与加密私信;内置默认中继与自动标签解析,让不熟悉 Nostr 生态的开发者也能快速跑通第一条消息。
- 隐私可按需升级:同一套技能内提供 NIP-4 与 NIP-17 两条通道,从「基础加密」到「密封发送者 + 临时密钥」平滑升级,安全投入可按业务重要性分配。
- 可量化收益:发布结果直接给出
published / failed / totalRelays,失败原因落在errors,排障从「猜」变成「看数据」;监听接口支持since增量,避免全量重复拉取造成的浪费。 - 长期价值:身份自持(私钥在自己手里)、数据走开放协议,账号与内容不依赖单一平台;技能提供的密钥管理与安全实践(环境变量、不入 git、按用途分密钥)也便于团队形成规范。
常见问题 FAQ
Q1:怎么安装这个技能?需要什么前置条件?
先在具备 Node.js 与 npm 的环境里执行 npm install nostr-sdk(技能详情给出的安装方式),准备好 nsec 私钥并放进环境变量(如 NOSTR_NSEC)。随后用 generateNewKey() 与一次 posttoNostr() 做最小验证,返回 success: true 且 published 大于 0 即安装生效。技能平台内的具体安装入口与版本以官方说明为准。
Q2:使用它收费吗?
技能详情未提及任何收费信息,本文不对价格作判断;nostr-sdk 为开源库(来源见技能给出的 GitHub 地址),网络层面依赖各公共中继,中继本身的可用性与规则以各中继官方说明为准。
Q3:NIP-4 和 NIP-17 私信怎么选?
需要兼容旧版客户端、场景不敏感时用 sendmessage()(NIP-4);需要最大隐私、隐藏发送者身份、使用现代加密时用 sendMessageNIP17()(礼物包裹 + 密封发送者 + NIP-44 + 临时密钥)。技能文档明确推荐 NIP-17,接收端则对应 getmessage() 与 getMessageNIP17() 两条监听路径。
Q4:私钥安全怎么保证?会不会泄露?
三条硬规矩:不把 nsec 提交到 git;存放在环境变量或安全保险库;不同用途使用不同密钥,测试用一次性密钥。技能文档还建议避免在代码中硬编码私钥,并在发布失败时通过 result.errors 排查,而不是打印密钥调试。
Q5:适合谁用?和成品客户端、自研方案怎么选? 适合需要把 Nostr 接入自动化流程的开发者与效率工具用户,例如机器人发帖、告警通知、私信客服、内容监控。若只是人工日常发帖阅读,现成客户端更省心;若需要协议级深度定制,可考虑自研;若要在「快速接入 + 可控成本」之间取平衡,本技能是更短的路径。