什么是消息
WhatsApp Messages API 用于通过已连接的 WhatsApp 商业电话号码发送模板、文本、图片、视频、音频、文档、贴纸、位置、交互式、联系人和表情回复消息。准备工作
- 将您的 YCloud API 密钥保存在
YCLOUD_API_KEY中。 - 将 WhatsApp 商业账户和电话号码关联至 YCloud。
- 准备好 E.164 格式的发件人电话号码,以及收件人电话 号码、BSUID 或父级 BSUID。
- 对于普通的模板发送,请使用
APPROVED模板。 - 当消息引用 YCloud 媒体 ID 时,请先上传媒体文件。
运作方式
根据 YCloud 应在何时将消息提交给 WhatsApp Business API 来选择端点。
这两个端点都会返回一个 YCloud 消息对象。初始响应并不确认最终送达状态。后续的状态变更会通过
whatsapp.message.updated Webhook 发送。
发送您的第一条消息
选择已连接 WABA 名下已获批准的模板。将发送者、接收者、模板名称和语言替换为您自己的值,然后发送:id 并关注其 whatsapp.message.updated 事件。返回 accepted 响应仅表示请求已进入处理流程,并不代表客户已收到消息。如果您需要送达追踪和客户回复,请同时配置 whatsapp.message.updated 和 whatsapp.inbound_message.received。
选择模板消息或会话消息
在客户服务窗口之外发送常规的企业主动发起的日常消息时,请使用已获批准的模板。在处于打开状态的窗口内,请使用受支持的自由格式消息类型,例如文本、媒体或交互式回复。 在发送时检查客户服务窗口规则。计费窗口并不能取代发消息资格。有关当前费用和入口点条件,请参阅WhatsApp 定价。用于效用内容的 Direct Send
Direct Send 可以提交符合条件的实用性(utility)内容,或转换现有的实用性模板。它适用于任一发送端点。sendDirectly 端点控制同步提交;它本身不会启用 Direct Send。
请遵循Direct Send 最佳实践,了解适用资格、请求、模板转换、配额限制以及账户事件相关内容。
选择最佳发送时间
将发送时间与消息目的以及接收者的当地时间相匹配。- 立即发送 OTP 及其他时效性消息。使用
当您的工作流程需要提交时使用
POST /whatsapp/messages/sendDirectly结果后再继续。 - 在相关事件发生时发送交易类更新,例如付款、 发货或预约变更。
- 在接收者所在时区的合理时间段安排发送营销消息。 利用您自己的送达、阅读和转化数据来测试不同的时间段 针对不同的受众群体进行分析,而不是假设存在一个普适的最佳时间段。
- 面向小规模受众群体启动定时活动。检查送达情况, 响应和退订结果,然后再发送给受众的其他人员。
- 在消息延迟时避免重复发送。存储
externalId并处理 在决定是否重试之前whatsapp.message.updatedWebhook。
请求
选择上面的任一端点,然后使用与消息类型匹配的请求体。from 的值是您已绑定的 WhatsApp 商业电话号码。使用 E.164 格式的 to 或设置为 BSUID 或父级 BSUID 的 recipient 来指定收件人。
常用请求字段
请至少提供
to 或 recipient 之一。如果两者均包含,YCloud 将使用 to 并忽略 recipient。
一键登录 (One-tap)、零点击登录 (zero-tap) 以及复制代码 (copy-code) 身份验证模板需要提供电话
号码。对于这些模板类型,请使用
to。请求示例
模板消息
模板消息
文本消息
文本消息
图片消息
图片消息
视频消息
视频消息
音频消息
音频消息
文档消息
文档消息
贴纸消息
贴纸消息
位置消息
位置消息
互动消息
互动消息
联系人消息
联系人消息
Reaction 消息
Reaction 消息
添加模板变量
请将模板名称、语言和参数顺序与您已获批的模板保持一致。 对于包含客户姓名和订单参考编号参数的正文,请发送:回复特定消息
将context.message_id 设置为原始 WhatsApp 消息 ID(wamid)以创建引用回复。请继续确保客户服务窗口处于打开状态。
应用退订和屏蔽过滤器
对于POST /whatsapp/messages,当您需要应用 YCloud 抑制列表时,请设置 filterUnsubscribed: true 和 filterBlocked: true。两者的默认值均为 false,且不适用于 sendDirectly。
检查状态 Webhook 中的 whatsappMessage.errorCode 是否为 RECIPIENT_UNSUBSCRIBED 或 RECIPIENT_IN_BLOCK_LIST。不要期望会有单独的 filtered 状态。在使用 sendDirectly 之前,请在您的应用程序中实施退订/屏蔽过滤。
使用 externalId 将消息与订单或其他内部记录相关联。
它是一个关联字段,并非服务端幂等性键。
响应
成功的响应将返回 YCloud 消息对象。初始的status: accepted 表示 YCloud 已接受该发送请求。这并不意味着 Meta 已发送该消息,也不意味着消息已送达 WhatsApp 用户。
响应示例
响应字段
送达状态
订阅whatsapp.message.updated Webhook 以接收后续的状态变更,例如 sent、failed、delivered 或 read。
当您需要直接获取消息时,请使用 GET /whatsapp/messages/{id}。
限制和故障排除
- 普通的模板发送需要
APPROVED模板;ARCHIVED模板 无法作为普通消息模板发送。 - 在没有幂等策略的情况下,请勿重试已被接受的请求。重复的 请求可能会发送重复的消息。
- 在以下情况下使用 YCloud
id、wamid、externalId以及 Webhook 状态: 排查送达情况。 - 当直接请求到达 Meta 且被 Meta 拒绝时,请检查
whatsappApiError它。
直接发送最佳实践
发送实用内容、转换模板,并监控类别和限制事件。
生产最佳实践
设计状态同步、有界重试、同意检查、媒体复用,
以及生产环境集成的吞吐量控制。
使用企业范围的用户 ID
通过 BSUID 发送消息和发起通话、请求电话号码、管理 Meta 通讯录
条目,并处理 BSUID Webhook 字段。

