我们将弃用本地 API。请参阅我们的本地 API 弃用文档,了解弃用详情以及如何迁移到我们的下一代云端 API。
We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
无论使用何种消息类型,系统均通过向 /messages
节点发出 POST
调用来发送消息。JSON 消息正文内容因消息类型(文本、图片等)而异。
以下是 /messages
POST 请求中使用的主要参数:
名称 | 描述(点击左列中的箭头以获取支持的选项。) |
---|---|
|
包含音频的 |
| 可选。 有助于追踪的任意字符串。 例如,您可以在此字段中传递消息模板编号,以从您发送的第一条消息开始追踪客户体验历程。然后,您可以追踪不同消息模板类型的投资回报 (ROI),以找出最有效的类型。 此字符串包含在 Webhooks 负载的 云端 API 不会处理此字段,只会将其作为已发送/已送达/已读消息 Webhooks 的一部分返回。 不超过 512 个字符。 |
|
|
| 回复对话中任何消息时,此为必要项。 此对象包含您所回复的之前的消息的编号。例如:
|
|
包含文档的 |
| 包含 仅限 On-Premises API。 |
|
包含图像的 |
|
|
|
|
| 必要 请求所用的消息服务。使用 |
|
允许在文字消息中显示网址预览。请参阅在文字消息中发送网址。如果未在消息中加入网址,则此为可选字段。值: 仅限 On-Premises API。云端 API 用户可通过文字对象中的 |
| 可选。 您目前仅可向个人发送消息。请将此设为 默认: |
| 消息状态。您可使用此字段将消息标为 |
|
包含贴图的 云端 API:除了所有传入消息的贴图类型外,还支持传出消息的第三方静态和动态贴图。静态贴图须为 512x512 像素,不得超过 100 KB。动态贴图须为 512x512 像素,不得超过 500 KB。 On-Premises API:除了所有传入消息的贴图类型外,仅支持传出消息的第三方静态贴图。静态贴图须为 512x512 像素,不得超过 100 KB。不支持动态贴图。 |
|
|
| 此为文字消息的必要项。 |
| 必要。 要接收消息的客户的 WhatsApp 编号或电话号码。请参阅电话号码格式。 如有需要,On-Premises API 用户可调用 |
| 可选。 要发送的消息类型。如略过,则默认为 |
名称 | 描述 |
---|---|
| 必要。 包含消息的文本,其中可以包含网址和格式。 |
在本地 API 中,媒体对象编号是使用 media
端点将媒体成功上传至 WhatsApp Business API(详情请参见“本地 API”>“参考文档”)客户端时所返回的编号。
Name | Description |
---|---|
| Required when The media object ID. Do not use this field when message |
| Required when The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs. Do not use this field when message Cloud API users only:
|
| Optional. Media asset caption. Do not use with On-Premises API users:
|
| Optional. Describes the filename for the specific document. Use only with The extension of the filename will specify what format the document is displayed as in WhatsApp. |
| Optional. On-Premises API only. This path is optionally used with a |
在 contacts
内部,您可以嵌套以下对象:addresses
、emails
、name
、org
、phone
和 urls
。如果是多个对象,则将按照以下示例的方式将其封装为数组。
Name | Description |
---|---|
| Optional. Full contact address(es) formatted as an
|
| Optional.
|
| Optional. Contact email address(es) formatted as an
|
| Required. Full contact name formatted as a
*At least one of the optional parameters needs to be included along with the |
| Optional. Contact organization information formatted as an
|
| Optional. Contact phone number(s) formatted as a
|
| Optional. Contact URL(s) formatted as a
|
内部嵌套多个对象的 contacts
对象示例:
"contacts": [ { "addresses": [ { "city": "city name", "country": "country name", "country_code": "code", "state": "Contact's State", "street": "Contact's Street", "type": "Contact's Address Type", "zip": "Contact's Zip Code" } ], "birthday": "birthday", "emails": [ { "email": "email", "type": "HOME" }, { "email": "email", "type": "WORK" } ], "name": { "first_name": "first name value", "formatted_name": "formatted name value", "last_name": "last name value", "suffix": "suffix value" }, "org": { "company": "company name", "department": "dep name", "title": "title" }, "phones": [ { "phone": "Phone number", "wa-id": "WA-ID value", "type": "MAIN" }, { "phone": "Phone number", "type": "HOME" }, { "phone": "Phone number", "type": "WORK" } ], "urls": [{ "url": "some url", "type": "WORK" }] } ]
Name | Description |
---|---|
| Required. Location latitude in decimal degrees. |
| Required. Location longitude in decimal degrees. |
| Required. Name of the location. |
| Required. Address of the location. |
在 template
内部,您可以嵌套 components
和 language
对象。
从 v2.27.8
开始,模板的 namespace
必须是与 WABA 有关的命名空间,且该 WABA 拥有当前 WhatsApp Business 本地客户端中的电话号码。否则,消息将发送失败。
此外,从 v2.41
开始,namespace
将是一个可选字段。
名称 | 说明 |
---|---|
| 必需。 模板的命名空间。 从 |
| 必需。 模板名称。 |
| 必需。 指定模板可使用的显示语言。多媒体素材模板消息仅支持 |
| 可选。 包含消息参数的数组。 |
在 components
内部,您可以嵌套 parameters
对象。此外,您可以将 type
设置为 button
。
名称 | 描述 |
---|---|
| 必需。 用于描述 |
| 可选。 包含消息内容的数组。 |
在 components
对象内部,您可以将 type
设置为 button
。以下是按钮参数:
名称 | 描述 |
---|---|
| 必要。 要创建的按钮的类型。 |
| 必要。 按钮的位置索引。通过使用 |
| 必要。 按钮的参数,在商务管理平台中创建按钮时需要设置这些参数。在请求中添加下列参数:
|
sub_type 为 quick_reply
的 button
类型示例:
{ "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "Yes-Button-Payload" }] }
sub_type 为 copy_code
的 button
类型示例
{ "type": "button", "sub_type": "copy_code", "index": 0, "parameters": [{ "type": "coupon_code", "coupon_code": "DISCOUNT20" }] }
WhatsApp Business API(详情请参见“本地 API”>“参考文档”)v2.39
已停用 hsm
对象。请改为使用 template
对象。
名称 | 描述 |
---|---|
| 必要。 要使用的命名空间。从 |
| 必要。 元素名称,表示要在命名空间中使用哪个模板。从 |
| 必要。 允许指定 deterministic 语言。详情请参阅语言部分。 此字段用于支持 |
| 必要。 此字段为值数组,会应用于模板中的变量之中。详情请参阅可本地化参数部分。 |
The interactive
object generally contains 4 main components: header
, body
, footer
, and action
. Additionally, some of those components can contain one or more different objects:
header
, you can nest media
objects.action
, you can nest section
and button
objects.Name | Description |
---|---|
| Required. The type of interactive message you want to send. Supported values:
|
| Required for type Header content displayed on top of a message. You cannot set a The
|
| Optional for type An object with the body of the message. The
|
| Optional. An object with the footer of the message. The
|
| Required. An |
Name | Description |
---|---|
| Required for List Messages. Button content. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters. |
| Required for Reply Button Messages. A
设置此编号时,不能有前后端空格。 |
| Required for List Messages and Multi-Product Messages. Array of |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the Facebook catalog linked to your WhatsApp Business Account. This ID can be retrieved via Commerce Manager. |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the product in a catalog. Maximum 100 characters for both Single-Product and Multi-Product messages. To get this ID, go to Commerce Manager, select your Facebook Business account, and you will see a list of shops connected to your account. Click the shop you want to use. On the left-side panel, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name. |
| Optional for Flows Messages. The current mode of the Flow, either Default: |
| Required for Flows Messages. Must be |
| Required for Flows Messages. A token that is generated by the business to serve as an identifier. |
| Required for Flows Messages. Unique identifier of the Flow provided by WhatsApp. |
| Required for Flows Messages. Text on the CTA button, eg. "Signup". Maximum length: 20 characters (no emoji). |
| Optional for Flows Messages.
Default: |
| Optional for Flows Messages. Required only if
|
Name | Description |
---|---|
| Required if the message has more than one Title of the section. Maximum length: 24 characters. |
| Required for List Messages. Contains a list of row objects. Limited to 10 rows across all sections. Each
|
| Required for Multi-Product Messages. Array of Each
|
音频消息:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "audio", "audio": { "id": "your-media-id", } }
使用 filename
的文档消息:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "id": "your-media-id", "filename": "your-document-filename" } }
使用 link
的文档消息:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } }
视频消息,使用 link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "video", "video": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } } }
文本消息:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "text", "text": { "body": "your-message-content" } }
互动消息(清单):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive":{ "type": "list", "header": { "type": "text", "text": "your-header-content-here" }, "body": { "text": "your-text-message-content-here" }, "footer": { "text": "your-footer-content-here" }, "action": { "button": "cta-button-content-here", "sections":[ { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, ... ] } } }
互动消息(回复按钮):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive": { "type": "button", "header": { # optional "type": "text" | "image" | "video" | "document", "text": "your text" # OR "document": { "id": "your-media-id", "filename": "some-file-name" } # OR "document": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name", }, "filename": "some-file-name" }, # OR "video": { "id": "your-media-id" } # OR "video": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name" } } # OR "image": { "id": "your-media-id" } # OR "image": { "link": "http(s)://the-url", "provider": { "name": "provider-name" } } }, # end header "body": { "text": "your-text-body-content" }, "footer": { # optional "text": "your-text-footer-content" }, "action": { "buttons": [ { "type": "reply", "reply": { "id": "unique-postback-id", "title": "First Button’s Title" } }, { "type": "reply", "reply": { "id": "unique-postback-id", "title": "Second Button’s Title" } } ] } # end action } # end interactive }
互动消息(多件和单件商品消息):
{ "recipient_type": "individual", "to" : "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "product", "body": { "text": "body text" }, "footer": { "text": "footer text" }, "action": { " _id": "catalog-ID", "product_retailer_id": "product-ID" } } }
互动消息(多件商品消息):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "product_list", "Header":{ "type": "text", "text": "text-header-content" }, "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "catalog_id":"catalog-id", "sections": [ { "title": "section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" }, { "product_retailer_id": "product-SKU-in-catalog" }, ... ]}, { "title": "the-section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" } ... ]}, ... ] }, } }
互动消息(目录消息):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "catalog_message", "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "name": "catalog_message", "parameters":{ "thumbnail_product_retailer_id": "product-SKU-in-catalog" } }, } }
互动消息(消息流):
{ "recipient_type": "individual", "to": "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "flow", "header": { "type": "text", "text": "Flow message header" }, "body": { "text": "Flow message body" }, "footer": { "text": "Flow message footer" }, "action": { "name": "flow", "parameters": { "flow_message_version": "3", "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s", "flow_id": "<FLOW_ID>", "flow_cta": "Book!", "flow_action": "navigate", "flow_action_payload": { "screen": "<SCREEN_ID>", "data": { # optional "user_name": "name", "user_age": 25 } } } } } }
下例所示为响应中的 payload
,为简洁起见,省略了元对象和错误对象。
{ "messages": [{ "id": "message-id" }] }
如果请求成功,您会收到包含消息编号的响应。如果请求返回了 errors
部分,请在重新发送请求前检查原始消息,并修正错误。有关错误的更多信息,请参阅 WhatsApp Business API 客户端错误代码和 HTTP 状态代码(“本地 API”>“参考文档”)。
从 2023 年 9 月 12 日起,适用于巴西、哥伦比亚和新加坡境内的企业。从 2023 年 10 月 12 日起,适用于所有企业。
如果请求因要接受质量评估而被暂停发送,响应中将包含 message_status
属性和一条消息,表明该请求未立即发送,并且将在质量验证后发送或弃用。仅在消息被暂停发送时,此属性才会出现。
{ "messages": [{ "id": "message-id", "message_status": "Message has been held because quality assessment is pending", }] }
WhatsApp 支持在消息中设置一些格式。要对消息的全部或部分内容设置格式,请使用下列格式符号:
设置格式 | 符号 | 示例 |
---|---|---|
粗体 | 星号 (*) | 您的总金额为 *10.50 美元*。 |
斜体 | 下划线 (_) | 欢迎使用 _WhatsApp_! |
波形符 (~) | 这是 ~ 最~ 好的! | |
| 三个倒引号 (```) | ```print 'Hello World';``` |
在此上下文中,“表现”代表在指定秒数内使用 WhatsApp Business API(详情请参见“本地 API”>“参考文档”)客户端可以发送的消息数量。可实现的最佳表现程度取决于不同因素,最重要的因素是您的客户端设置选项以及消息是发送给新用户还是现有用户——在向新用户发送消息时,加密会话设置需要的时间较长一些。
客户端设置 | 每秒支持的文本消息数量 |
---|---|
单个分片 | 70 |
多个分片(32 片) | 250 |
注意:请勿使用 WhatsApp Business API 向同一位收信人重复发送相同消息。
送达率不是 100% 可能有很多原因。其中一些常见情况包括:用户的网络断断续续、用户在一段时间内没有任何活动,或为建立 优质用户体验。
可以通过 WhatsApp 送达的消息会有非常高的送达率。但也存在很多原因可能导致消息送达失败。您可以通过监控回调,了解消息的确切状态。这与通过短信发送消息不同,例如,对于短信,您无法访问最终的送达状态,而再次发送消息可能确实会产生不同的成效。
消息未能成功送达的原因可能是用户的手机停机、没电,或者用户的手机遗失,并在更换新手机时弃用了 SIM 卡。也有可能是公司的客户端出错,因而无法连接到网络,或者是因为回调 (Webhook) 没有送达。您可使用 health
节点监控这些状况。您可以开启服务器接收回调,以便在消息进入 WhatsApp 服务器云时收到通知。
当用户重新连接到网络时,您之前发送的所有消息都会送达给用户。对用户而言,收到多条内容相同的消息会是非常糟糕的体验。因此,用户很可能会将您拉黑或者投诉您。您可能会遭到禁言。
如果您在发送消息后收到 API 发送的消息 ID,则说明您已经完成对此消息的发送。请勿向同一个收信人重复发送相同内容。
如果您发现送达率长期偏低,请提交支持工单至 站内支持。
在发送消息时,只要您获得了消息编号,便意味着系统已将该消息请求存储在数据库中。WhatsApp Business API 客户端会不断尝试发送该消息,直至收到 WhatsApp 服务器的确认为止。这一过程没有结束期限。然后 WhatsApp 服务器会尝试将该消息发送至用户的手机。如果用户的手机不在线,则消息将在 WhatsApp 服务器中存储 30 天,然后失效。
可以!WhatsApp 支持您对消息中的选中文本作加粗、斜体、加删除线处理,或对其采用等宽字体。
不能,我们无法保证消息的接收顺序与发送顺序相同。如果排序对您的用例十分重要,我们建议您在侦听到第一条消息的已发送回调后,再触发第二条消息。
在某些情况下,您可能需要更多时间来处理消费者查询,或者您只能在 24 小时后回复消息。我们建议您创建消息模板,以:
在这两种情况中,请务必为消息模板提供尽可能多的上下文。例如: