WhatsApp 消息模板是特定的消息格式,商家可以利用它们向订阅通知的用户发送通知或客服消息。消息可以包括预约提醒、配送信息、问题解决方案或支付更新。
在发送模板消息之前,您需要先创建一个模板。详情请参阅为 WhatsApp Business 商业帐号创建消息模板。如果您的帐户尚未通过验证,您可以使用我们任一预先批准的模板。
目前,您可以发送以下模板类型:
您必须使用访问口令对本指南中提及的所有 API 调用进行身份验证。开发者可以使用在应用面板 > WhatsApp > API 设置面板中生成的访问口令验证 API 调用。解决方案合作伙伴必须使用具有 whatsapp_business_messaging
权限的访问口令验证自身身份。
新创建或未暂停的营销模板都必须受到模板调控。请参阅模板调控。
如要发送基于文本的消息模板,请对 /PHONE_NUMBER_ID/messages
发起 POST
调用,并附加包含 type=template
的消息对象。然后,添加一个 template
对象。
请求示例:
curl -X POST \
'https://graph.facebook.com/v19.0
/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "PHONE_NUMBER",
"type": "template",
"template": {
"name": "TEMPLATE_NAME",
"language": {
"code": "LANGUAGE_AND_LOCALE_CODE"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "text-string"
},
{
"type": "currency",
"currency": {
"fallback_value": "VALUE",
"code": "USD",
"amount_1000": NUMBER
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "DATE"
}
}
]
}
]
}
}'
如果请求成功,响应返回的对象包含以 wamid 为前缀的标识符。使用 wamid 后列出的编号追踪消息状态。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
如要发送基于媒体的消息模板,请对 /PHONE_NUMBER_ID/messages
发起 POST
调用,并附加包含 type=template
的消息对象。然后,添加一个 template
对象。支持媒体 HTTP 缓存。
向 WhatsApp Business 电话号码 > 消息端点发送 POST 请求,以发送基于媒体的模板消息。将 type
属性设为 template
,然后使用 template
属性定义模板对象及其媒体对象。
在定义媒体对象时,您可以向我们的服务器上传媒体素材,然后使用素材的媒体编号(使用 id
属性),或在您的服务器上托管素材,然后使用素材的网址(使用 link
属性)。如果使用 link
属性,素材必须位于可公开访问的服务器上,否则消息将发送失败。
为减少出现错误的可能性,避免向您的公共服务器发送不必要的请求,建议您上传媒体素材并在发送消息时使用媒体素材编号。
还支持缓存媒体素材。请参阅媒体 HTTP 缓存。
请求示例:
curl -X POST \
'https://graph.facebook.com/v19.0
/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "PHONE_NUMBER",
"type": "template",
"template": {
"name": "TEMPLATE_NAME",
"language": {
"code": "LANGUAGE_AND_LOCALE_CODE"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": "https://URL"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "TEXT-STRING"
},
{
"type": "currency",
"currency": {
"fallback_value": "VALUE",
"code": "USD",
"amount_1000": NUMBER
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "MONTH DAY, YEAR"
}
}
]
}
]
}
}'
如果请求成功,响应返回的对象包含以 wamid 为前缀的标识符。使用 wamid 后列出的编号追踪消息状态。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
互动消息模板在标准消息模板和媒体消息模板类型的基础上,增加了允许向收信人发送的内容,其中包括使用组件对象的互动按钮。共有两种预定义的按钮类型:
这些按钮可以附加到文本消息或媒体消息中。在您创建互动消息模板并且这些模板经过批准后,您可以将其用于通知消息,以及客服消息。
如要发送互动消息模板,请对 /PHONE_NUMBER_ID/messages
发起 POST
调用,并附加包含 type=template
的消息对象。然后,添加一个包含所选 button
的 template
对象。
请求示例:
curl -X POST \
'https://graph.facebook.com/v19.0
/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "PHONE_NUMBER",
"type": "template",
"template": {
"name": "TEMPLATE_NAME",
"language": {
"code": "LANGUAGE_AND_LOCALE_CODE"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": "http(s)://URL"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "TEXT_STRING"
},
{
"type": "currency",
"currency": {
"fallback_value": "VALUE",
"code": "USD",
"amount_1000": NUMBER
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "MONTH DAY, YEAR"
}
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": "PAYLOAD"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "1",
"parameters": [
{
"type": "payload",
"payload": "PAYLOAD"
}
]
}
]
}
}'
如果请求成功,响应返回的对象包含以 wamid 为前缀的标识符。使用 wamid 后列出的编号追踪消息状态。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
如要发送使用位置标头的模板,您的请求中必须包含一个位置标头对象。
{ "type": "header", "parameters": [ { "type": "location", "location": { "latitude": "<LATITUDE>", "longitude": "<LONGITUDE>", "name": "<NAME>", "address": "<ADDRESS>" } } ] }
占位符 | 描述 | 值示例 |
---|---|---|
| 将出现在消息顶部通用地图下方、 |
|
| 位置的纬度。 |
|
| 位置的经度。 |
|
| 将刚好出现在消息顶部通用地图下方的文本。 |
|
以下请求示例显示了如何发送使用以下组件的现有模板:
curl -L 'https://graph.facebook.com/v16.0/106540352242922/messages' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer EAAJB...' \ -d ' { "messaging_product": "whatsapp", "recipient_type": "individual", "to": "12245554792", "type": "template", "template": { "name": "order_delivery_update", "language": { "code": "en_US" }, "components": [ { "type": "header", "parameters": [ { "type": "location", "location": { "latitude": "37.483307", "longitude": "122.148981", "name": "Pablo Morales", "address": "1 Hacker Way, Menlo Park, CA 94025" } } ] }, { "type": "body", "parameters": [ { "type": "text", "text": "Pablo" }, { "type": "text", "text": "566701" } ] } ] } }'
发送一系列消息时,不保证消息的接收顺序与您的 API 请求顺序一致。如需保证消息送达顺序,请在发送您消息顺序中的下一条消息之前,确认已通过消息 Webhooks 接收到 delivered
状态。
从 2024 年 2 月 6 日开始,将对能收到模板消息的一小部分印度 WhatsApp 用户应用每位用户的营销模板消息限制;但到 2024 年 2 月 13 日,该限制将适用于使用印度手机号码的全部 WhatsApp 用户。
我们正在推出新的方法,并率先应用于印度消费者,这些方法将打造高质量的用户体验,并充分提升营销模板消息的互动量。这可能包括限制用户在特定时间段内从任何商家接收的营销模板消息数量,我们将从一些阅读可能性较低的对话开始试运行这些方法。请注意,用户的营销模板消息数量限制会统计从任意商家收到的营销模板消息,并不特定于仅由您的企业发送的营销模板消息。
该限制仅适用于通常会打开新营销对话的营销模板消息。如果您与 WhatsApp 用户之间的营销对话已打开,已发送给用户的营销模板消息不会受到影响。
如果因该限制而未将营销模板消息送达至特定用户,云端 API 会返回错误代码 131026
,而 On-Premises API 会返回错误代码 1026
。但请注意,这些错误代码涵盖了可能导致消息无法送达的各种问题,但出于隐私原因,我们不会透露消息是否确实由于该限制而未能送达。请参阅云端 API 的疑难解答文档和 On-Premises API 的“为何消息送达率不是 100%?”请参阅常见问题,了解消息未送达的原因描述以及确定其潜在原因的方法。
如果您收到了这些错误代码,并且怀疑是由于该限制所致,请勿立即重新发送模板消息,因为这只会导致出现另一个错误响应。相反,您应该在重试时逐渐增加时间间隔,直到消息成功送达,因为该限制可能在不同的时间段内生效。
我们将继续完善我们的方法,感谢您的合作,我们致力于让 WhatsApp 为您的商家和客户提供最佳体验。
如果您遇到消息接收问题,请参阅消息未送达。