用途:把 wapi(自托管 WhatsApp REST API,与 WasenderAPI 线兼容)集成进 Next.js 应用,实现发消息、读联系人与群组、接收 webhook。基础地址 https://api.wapi.crafter.run,接口文档见 /docs,OpenAPI 规范见 /openapi.json。
主要能力:单一 POST /api/send-message 端点按所设字段决定消息类型(文本、图片、文档等),发群组用群 JID(…@g.us);支持表情回应与取消(wapi 扩展);媒体按 URL 服务端拉取,未托管文件可先 POST /api/upload;可读取联系人、群组、状态;支持 webhook 接收消息。
使用方式:凭证分两类,均放 Authorization: Bearer 头且不可互换——会话 API key 用于消息、联系人、群组、媒体、状态;个人访问令牌(PAT)用于会话、代理、密钥管理。用错返回 403 而非 401。密钥只能放服务端,环境变量不加 NEXT_PUBLIC_ 前缀,客户端触发发送应走 Server Action 或 Route Handler。SDK 通过 npx giget@latest gh:crafter-station/wapi/sdk/typescript/src src/wapi 引入,并复制 references/wapi-server.ts 到 src/lib/wapi.ts。webhook 需先验签,默认签名为明文字符串比较(X-Webhook-Signature 携带密钥本身),也支持按会话开启 HMAC-SHA256;须快速返回 200,否则会重试导致重复投递。
适用场景:在 Next.js 中构建 WhatsApp 消息通知、群组与联系人管理、webhook 事件处理。
限制:构建期可用沙箱会话(自配对、无需扫码),但沙箱忽略 account_protection 发送节流(生产每次发送等待五秒),decrypt-media 返回固定 PNG,不要据此调优重试或计时逻辑;上线前须换成真实会话。发送超时不代表未发出,应用 wapi.messages.info(msgId) 核对而非盲目重发。分页须用 contacts.page()/groups.page(),不能用 list()。src/wapi/ 为内置副本不会自动更新,需重跑 giget。从 WasenderAPI 迁移时其 npm 客户端可原样使用,基础 URL 作为第三个参数传入。其余细节暂未提供。