Узел Messages

/v1/messages

Используйте узел messages, чтобы отправлять своим клиентам текстовые сообщения, медиафайлы, контакты, геоданные, интерактивные сообщения и шаблоны сообщений.

Сведения о сообщениях различных типов, которые вы можете отправлять, см. в следующих руководствах: Текстовые сообщения, Сообщения с медиафайлами, Сообщения с контактами и сведениями о местоположении, Интерактивные сообщения, Шаблоны сообщений, Шаблоны сообщений с медиафайлами и Интерактивные шаблоны сообщений.

Прежде чем начать

Вам нужно:

  • Пройти аутентификацию и получить маркер авторизации для доступа к службе. Дополнительную информацию см. в документации по входу и аутентификации.
  • Подтвердить аккаунт WhatsApp, которому будут отправляться сообщения, и получить соответствующий ID пользователя WhatsApp. Дополнительную информацию см. в документации по контактам.
  • Обеспечить соответствие сообщений условиям доставки.

Начиная с версии 2.39 отправлять вызов к узлу контактов перед отправкой сообщения не требуется.

Ограничения

  • Поддерживаются сообщения следующих типов: текст, шаблоны сообщений, изображения, документы и аудио.
  • Максимальная длина текстового сообщения — 4096 символов.

Создание

Для отправки сообщения любого типа необходимо выполнить вызов POST к узлу /messages. Содержимое тела сообщения JSON зависит от типа сообщения (текст, изображение и т. п.).

Параметры

Ниже перечислены основные параметры для POST-запросов /messages:

ИмяОписание (нажмите стрелку в столбце слева, чтобы открыть список поддерживаемых вариантов)

audio

Объект

Обязательный параметр, если type=audio.

Объект media, содержащий аудио.

biz_opaque_callback_data

Строка

Необязательный параметр.

Необязательная строка, используемая для отслеживания.


Например, в этом поле можно указать ID для отслеживания истории переписки клиента начиная с первого отправленного вами сообщения. После этого вы сможете отслеживать рентабельность инвестиций для различных типов шаблонов и определить, какой из них наиболее эффективен.


Любое приложение, подписанное на поле Webhooks messages в аккаунте WhatsApp Business, может получить эту строку, так как она содержится в объекте statuses в полезных данных Webhooks.


Облачный API не обрабатывает это поле, а просто возвращает его как часть Webhooks сообщения с информацией об отправке, доставке или прочтении.


Максимальное количество символов: 512.


Только для облачного API.

contacts

Объект

Обязательный параметр, если type=contacts.

Объект contacts.

context

Объект

Обязательный параметр при ответе на любое сообщение в переписке.

Объект, содержащий ID предыдущего сообщения, на которое вы отвечаете. Пример:


{"message_id":"MESSAGE_ID"}


Только для облачного API.

document

Объект

Обязательный параметр, если type=document.

Объект media, содержащий документ.

hsm

Объект

Содержит объект hsm. Этот параметр упразднен начиная с версии v2.39 локального API. Вместо него следует использовать объект template.


Только для локального API.

image

Объект

Обязательный параметр, если type=image.

Объект media, содержащий изображение.

interactive

Объект

Обязательный параметр, если type=interactive.

Объект interactive. Для компонентов каждого объекта interactive в большинстве случаев используется последовательный шаблон: header, body, footer и action.

location

Объект

Обязательный параметр, если type=location.

Объект location.

messaging_product

Строка

Обязательный параметр.

Служба обмена сообщениями, используемая для отправки запроса. Используйте "whatsapp".


Только для облачного API.

preview_url

Логическое значение

Обязательный параметр, если type=text.

Используется для предварительного просмотра URL в текстовых сообщениях (см. раздел Отправка URL в текстовых сообщениях). Если ваше сообщение не содержит URL, это поле необязательно. Значения:false (по умолчанию), true.


Только для локального API. Пользователи облачного API могут использовать эту функцию с полем preview_url в текстовом объекте.

recipient_type

Строка

Необязательный параметр.

В настоящий момент вы можете отправлять сообщения только отдельным лицам. Установите значение individual.


Значение по умолчанию: individual

status

Строка

Статус сообщения. Это поле можно использовать, чтобы пометить сообщение как read. Дополнительную информацию см. в следующих руководствах:


sticker

Объект

Обязательный параметр, если type=sticker.

Объект media, содержащий стикер.


Облачный API: поддерживаются входящие стикеры всех типов, а также статические и анимированные исходящие стикеры сторонних разработчиков. Статический стикер должен иметь размер 512 x 512 пикселей, размер файла не должен превышать 100 КБ. Анимированный стикер должен иметь размер 512 x 512 пикселей, размер файла не должен превышать 500 КБ.


Локальный API: поддерживаются входящие стикеры всех типов и только статические исходящие стикеры сторонних разработчиков. Статический стикер должен иметь размер 512 x 512 пикселей, размер файла не должен превышать 100 КБ. Анимированные стикеры не поддерживаются.

template

Объект

Обязательный параметр, если type=template.

Объект template.

text

Объект

Обязательный параметр для текстовых сообщений.

Объект text.

to

Строка

Обязательный параметр.

ID WhatsApp или номер телефона клиента, которому вы хотите отправить сообщение. См. раздел Форматы номеров телефонов.


При необходимости пользователи локального API могут получить этот номер, выполнив вызов к конечной точке contacts.

type

Строка

Необязательный параметр.

Тип сообщения, которое вы хотите отправить. Если значение не указано, по умолчанию используется text.

Объект Text

ИмяОписание

body

Обязательный параметр.

Содержит текст сообщения. Может содержать несколько URL и форматирование.

Объект Media

Для локального API ID медиаобъекта возвращается после успешной загрузки медиафайла в локальный/референтный клиент WhatsApp Business через конечную точкуmedia.

NameDescription

id

string

Required when type is audio, document, image, sticker, or video and you are not using a link.


The media object ID. Do not use this field when message type is set to text.

link

string

Required when type is audio, document, image, sticker, or video and you are not using an uploaded media ID (i.e. you are hosting the media asset on your public server).

The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs.


Do not use this field when message type is set to text.


Cloud API users only:


  • See Media HTTP Caching if you would like us to cache the media asset for future messages.
  • When we request the media asset from your server you must indicate the media's MIME type by including the Content-Type HTTP header. For example: Content-Type: video/mp4. See Supported Media Types for a list of supported media and their MIME types.

caption

string

Optional.


Media asset caption. Do not use with audio or sticker media.


On-Premises API users:

  • For v2.41.2 or newer, this field is is limited to 1024 characters.
  • Captions are currently not supported for document media.

filename

string

Optional.


Describes the filename for the specific document. Use only with document media.


The extension of the filename will specify what format the document is displayed as in WhatsApp.

provider

string

Optional. On-Premises API only.

This path is optionally used with a link when the HTTP/HTTPS link is not directly accessible and requires additional configurations like a bearer token. For information on configuring providers, see the Media Providers documentation.

Объект Contacts

В contacts можно вложить следующие объекты: addresses, emails, name, org, phone и urls. Множественные объекты должны быть заключены в массив, как показано в примере ниже.

NameDescription

addresses

object

Optional.

Full contact address(es) formatted as an addresses object. The object can contain the following fields:

streetstringOptional. Street number and name.

citystringOptional. City name.

statestringOptional. State abbreviation.

zipstringOptional. ZIP code.

countrystringOptional. Full country name.

country_codestringOptional. Two-letter country abbreviation.

typestringOptional. Standard values are HOME and WORK.

birthday

Optional.

YYYY-MM-DD formatted string.

emails

object

Optional.

Contact email address(es) formatted as an emails object. The object can contain the following fields:

emailstringOptional. Email address.

typestringOptional. Standard values are HOME and WORK.

name

object

Required.

Full contact name formatted as a name object. The object can contain the following fields:

formatted_namestringRequired. Full name, as it normally appears.

first_namestringOptional*. First name.

last_namestringOptional*. Last name.

middle_namestringOptional*. Middle name.

suffixstringOptional*. Name suffix.

prefixstringOptional*. Name prefix.


*At least one of the optional parameters needs to be included along with the formatted_name parameter.

org

object

Optional.

Contact organization information formatted as an org object. The object can contain the following fields:

companystringOptional. Name of the contact's company.

departmentstringOptional. Name of the contact's department.

titlestringOptional. Contact's business title.

phones

object

Optional.

Contact phone number(s) formatted as a phone object. The object can contain the following fields:

phonestringOptional. Automatically populated with the `wa_id` value as a formatted phone number.

typestringOptional. Standard Values are CELL, MAIN, IPHONE, HOME, and WORK.

wa_idstringOptional. WhatsApp ID.

urls

object

Optional.

Contact URL(s) formatted as a urls object. The object can contain the following fields:

urlstringOptional. URL.

typestringOptional. Standard values are HOME and WORK.

Пример объекта 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"
        }]
    }
]

Объект Location

NameDescription

latitude

Required.

Location latitude in decimal degrees.

longitude

Required.

Location longitude in decimal degrees.

name

Required.

Name of the location.

address

Required.

Address of the location.

Объект Template

В template можно вложить объекты components и language.

Начиная с версии v2.27.8, значение namespace шаблона должно быть пространством имен, связанным с аккаунтом WhatsApp Business, который владеет номером телефона в текущем локальном клиенте WhatsApp Business. В противном случае сообщение не будет отправлено.

Также, начиная с версии v2.41, поле namespace необязательно для заполнения.

ИмяОписание

namespace

Обязательно.

Пространство имен шаблона.


Начиная с версии v2.27.8 пространство имен должно быть связано с бизнес-аккаунтом WhatsApp, которому принадлежит номер телефона, указанный для текущего клиента WhatsApp Business API. В противном случае сообщение не будет отправлено.

name

Обязательно.

Имя шаблона.

language

Обязательно.

Задает язык, на котором может отображаться шаблон. Для шаблонов сообщений с медиафайлами применяется только языковая политика deterministic. Дополнительную информацию см. в разделе Язык.

components

Необязательно.

Массив, содержащий параметры сообщения.

Объект Components

В components можно вложить объект parameters. Кроме того, можно задать для параметра type значение button.

ИмяОписание

type

Обязательно.

Описывает тип component.
Значения:header, body, footer.

parameters

Необязательно.

Массив, содержащий контент сообщения.

Объект Parameter

ИмяОписание

type

Обязательно.

Описывает тип parameter.
Значения:text, currency, date_time, image, document, video.


Типы медиафайлов (image, document и video) следуют тому же формату, что и в обычных сообщениях с медиафайлами. Подробные сведения см. в документации по медиафайлам. В настоящий момент для шаблонов сообщений с медиафайлами поддерживаются только документы в формате PDF.


Подробные сведения о типах currency и date_time см. в разделе, посвященном локализуемым параметрам. В параметрах currency и date_time сообщений типа template используется значение fallback_value вместо default. Пример см. в запросе выше.

Тип кнопки

В объекте components для параметра type можно задать значение button. Предусмотрено два параметра кнопок:

ИмяОписание

sub_type

Обязательный параметр.

Тип создаваемой кнопки.
Значения:quick_reply, url, copy_code (available from 2.49 and onwards)

index

Обязательный параметр.

Индекс положения кнопки. Всего можно создать до десяти кнопок с индексами 0-9.

parameters

Обязательный параметр.

Параметры кнопки, задаваемые во время ее создания в Business Manager. Укажите следующие параметры:

  • type (обязательный) — указывает тип параметра для кнопки. Поддерживаются значения payload, text и coupon_code.
  • payload (обязательный для кнопок quick_reply) — заданные разработчиком полезные данные, которые возвращаются при нажатии кнопки вместе с отображаемым на ней текстом.
  • text (обязательный для кнопок url) — предоставленный разработчиком суффикс, который добавляется к заданному URL кнопки.
  • coupon_code (обязательный для кнопок copy_code) (доступен в версии 2.49 и последующих): предоставленный разработчиком код купона, который копируется при нажатии кнопки "скопировать код".

Пример типа 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

Объект hsm был упразднен при запуске v2.39 локального/справочного клиента WhatsApp Business. Используйте вместо него объект template.

Имя Описание

namespace

Обязательный параметр.

Пространство имен, которое будет использоваться. Начиная с версии v2.2.7 пространство имен должно соответствовать параметру element_name. В противном случае отправка сообщения завершится ошибкой.

element_name

Обязательный параметр.

Имя элемента, которое указывает, какой именно шаблон из пространства имен нужно использовать. Начиная с версии v2.2.7 значение element_name должно соответствовать пространству имен. В противном случае отправка сообщения завершится ошибкой.

language

Обязательный параметр.

Позволяет указать определенный язык. Подробные сведения см. в разделе Язык.


Ранее это поле поддерживало вариант fallback, который был упразднен начиная с версии v2.27.8.

localizable_params

Обязательный параметр.

Это поле представляет собой массив значений, используемых в переменных шаблона. Подробные сведения см. в разделе, посвященном локализуемым параметрам.

Объект Interactive

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:

  • Inside header, you can nest media objects.
  • Inside action, you can nest section and button objects.
NameDescription

type

string

Required.

The type of interactive message you want to send. Supported values:

  • list: Use it for List Messages.
  • button: Use it for Reply Buttons.
  • product: Use it for Single-Product Messages.
  • product_list: Use it for Multi-Product Messages.
  • catalog_message: Use it for Catalog Messages.
  • flow: Use it for Flows Messages.

header

object

Required for type product_list. Optional for other types.

Header content displayed on top of a message. You cannot set a header if your interactive object is of product type.


The header object contains the following fields:

documentobjectRequired if type is set to document. Contains the media object with the document.

imageobjectRequired if type is set to image. Contains the media object with the image.

videoobjectRequired if type is set to video. Contains the media object with the video.

textstringRequired if type is set to text. Text for the header. Formatting allows emojis, but not markdown. Maximum length: 60 characters.

typestringRequired. The header type you would like to use. Supported values are:

text – for List Messages, Reply Buttons, and Multi-Product Messages.

video – for Reply Buttons.

image – for Reply Buttons.

document – for Reply Buttons.

body

object

Optional for type product. Required for other message types.

An object with the body of the message.


The body object contains the following field:

textstringRequired if body is present. The content of the message. Emojis and markdown are supported. Maximum length: 1024 characters.

footer

object

Optional.

An object with the footer of the message.


The footer object contains the following field:

textstringRequired if footer is present. The footer content. Emojis, markdown, and links are supported. Maximum length: 60 characters.

action

object

Required.

An action object with what you want the user to perform after reading the message. See action object for full information.

Объект Action

NameDescription

button

string

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.

buttons

object

Required for Reply Button Messages.

A button object. The object can contain the following parameters:

type – The only supported option is reply for Reply Button Messages.

title – Button title. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters.

id – Unique identifier for your button. This ID is returned in the webhook when the button is clicked by the user. Maximum length: 256 characters.


При настройке идентификатора в начале и в конце нельзя поставить пробелы.

sections

array of objects

Required for List Messages and Multi-Product Messages.

Array of section objects. There is a minimum of 1 and maximum of 10. See section object.

catalog_id

string

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.

product_retailer_id

string

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.

mode

string

Optional for Flows Messages.

The current mode of the Flow, either draft or published.


Default: published

flow_message_version

string

Required for Flows Messages.

Must be 3.

flow_token

string

Required for Flows Messages.

A token that is generated by the business to serve as an identifier.

flow_id

string

Required for Flows Messages.

Unique identifier of the Flow provided by WhatsApp.

flow_cta

string

Required for Flows Messages.

Text on the CTA button, eg. "Signup".


Maximum length: 20 characters (no emoji).

flow_action

string

Optional for Flows Messages.

navigate or data_exchange. Use navigate to predefine the first screen as part of the message. Use data_exchange for advanced use-cases where the first screen is provided by your endpoint.


Default: navigate

flow_action_payload

object

Optional for Flows Messages.

Required only if flow_action is navigate. The object can contain the following parameters:

screenstringRequired. The id of the first screen of the Flow.

dataobjectOptional. The input data for the first screen of the Flow. Must be a non-empty object.

Section Object

NameDescription

title

string

Required if the message has more than one section.

Title of the section. Maximum length: 24 characters.

rows

array of objects

Required for List Messages.

Contains a list of row objects. Limited to 10 rows across all sections.


Each row object contains the following fields:

titlestringRequired. Maximum length: 24 characters.

IDstringRequired. Maximum length: 200 characters.

descriptionstringOptional. Maximum length: 72 characters.

product_items

array of objects

Required for Multi-Product Messages.

Array of product objects. There is a minimum of 1 product per section and a maximum of 30 products across all sections.


Each product object contains the following field:

product_retailer_idstringRequired for Multi-Product Messages. Unique identifier of the product in a catalog. To get this ID, go to Commerce Manager, select your account and the shop you want to use. Then, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name.

Примеры

Звуковые сообщения:

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 рублей.

Code

Три обратных апострофа (```)

```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 часов может оказаться недостаточно. Мы рекомендуем создать шаблон сообщения, чтобы:

  • дать ответ пользователю либо
  • попросить пользователя ответить и активировать тем самым период обслуживания клиента.

В обоих случаях следует включить в шаблон всю необходимую информацию. Примеры:

  • "Здравствуйте, {{1}}! К сожалению, по Вашему вопросу мы вынуждены сообщить Вам, что {{2}}. Приносим извинения за причиненные неудобства".
  • "По вашей заявке имеется новая информация. Чтобы мы могли и дальше оказывать Вам поддержку, ответьте на это сообщение".