📱 WhatsApp Cloud API
WhatsApp 通过 Meta 的 Cloud API 连接 — 这是官方的、提供免费层级的 API,让您可以从自己的服务器发送和接收 WhatsApp 消息。不 需要第三方 BSP(商业解决方案提供商)。
前提条件
- 在 developers.facebook.com 上的 Meta 开发者账户
- 一个 Meta Business 账户(又称 Business Manager)
- 一个用于 WhatsApp 的电话号码,且该号码未在个人 WhatsApp 上注册(您可以使用 SIM 卡、虚拟号码或固定电话)
设置步骤
1. 创建 Meta 应用
- 前往 developers.facebook.com/apps
- 点击 Create App
- 选择 Business 类型
- 填写名称并连接您的 Business 账户
2. 添加 WhatsApp 产品
- 在您的应用面板中,滚动到 Add Products to Your App
- 在 WhatsApp 上点击 Set Up
- 选择您的 Business 账户
3. 获取您的凭据
在应用面板中导航至 WhatsApp → API Setup:
| 凭据 | 在哪里找到 |
|---|---|
| Phone Number ID | 在 "From" 部分列出 — 一个数字 ID,如 123456789012345 |
| Access Token | 此页面上显示的临时令牌。对于生产环境,请通过 System Users 生成永久令牌。 |
| App Secret | 应用面板 → Settings → Basic → App Secret |
| Verify Token | 您自己设定的字符串 — 任何随机字符串,例如 my_secret_verify_token_2024 |
4. 在 PulseHub 中添加渠道
- 前往渠道 → 添加渠道
- 选择 WhatsApp
- 填写所有四个字段
- 点击保存渠道
- 复制渠道卡片上显示的 Webhook URL
5. 在 Meta 中配置 Webhook
- 在您的 Meta 应用中,前往 WhatsApp → Configuration
- 点击 Webhook 部分旁边的 Edit
- Callback URL: 粘贴您的 PulseHub webhook URL
- Verify Token: 输入您在 PulseHub 中设置的相同字符串
- 点击 Verify and Save
Meta 将向您的 webhook URL 发送 GET 请求,带有 ?hub.mode=subscribe&hub.verify_token=...&hub.challenge=...。PulseHub 验证令牌并回传 challenge。
- 在 Webhook Fields 下,订阅:messages
6. 测试
向您的商务号码发送 WhatsApp 消息。它应该在几秒钟内作为新对话出现在 PulseHub 的收件箱中。
签名验证
Meta 在每个 webhook 中包含 X-Hub-Signature-256 头:
X-Hub-Signature-256: sha256=abc123...
PulseHub 使用您的 App Secret 通过 HMAC-SHA256 进行验证。如果验证失败,webhook 返回 401 Signature mismatch。
发送消息
当客服从收件箱发送回复时,PulseHub 调用 WhatsApp Cloud API:
POST https://graph.facebook.com/v18.0/{phone_number_id}/messages
Authorization: Bearer {access_token}
{
"messaging_product": "whatsapp",
"to": "{recipient_phone}",
"type": "text",
"text": {"body": "您的回复内容"}
}
生产环境访问
默认的 Meta 应用处于 Development 模式 — 只能向添加为测试号码的 号码发送消息。要上线:
- 在 Meta Business Manager 中完成商业验证
- 提交您的 WhatsApp 使用场景进行 Meta 审核
- 获批后,您的应用将获得向所有 WhatsApp 用户发送消息的权限
常见问题
| 症状 | 可能原因 |
|---|---|
| webhook 设置期间验证失败 | PulseHub 中的 verify_token 与您在 Meta 中输入的不匹配 |
| 日志中的签名不匹配错误 | app_secret 错误 — 从 App Settings → Basic 复制,而非从 API Setup |
| 消息未到达 | Meta 面板中未订阅 webhook 字段 messages |
发送时 Invalid phone number | 号码格式必须为 E.164 不带 +(例如 15551234567) |
| Development 模式应用错误 | 只有已验证的测试号码才能在 dev 模式下接收消息 |