Мы прекращаем поддержку локального API. Подробные сведения и информацию о том, как перейти на облачный API нового поколения, см. в документе Упразднение локального API.
We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
/v1/messages
Используйте узел messages
, чтобы отправлять своим клиентам текстовые сообщения, медиафайлы, контакты, геоданные, интерактивные сообщения и шаблоны сообщений.
Сведения о сообщениях различных типов, которые вы можете отправлять, см. в следующих руководствах: Текстовые сообщения, Сообщения с медиафайлами, Сообщения с контактами и сведениями о местоположении, Интерактивные сообщения, Шаблоны сообщений, Шаблоны сообщений с медиафайлами и Интерактивные шаблоны сообщений.
Вам нужно:
Начиная с версии 2.39 отправлять вызов к узлу контактов перед отправкой сообщения не требуется.
Для отправки сообщения любого типа необходимо выполнить вызов POST
к узлу /messages
. Содержимое тела сообщения JSON зависит от типа сообщения (текст, изображение и т. п.).
Ниже перечислены основные параметры для POST-запросов /messages
:
Имя | Описание (нажмите стрелку в столбце слева, чтобы открыть список поддерживаемых вариантов) |
---|---|
| Обязательный параметр, если Объект |
| Необязательный параметр. Необязательная строка, используемая для отслеживания. Например, в этом поле можно указать ID для отслеживания истории переписки клиента начиная с первого отправленного вами сообщения. После этого вы сможете отслеживать рентабельность инвестиций для различных типов шаблонов и определить, какой из них наиболее эффективен. Любое приложение, подписанное на поле Webhooks Облачный API не обрабатывает это поле, а просто возвращает его как часть Webhooks сообщения с информацией об отправке, доставке или прочтении. Максимальное количество символов: 512. Только для облачного API. |
| Обязательный параметр, если |
| Обязательный параметр при ответе на любое сообщение в переписке. Объект, содержащий ID предыдущего сообщения, на которое вы отвечаете. Пример:
Только для облачного API. |
| Обязательный параметр, если Объект |
| Содержит объект Только для локального API. |
| Обязательный параметр, если Объект |
| Обязательный параметр, если Объект |
| Обязательный параметр, если |
| Обязательный параметр. Служба обмена сообщениями, используемая для отправки запроса. Используйте Только для облачного API. |
| Обязательный параметр, если Используется для предварительного просмотра URL в текстовых сообщениях (см. раздел Отправка URL в текстовых сообщениях). Если ваше сообщение не содержит URL, это поле необязательно. Значения: Только для локального API. Пользователи облачного API могут использовать эту функцию с полем |
| Необязательный параметр. В настоящий момент вы можете отправлять сообщения только отдельным лицам. Установите значение Значение по умолчанию: |
| Статус сообщения. Это поле можно использовать, чтобы пометить сообщение как
|
| Обязательный параметр, если Объект Облачный API: поддерживаются входящие стикеры всех типов, а также статические и анимированные исходящие стикеры сторонних разработчиков. Статический стикер должен иметь размер 512 x 512 пикселей, размер файла не должен превышать 100 КБ. Анимированный стикер должен иметь размер 512 x 512 пикселей, размер файла не должен превышать 500 КБ. Локальный API: поддерживаются входящие стикеры всех типов и только статические исходящие стикеры сторонних разработчиков. Статический стикер должен иметь размер 512 x 512 пикселей, размер файла не должен превышать 100 КБ. Анимированные стикеры не поддерживаются. |
| Обязательный параметр, если |
| Обязательный параметр для текстовых сообщений. |
| Обязательный параметр. ID WhatsApp или номер телефона клиента, которому вы хотите отправить сообщение. См. раздел Форматы номеров телефонов. При необходимости пользователи локального API могут получить этот номер, выполнив вызов к конечной точке |
| Необязательный параметр. Тип сообщения, которое вы хотите отправить. Если значение не указано, по умолчанию используется |
Имя | Описание |
---|---|
| Обязательный параметр. Содержит текст сообщения. Может содержать несколько URL и форматирование. |
Для локального API ID медиаобъекта возвращается после успешной загрузки медиафайла в локальный/референтный клиент WhatsApp Business через конечную точкуmedia
.
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
шаблона должно быть пространством имен, связанным с аккаунтом WhatsApp Business, который владеет номером телефона в текущем локальном клиенте WhatsApp Business. В противном случае сообщение не будет отправлено.
Также, начиная с версии v2.41
, поле namespace
необязательно для заполнения.
Имя | Описание |
---|---|
| Обязательно. Пространство имен шаблона. Начиная с версии |
| Обязательно. Имя шаблона. |
| Обязательно. Задает язык, на котором может отображаться шаблон. Для шаблонов сообщений с медиафайлами применяется только языковая политика |
| Необязательно. Массив, содержащий параметры сообщения. |
В components
можно вложить объект parameters
. Кроме того, можно задать для параметра type
значение button
.
Имя | Описание |
---|---|
| Обязательно. Описывает тип |
| Необязательно. Массив, содержащий контент сообщения. |
Имя | Описание |
---|---|
| Обязательно. Описывает тип Типы медиафайлов ( Подробные сведения о типах |
В объекте components
для параметра type
можно задать значение button
. Предусмотрено два параметра кнопок:
Имя | Описание |
---|---|
| Обязательный параметр. Тип создаваемой кнопки. |
| Обязательный параметр. Индекс положения кнопки. Всего можно создать до десяти кнопок с индексами |
| Обязательный параметр. Параметры кнопки, задаваемые во время ее создания в Business Manager. Укажите следующие параметры:
|
Пример типа button
с параметром sub_type со значением quick_reply
:
{ "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "Yes-Button-Payload" }] }
Пример типа button
с параметром sub_type со значением copy_code
{ "type": "button", "sub_type": "copy_code", "index": 0, "parameters": [{ "type": "coupon_code", "coupon_code": "DISCOUNT20" }] }
Объект hsm
был упразднен при запуске v2.39
локального/справочного клиента WhatsApp Business. Используйте вместо него объект template
.
Имя | Описание |
---|---|
| Обязательный параметр. Пространство имен, которое будет использоваться. Начиная с версии |
| Обязательный параметр. Имя элемента, которое указывает, какой именно шаблон из пространства имен нужно использовать. Начиная с версии |
| Обязательный параметр. Позволяет указать определенный язык. Подробные сведения см. в разделе Язык. Ранее это поле поддерживало вариант |
| Обязательный параметр. Это поле представляет собой массив значений, используемых в переменных шаблона. Подробные сведения см. в разделе, посвященном локализуемым параметрам. |
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
в ответе. Для краткости объекты meta и error не показаны.
{ "messages": [{ "id": "message-id" }] }
В случае успеха вы получите ответ с ID сообщения. Если запрос вернет раздел errors
, проверьте исходное сообщение, исправьте ошибки и отправьте запрос заново. Дополнительную информацию об ошибках см. в статьях Коды ошибок локального клиента WhatsApp Business и Коды статусов HTTP.
С 12 сентября 2023 г. распространяется на компании в Бразилии, Колумбии и Сингапуре. С 12 октября 2023 г. распространяется на все компании.
Если запрос заблокирован для оценивания качества, ответ будет включать в себя свойство message_status
с сообщением, указывающим, что сообщение не было доставлено сразу же и будет отправлено или заблокировано после завершения оценивания качества. Это свойство будет существовать только в случае блокировки сообщения.
{ "messages": [{ "id": "message-id", "message_status": "Message has been held because quality assessment is pending", }] }
В сообщениях WhatsApp можно использовать базовое форматирование. Для этого нужно заключить текст, который требуется отформатировать, в специальные символы:
Форматирование | Символ | Пример |
---|---|---|
Полужирное начертание | Звездочка (*) | Общая стоимость заказа: *1050 рублей*. |
Курсив | Подчеркивание (_) | Добро пожаловать в _WhatsApp_! |
Тильда (~) | Цена для членов клуба: ~300~ 250 рублей. | |
| Три обратных апострофа (```) | ```print 'Hello World';``` |
В этом контексте производительность — это количество сообщений, которые можно отправить за секунду через локальный/справочный клиент WhatsApp Business. Максимальная производительность зависит от множества факторов. Самые главные из них — выбранная конфигурация клиента и то, отправляется ли сообщение существующему или новому пользователю. При отправке новому пользователю настройка шифрования занимает немного больше времени.
Конфигурация клиента | Число поддерживаемых текстовых сообщений в секунду |
---|---|
Один сегмент | 70 |
Несколько сегментов (32) | 250 |
Примечание. Не отправляйте сообщение повторно одному и тому же получателю через WhatsApp Business API.
Причин может быть множество. Например, пользователь может выходить в сеть лишь время от времени или быть неактивным в течение некоторого времени или нужно создать высококачественный пользовательский опыт.
Сообщения, которые могут быть доставлены с помощью WhatsApp, имеют очень высокий коэффициент доставки. Однако проблемы доставки могут возникать по различным причинам. Точно узнать статус сообщения можно по обратным вызовам. В случае с SMS, например, ситуация иная: у вас нет возможности узнать окончательное состояние доставки, а при повторной отправке результат может быть иным.
Сообщения могут не доставляться, потому что телефон пользователя неисправен, его аккумулятор разрядился или телефон потерялся и пользователь временно отключил SIM-карту. Возможно, клиенту не удается подключиться к сети. Возможно также, что не доставляются обратные вызовы (Webhooks). Отслеживать эти ситуации можно с помощью узла health
. Чтобы знать, попадают ли сообщения на серверы WhatsApp, можно включить прием обратных вызовов на этих серверах.
Как только пользователь вновь подключится к сети, все отправленные вами сообщения будут доставлены. Получение нескольких сообщений с одинаковым контентом часто вызывает негативную реакцию. Пользователь может заблокировать вас или отправить жалобу. В результате вам может быть запрещен доступ к платформе.
Если вы отправили сообщение и получили его идентификатор от API, больше ничего делать не нужно. Не отправляйте один и тот же контент одному и тому же получателю несколько раз.
Если проблемы с доставкой наблюдаются в течение длительного времени, обратитесь в прямую поддержку.
При отправке сообщения вы получаете его ID. Это означает, что запрос на отправку сообщения сохранен в нашей базе данных. Клиент API WhatsApp Business будет отправлять это сообщение до тех пор, пока сервер WhatsApp не примет его. Попытки отправки не ограничены по времени. После принятия сообщения сервер WhatsApp попытается доставить его конечному пользователю. Если устройство пользователя отключено, сообщение будет храниться на сервере WhatsApp в течение 30 дней, после чего будет удалено.
Да. WhatsApp позволяет выделить текст в сообщении жирным или курсивом, зачеркнуть его или сделать моноширинным.
В данный момент количество и имена пользователей, которые заблокировали вашу компанию, узнать нельзя. Вы можете проверить обратные вызовы статуса. Если от пользователя нет ответного статуса delivered
, он заблокировал вас или у него отсутствует подключение к Интернету. Дополнительную информацию см. в документации по Webhook.
Даже если пользователь заблокировал вашу компанию, API Contacts будет возвращать его номер телефона в качестве действительного пользователя WhatsApp. Однако отправленные ему сообщения не будут доставляться. Если сообщение платное, средства списываться не будут.
Нет. Сообщения могут доставляться в другом порядке. Если для вас важен порядок доставки, дождитесь получения обратного вызова о доставке одного сообщения и только после этого отправляйте следующее.
При использовании узла messages
нужно задать для заголовка Content-Type
значение application/json
, чтобы клиент API WhatsApp Business мог правильно проанализировать текст сообщения. Кроме того, заголовок Authorization
должен содержать действительный маркер доступа. Информацию о получении маркера и его сроке действия см. в разделе Вход и аутентификация.
Иногда для обработки запроса клиента 24 часов может оказаться недостаточно. Мы рекомендуем создать шаблон сообщения, чтобы:
В обоих случаях следует включить в шаблон всю необходимую информацию. Примеры: