Direct Send 的工作原理
Direct Send 在后台使用模板机制。您可以提交最终文本或交互式内容,也可以引用现有效用模板,并让 YCloud 将其支持的组件转换为 Direct Send 消息。
Meta 会将您的消息内容与现有模板进行匹配。如果没有匹配项,Meta 会移除个人身份信息,检测语言,并在后台生成一个新模板供后续匹配的消息使用。
例如,“您的订单 A123456 已发货”和“您的订单 B789012 已发货”具有相同的结构。后续通知可以复用匹配生成的模板。
生成的模板会保留类别、质量和表现信息。即使模板不是您自行创建的,这也能让您识别出哪些内容表现良好,或者哪些内容导致了送达问题。
支持的功能与限制
使用资格与发送范围
将您的 WABA 和商业电话号码连接到 YCloud。在 Meta WhatsApp 管理工具 → 消息模板 中,检查您的企业是否符合 Direct Send 的使用资格。如果您的 WABA 无法使用该功能,请使用已获批的效用模板或联系 YCloud 查询资格。 效用 Direct Send 可以在 24 小时客户服务窗口期外发起预期的通知。请先征得客户的同意,并确保内容与他们的请求、交易、账户或符合条件的必要信息相关联。营销推广和验证码不在该效用工作流范围内。消息长度与按钮
以下发送示例使用文本页眉。文本消息不会显示 URL 预览。账户限制和吞吐量控制仍然适用。
自定义
interactive Direct Send 请求请使用文本页眉。仅当您转换支持的模板且 Meta 已为您的 WABA 启用该功能时,才可以使用图片页眉。
消息有效期 (TTL)
ttlSeconds 用于设置消息可保持有效待递送的时长。如果无法在该时间段内送达,消息将被丢弃。已送达的消息在其 TTL 过期时不会被删除。
默认值与允许的自定义范围有所不同。对于仅在 30 分钟内有效的送达更新,请设置
ttlSeconds: 1800;不要保留默认值。
支持的消息类型
以下格式涵盖通过 YCloud 发送的文本通知、链接和客户回复。
URL 按钮可打开网站。回复按钮将所选回复发送回您的业务系统,以便您的应用程序继续执行工作流。
处理回复按钮响应
虽然您发送的是interactive 请求,但 Direct Send 会以模板形式递送内容。因此,客户点击回复按钮时使用的是模板快捷回复格式:type: button,包含 button.payload 和 button.text。
YCloud 接收消息事件中的相关字段:
button.payload 识别操作,并使用 context.id 将回复与原始消息的 wamid 关联起来。请勿从 interactive.button_reply 读取此响应,那是普通的自由格式回复按钮格式。
通过 YCloud 发送
准备一个服务端 API 密钥以及 E.164 格式的发件人和收件人号码。仅当您选择提交消息样本时,才需要 WABA ID。1. 选择提交模式
sendDirectly 端点名称说明了提交时序。要使用 Direct Send,您的 WABA 必须具有相应权限,且请求中必须包含下方的 Direct Send 字段。
2. 构建请求
这些示例展示了如何同步提交完整内容。您也可以使用队列发送或转换现有的 Utility 模板。发送前请替换电话号码占位符和示例 URL。
- 文本
- URL 按钮
- 回复按钮
3. 追踪送达状态
保存返回的消息id、您的 externalId 以及可用的 wamid。通过 whatsapp.message.updated 接收更新,或查询 GET /v2/whatsapp/messages/{id}。
在 accepted 之后,发送结果为 sent 或 failed。成功的消息可以继续流转至 delivered 和 read。请求被接收并不等同于送达回执。
对于同步提交错误,请在存在时检查 error.whatsappApiError。对于排队的消息,请检查后续的状态更新。如果请求超时,请在重试之前先对账原始消息。
转换现有的 Utility 模板
使用 WABA 中的现有 Utility 模板。设置type: "template" 和 useDirectSend: true。提供模板名称、语言以及每个必需的参数。YCloud 会替换变量,并通过 category: "utility" 将支持的组件转换为文本或交互式内容。模板必须符合下方的转换限制。YCloud 进行此转换不要求 APPROVED 状态。
如果模板包含图片页眉,请在使用前确认 Meta 已为您的 WABA 启用了带图片页眉的 Direct Send 功能。这需要单独的 Meta 权限。
在本示例中,使用一个名为 order_update 的现有效用模板,正文为 Your order {{1}} has been updated.,且不含页眉、页脚或按钮:
type 变为 text,模板变量变为提供的订单 ID:
accepted 响应并不代表确认送达。请存储消息 id 并追踪 whatsapp.message.updated 事件。在复用包含页眉或按钮的模板之前,请查阅下方的转换限制。
如果 YCloud 返回 WHATSAPP_DIRECT_SEND_UNSUPPORTED_COMPONENT,请对照下方的限制检查模板的页眉、按钮以及未解析的变量。如果 WABA 无法使用 Direct Send,请在重试前检查其资格,或者通过常规模板工作流发送已批准的 Utility 模板。
设置消息生命周期
对于模板转换,请求中的ttlSeconds 值优先于模板 TTL。如果您省略该值,YCloud 会继承最多 43200 秒的正模板 TTL。低于 30 秒的模板 TTL 会导致验证失败,因此请使用有效的请求值覆盖它。YCloud 不会继承高于 43200 的模板 TTL 值。如果两者均不适用,Meta 将使用其默认 TTL。
为 Utility Direct Send 模板命名
上述转换请求中的template.name 用于标识现有模板。templateName 用于不同的目的:当您希望 Meta 为 Utility Direct Send 模板复用可识别的名称时进行设置。该字段为可选字段,本身不会启用 Direct Send。您还必须设置 useDirectSend: true 或 category: "utility"。
400,目标为 templateName,消息为 A template with the same name already exists.。重试前请选择其他名称。
Authentication Direct Send 不支持 templateName。对于排队的 Utility Direct Send 消息,YCloud 会返回验证错误且不返回消息 ID,而在其他情况下会将名称转发给 Meta,而不会将其存储在消息记录中。对于不使用 Direct Send 的消息,YCloud 会忽略该字段。
模板转换与语言限制
Utility Direct Send 支持文本、CTA URL 按钮和回复按钮。当 YCloud 转换实用模板时,以下限制同样适用:
请勿将 CTA URL 和快速回复按钮混合使用。其他页眉和按钮类型无法转换。不支持的组件或未解析的模板变量将返回 HTTP
400 及代码 WHATSAPP_DIRECT_SEND_UNSUPPORTED_COMPONENT。
语言支持
Direct Send 支持 WhatsApp 模板语言,以下除外:
请在 Direct Send 工作流中使用受支持的语言。
在 YCloud 中查看由 Direct Send 生成的模板
- 在 YCloud 控制台中打开 WhatsApp Manager → 模板 。
- 选择用于发送消息的 WABA。
- 设置 创建者 → 自动生成。使用 类别 → 实用 将列表筛选为 Utility 模板。
- 查看模板的名称、类别、语言、状态和最后更新时间。点击其名称或 数据分析 打开其预览和效果详情。

Set Creator to Auto generated. This test WABA has no matching generated templates.
auto_generated 开头。请使用 自动生成 筛选器来识别它们,而不是仅依赖其名称。
洞察页面会显示所选时段内的消息预览以及可用的送达、失败、已读和互动统计数据。在排查警告或已暂停的模板时,请结合模板的状态和内容一起分析。
生成的模板无法手动编辑或删除。如需更改通知,请在发送请求中更改内容;Meta 随后会针对该内容匹配或生成模板。
合规与内容指南
保持 Utility 内容明确且非促销性
Utility 消息应当跟进客户预期的操作或提供符合要求的关键信息。请清楚说明相关订单、预约、账户或交易。
将
category 改为 utility 并不会改变内容的含义。Meta 会在发送后继续评估生成的模板。在发送之前,您可以使用消息样本对实质上不同的用例进行检查。
使用消息样本检查新用例(可选)
POST /v2/whatsapp/messages/{wabaId}/messageSamples 会向 Meta 提交一个示例并返回 Meta 检测到的类别。它不会向客户发送消息。此检查是可选的;您无需针对每条消息或在使用 Direct Send 之前都调用它。对于新的 Utility 用例,我们建议检查三到四个代表性样本,每次请求一个。
将 WABA_ID 替换为您的 WhatsApp 商业账户 ID,并在您的环境中设置 YCLOUD_API_KEY。在样本中使用虚构的客户详细信息:
category。如果 Meta 检测到 MARKETING 或 AUTHENTICATION,请修改内容或使用相应的消息发送工作流。对于按钮样本,请提交上述发送示例中的 type 和 interactive 字段;省略接收者和发送字段。
区分暂停的模板与账户限制
模板可能会因质量过低而被暂停。与之匹配或非常相似的消息随后可能会失败并返回 Meta 错误132015。请在 YCloud 中找到受影响的模板,检查其内容和状态,并在恢复该通知之前解决问题根因。
多次滥用类别可能会限制整个 WABA 的 Direct Send 功能:
请遵循账户通知了解生效的限制及其到期时间。单个模板复审成功不会自动解除账户级别的限制。
接收 YCloud 通知
如果您希望接收类别检测通知,请通过您的 Webhook 端点订阅
whatsapp.template.correct_category_detection。它不是对 messageSamples 的响应,也不会针对每条消息都触发。在事件的 whatsappTemplate 中,对比 previousCategory 与 category。例如,previousCategory: "UTILITY" 与 category: "MARKETING" 意味着 Meta 在 Utility Direct Send 模板中识别出了营销内容。在再次发送类似消息之前,请审查相关内容。使用 whatsapp.message.updated 单独跟踪送达情况。
来自 YCloud 账户限制事件的相关字段:
violationType 获取原因,并查看 restrictions[].expiration 获取其到期时间(如果提供)。
申请对类别判定进行复审
如果您认为内容被错误标记,请前往 Meta 业务支持中心 → WhatsApp 账户 → Direct Send 模板更新 → 可申请复审。选择受影响的模板,然后选择 申请复审。 请在收到通知后 60 天内提交申诉。每个被标记的模板只能申诉一次。您可以跟踪结果状态,如 In review、 Reversed 或 Unchanged。如果申诉选项不可用,请联系 YCloud 并提供 WABA ID、模板名称或 ID、语言以及通知详情。Direct Send 常见问题
发送前是否需要模板名称?
发送前是否需要模板名称?
自定义内容不需要。只需提供完整的消息,由 Meta 来匹配或生成模板。如需转换现有的 Utility 模板,请提供其
template.name 并设置 useDirectSend: true。可选字段 templateName 用于命名 Utility Direct Send 模板,并非用于选择现有模板。为什么 Direct Send 仍会生成模板?
为什么 Direct Send 仍会生成模板?
模板支持类别和质量审核、效果报告以及问题排查。Direct Send 只是免去了手动创建模板的麻烦,并未取消消息背后的基于模板的处理流程。
我可以在 24 小时客户服务窗口之外发送消息吗?
我可以在 24 小时客户服务窗口之外发送消息吗?
可以,适用于符合条件的 Utility Direct Send 通知。您的 WABA 必须具备相应权限,客户必须期望接收该消息,且内容必须符合 Utility 要求。普通的自由格式客服消息仍需要有效的服务窗口。
为什么消息发送成功后生成的模板才出现?
为什么消息发送成功后生成的模板才出现?
模板生成和同步是异步进行的,可能会在消息发送之后完成。完成后,选择正确的 WABA 并使用 Auto generated 筛选器查看。
未使用的已生成模板如何清理?
未使用的已生成模板如何清理?
Meta 会在 24 小时后删除从未用于发送的已生成模板。之前使用过的模板在闲置一段时间后可能会被归档。您无需手动删除它们。
设置为 utility 能否保证 Meta 一定接受该类别?
设置为 utility 能否保证 Meta 一定接受该类别?
不能。Meta 会根据实际内容进行评估。请删除 Utility 通知中的促销措辞;如果正当的 Utility 消息被错误标记,请使用申诉流程。
Direct Send 如何计费?
Direct Send 如何计费?
Utility 消息遵循与手动创建的 Utility 模板相同的 Utility 消息定价规则。请参阅 WhatsApp 定价。

