mcpField
W
whatsapp-cloud-api

whatsapp-cloud-api

github.com/bellopushon开发15661 次安装17 周前更新
代码仓库

关于 whatsapp-cloud-api

whatsapp-cloud-api 是面向 WhatsApp Cloud API 开发的技能,供构建消息功能和处理 webhook 的开发者参考。它汇集消息类型、会话窗口、号码共存、错误处理及实现规范。

主要功能

  1. 01发送文本、媒体、模板和交互消息
  2. 02处理来信及状态更新 webhook
  3. 03说明 24 小时会话窗口规则
  4. 04支持 Business App 与 Cloud API 共存
  5. 05提供错误码与重试处理建议
  6. 06涵盖 E.164 号码和速率限制

适用场景

  1. 01开发 WhatsApp 消息发送功能
  2. 02接收并处理消息及状态 webhook
  3. 03在会话窗口结束后发送模板消息
  4. 04让同一号码同时用于 Business App 与 API

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bellopushon/whatsapp-cloud-api --skill whatsapp-cloud-api

安装后在 Claude Code 中输入/whatsapp-cloud-api确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
COEXISTENCE.md
CONVERSATIONS.md
ERROR-CODES.md
INTERACTIVE.md
MEDIA.md
MESSAGING.md
PHONE-NUMBERS.md
TEMPLATES.md
WEBHOOKS.md

详细介绍

WhatsApp Cloud API

使用场景

在以下情况下启用此技能:

  • 构建或修改 WhatsApp 消息功能
  • 发送消息(文本、媒体、模板、交互式消息)
  • 处理来自 WhatsApp 的传入 Webhook
  • 使用模板消息或会话窗口
  • 处理电话号码格式(E.164)
  • 调试 WhatsApp API 错误或状态更新
  • 实现消息状态跟踪(已发送、已送达、已读)
  • 在 WhatsApp Business App 和 Cloud API 上同时运行一个号码(共存)

快速参考

项目值
基础 URLhttps://graph.facebook.com/v21.0
发送消息POST /{phone-number-id}/messages
上传媒体POST /{phone-number-id}/media
身份验证Authorization: Bearer {access-token}
必填字段"messaging_product": "whatsapp"
电话号码格式E.164:+{country}{number}(例如,+18091234567)
速率限制每秒 80 条消息(Cloud API)

核心 API — 发送消息

所有消息都通过同一个端点发送:

POST https://graph.facebook.com/v21.0/{phone-number-id}/messages
Authorization: Bearer {access-token}
Content-Type: application/json

响应:

{
  "messaging_product": "whatsapp",
  "contacts": [{ "input": "+16505555555", "wa_id": "16505555555" }],
  "messages": [{ "id": "wamid.HBgL..." }]
}

消息类型

类型type 字段详情
文本text纯文本,最多 4096 个字符,支持 URL 预览
图片imageJPEG/PNG,最大 5MB,可选说明文字
视频videoMP4,最大 16MB,可选说明文字
音频audioAAC/MP3/OGG,最大 16MB
文档document任意格式,最大 100MB,可选文件名
贴图stickerWebP,静态 100KB / 动态 500KB
位置location纬度、经度、名称、地址
联系人contacts结构化联系人卡片
表情回应reaction对消息的表情回应
交互式消息interactive按钮、列表、商品
模板template预先批准的消息模板

完整规范和代码示例请参阅 references/MESSAGING.md。

Webhook

你的服务器会收到有关传入消息和状态更新的 POST 请求。

传入消息结构:

{
  "object": "whatsapp_business_account",
  "entry": [{
    "changes": [{
      "value": {
        "messaging_product": "whatsapp",
        "metadata": { "phone_number_id": "ID", "display_phone_number": "NUM" },
        "contacts": [{ "profile": { "name": "John" }, "wa_id": "16315551234" }],
        "messages": [{
          "from": "16315551234",
          "id": "wamid.ABC...",
          "timestamp": "1683229471",
          "type": "text",
          "text": { "body": "Hello" }
        }]
      },
      "field": "messages"
    }]
  }]
}

状态更新类型: sent → delivered → read | failed

有关 Webhook 验证、负载解析和所有状态类型,请参阅 references/WEBHOOKS.md。

会话窗口

  • 客户向你发送消息后,会开启一个 24 小时服务窗口
  • 在窗口内:可自由发送任何类型的消息(服务消息免费)
  • 在窗口外:只能发送模板消息(按条付费)
  • 没有用于“关闭”会话的 API 端点——窗口会自动过期
  • 模板消息会按类别(营销、实用、身份验证)开启各自的 24 小时窗口

有关完整生命周期、定价和类别规则,请参阅 references/CONVERSATIONS.md。

共存

在 WhatsApp Business App 和 Cloud API 上同时运行同一个号码——企业可以继续通过应用聊天,同时通过 API 进行集成。

  • 通过定制的 Embedded Signup 流程(featureType: "whatsapp_business_app_onboarding")接入,而非标准注册流程
  • 接入时会一次性同步过往消息(history,最多 180 天)和联系人(smb_app_state_sync)
  • 企业通过应用发送的消息会通过 smb_message_echoes 镜像到你的 Webhook
  • 通过应用发送的消息免费;共存号码的上限为每秒 20 条消息
  • 聊天记录会保留;模板消息和 24 小时窗口仍然适用

有关接入、同步、状态检查和 Webhook 负载,请参阅 references/COEXISTENCE.md。

常见模式

发送文本消息
{
  "messaging_product": "whatsapp",
  "to": "+18091234567",
  "type": "text",
  "text": { "body": "Hello! How can we help you?" }
}
发送模板消息
{
  "messaging_product": "whatsapp",
  "to": "+18091234567",
  "type": "template",
  "template": {
    "name": "hello_world",
    "language": { "code": "en_US" }
  }
}
将消息标记为已读
{
  "messaging_product": "whatsapp",
  "status": "read",
  "message_id": "wamid.HBgL..."
}

错误处理

代码错误操作
131030收件人未使用 WhatsApp发送前验证号码
131047需要重新互动先发送模板消息
131050用户已停止接收营销消息尊重退订选择,仅发送服务类/实用类消息
131056触发配对速率限制降低发送速度,实现退避机制
130429超出速率限制将消息加入队列,每秒最多发送 80 条

如需查看完整错误参考和重试策略,请参阅 references/ERROR-CODES.md。

最佳实践

  1. 始终使用 E.164 电话号码格式 — +{country}{number},不含空格或连字符
  2. 验证 Webhook — 使用 hub.challenge 值响应 GET 挑战
  3. 立即对 Webhook POST 返回 200 — 异步处理
  4. 存储 wamid ID — 回复、添加表情反应和已读回执时需要
  5. 24 小时窗口过期后,使用模板消息重新互动
  6. 处理幂等性 — Webhook 可能会多次传递同一事件
  7. 检查 wa_id 与输入值是否一致 — API 会规范化电话号码;wa_id 是规范值
  8. 留意速率限制 — Cloud API 每秒最多发送 80 条消息;实现队列和退避机制

参考资料

评论

支持 Markdown