OpenClaw小红书Skill开发入门:从零搭建你的第一个技能插件

1次阅读
没有评论

共计 2692 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

背景解析:小红书 Skill 平台的定位与典型应用场景

小红书 Skill 平台是小红书开放给开发者的一种能力接入方式,主要服务于电商导购和内容互动两大场景。通过 Skill 插件,开发者可以把自己的服务能力直接嵌入到小红书的聊天场景中,比如商品推荐、内容问答、服务预约等。

OpenClaw 小红书 Skill 开发入门:从零搭建你的第一个技能插件

  • 电商导购场景 :适合有商品库存的商家,用户可以通过聊天直接查看商品、下单购买,形成闭环交易
  • 内容互动场景 :适合内容服务提供者,用户可以通过自然语言查询获取结构化内容,比如天气、菜谱、旅游攻略等

开发准备:企业资质认证与沙箱环境

在开始开发前,需要完成企业资质认证和沙箱环境配置。

  1. 访问 OpenClaw 开发者平台,注册企业账号
  2. 提交企业营业执照、法人身份证等资质文件
  3. 等待 1 - 3 个工作日的审核
  4. 审核通过后,进入开发者后台创建 Skill
  5. 获取 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: ['天气', '北京'] // 白名单
  });
}

避坑指南

调试工具链配置

  1. 使用 ngrok 等工具暴露本地服务
  2. 配置 Webhook URL 为你的 ngrok 地址
  3. 使用小红书开发者工具模拟消息推送
  4. 查看实时日志定位问题

常见审核被拒原因

  • 功能描述不清晰
  • 未正确处理用户授权
  • 内容包含敏感信息
  • 性能不达标 (响应时间 >2s)
  • 未提供隐私政策链接

总结

通过这个天气查询 Skill 的完整实现,我们走通了小红书 Skill 开发的核心流程。实际开发中还需要考虑更多细节,比如错误处理、日志记录、监控报警等。

完整的示例代码已上传 GitHub:
https://github.com/example/openclaw-weather-skill

这个仓库包含一键部署脚本和详细的配置说明,希望对你的开发有所帮助。如果在接入过程中遇到问题,可以参考小红书的官方文档或加入开发者社区讨论。

正文完
 0
评论(没有评论)