共计 2692 个字符,预计需要花费 7 分钟才能阅读完成。
背景解析:小红书 Skill 平台的定位与典型应用场景
小红书 Skill 平台是小红书开放给开发者的一种能力接入方式,主要服务于电商导购和内容互动两大场景。通过 Skill 插件,开发者可以把自己的服务能力直接嵌入到小红书的聊天场景中,比如商品推荐、内容问答、服务预约等。

- 电商导购场景 :适合有商品库存的商家,用户可以通过聊天直接查看商品、下单购买,形成闭环交易
- 内容互动场景 :适合内容服务提供者,用户可以通过自然语言查询获取结构化内容,比如天气、菜谱、旅游攻略等
开发准备:企业资质认证与沙箱环境
在开始开发前,需要完成企业资质认证和沙箱环境配置。
- 访问 OpenClaw 开发者平台,注册企业账号
- 提交企业营业执照、法人身份证等资质文件
- 等待 1 - 3 个工作日的审核
- 审核通过后,进入开发者后台创建 Skill
- 获取 AppID 和 AppSecret,这是后续 API 调用的凭证
沙箱环境配置要点:
- 沙箱环境与生产环境完全隔离
- 需要单独申请沙箱环境的测试权限
- 沙箱环境的 API 调用有频率限制 (100 次 / 分钟)
- 建议使用专门的测试账号进行调试
核心开发:构建 Webhook 服务
下面我们以一个天气查询 Skill 为例,展示核心开发流程。
1. 使用 Express 构建 Webhook 服务
import express from 'express';
import jwt from 'jsonwebtoken';
import bodyParser from 'body-parser';
const app = express();
app.use(bodyParser.json());
// JWT 验证中间件
const verifyToken = (req, res, next) => {const token = req.headers['authorization']?.split(' ')[1];
if (!token) return res.status(401).send('Unauthorized');
try {const decoded = jwt.verify(token, process.env.APP_SECRET);
req.user = decoded;
next();} catch (err) {return res.status(401).send('Invalid token');
}
};
app.post('/webhook', verifyToken, (req, res) => {
// 处理小红书推送的事件
console.log(req.body);
res.json({code: 0, message: 'success'});
});
app.listen(3000, () => {console.log('Server running on port 3000');
});
2. 解析用户意图
小红书推送的用户查询数据结构如下:
interface UserQuery {
query: string; // 用户原始输入
intent: {
name: string; // 意图名称
confidence: number; // 置信度
};
entities: Array<{
type: string; // 实体类型
value: string; // 实体值
start: number; // 在 query 中的起始位置
end: number; // 在 query 中的结束位置
}>;
}
// 示例处理函数
function handleWeatherQuery(query: UserQuery) {const city = query.entities.find(e => e.type === 'city')?.value || '北京';
// 调用天气 API 获取数据
return fetchWeather(city);
}
3. 生成交互式卡片
小红书支持多种卡片类型,这里展示一个天气卡片示例:
function createWeatherCard(weatherData) {
return {
"type": "vertical",
"elements": [
{
"type": "text",
"content": `${weatherData.city} 天气 `,
"style": {
"font_size": "large",
"bold": true
}
},
{
"type": "horizontal",
"elements": [
{
"type": "text",
"content": `🌡️ ${weatherData.temp}°C`
},
{
"type": "text",
"content": `💧 ${weatherData.humidity}%`
}
]
}
]
};
}
生产级优化方案
1. 接口幂等性保障
处理重复请求是生产环境必须考虑的问题。小红书会为每个事件生成唯一的 deduplication_id:
const processedIds = new Set();
app.post('/webhook', verifyToken, (req, res) => {const { deduplication_id} = req.body;
if (processedIds.has(deduplication_id)) {return res.json({ code: 0, message: 'duplicate request'});
}
processedIds.add(deduplication_id);
// 正常处理逻辑
});
2. 敏感词过滤
小红书对内容有严格的合规要求,必须实现敏感词过滤:
import * as sensitiveWords from 'sensitive-words-filter';
function filterContent(content: string) {
return sensitiveWords.filter(content, {
replacement: '*',
exclude: ['天气', '北京'] // 白名单
});
}
避坑指南
调试工具链配置
- 使用 ngrok 等工具暴露本地服务
- 配置 Webhook URL 为你的 ngrok 地址
- 使用小红书开发者工具模拟消息推送
- 查看实时日志定位问题
常见审核被拒原因
- 功能描述不清晰
- 未正确处理用户授权
- 内容包含敏感信息
- 性能不达标 (响应时间 >2s)
- 未提供隐私政策链接
总结
通过这个天气查询 Skill 的完整实现,我们走通了小红书 Skill 开发的核心流程。实际开发中还需要考虑更多细节,比如错误处理、日志记录、监控报警等。
完整的示例代码已上传 GitHub:
https://github.com/example/openclaw-weather-skill
这个仓库包含一键部署脚本和详细的配置说明,希望对你的开发有所帮助。如果在接入过程中遇到问题,可以参考小红书的官方文档或加入开发者社区讨论。
正文完
