A API Local está sendo descontinuada. Consulte o documento Descontinuação da API Local para ver mais informações e saber como migrar para nossa API de Nuvem de última geração.

We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.

Mensagens

/v1/messages

Use o nó messages para enviar aos clientes mensagens de texto e de mídia, mensagens interativas, contatos, localizações, bem como modelos de mensagens.

Confira os guias a seguir para obter informações sobre os tipos específicos de mensagens que você pode enviar: mensagens de texto, mensagens de mídia, mensagens com contatos e localização, mensagens interativas, modelos de mensagem, modelos de mensagem de mídia e modelos de mensagem interativa.

Antes de começar

Você precisará fazer o seguinte:

  • Autenticar-se e obter um token de autenticação que permita o acesso ao serviço. Consulte a documentação sobre login e autenticação para ver mais informações sobre como fazer isso.
  • Verificar a conta do WhatsApp para a qual você quer enviar mensagens e obter o número de identificação do usuário do WhatsApp correspondente. A documentação Contatos explica como fazer isso.
  • Atender aos requisitos de serviço de controle de limite para mensagens.

Na v2.39 e posteriores, não é necessário chamar o nó de contatos antes de enviar uma mensagem.

Limitações

  • Os seguintes tipos de mensagem são compatíveis: mensagens de texto, modelos de mensagem, imagens, documentos e áudio.
  • Uma mensagem de texto pode ter no máximo 4.096 caracteres.

Criação

Para enviar mensagens, faça uma chamada POST ao nó /messages, independentemente do tipo de mensagem. O conteúdo do corpo da mensagem JSON é diferente para cada tipo de mensagem (texto, imagem etc.).

Parâmetros

Estes são os principais parâmetros usados em solicitações POST de /messages:

NomeDescrição (clique na seta da coluna à esquerda para ver as opções compatíveis)

audio

objeto

Obrigatório quando type=audio.

Um objeto media que contém áudio.

biz_opaque_callback_data

string

Opcional.

Uma string aleatória, útil para rastreamento.


Por exemplo, é possível passar a identificação do modelo de mensagem neste campo para rastrear a jornada do seu cliente a partir da primeira mensagem enviada. Depois, será possível rastrear o ROI de diferentes tipos de modelos de mensagens para determinar o mais eficaz.


Qualquer app inscrito no campo de webhook messages na conta do WhatsApp Business pode obter esta string, pois ela está incluída no objeto statuses dentro de cargas do webhook.


A API de Nuvem não processa esse campo; ela apenas o retorna como parte dos webhooks de mensagem enviada/entregue/lida.


Máximo de 512 caracteres.


Somente a API de Nuvem.

contacts

objeto

Obrigatório quando type=contacts.

Um objeto contacts.

context

objeto

Obrigatório se responder para qualquer mensagem na conversa.

Um objeto que contém a identificação de uma mensagem anterior que você está respondendo. Por exemplo:


{"message_id":"MESSAGE_ID"}


Somente a API de Nuvem.

document

objeto

Obrigatório quando type=document.

Um objeto media que contém um documento.

hsm

objeto

Contém um objeto hsm. Esta opção foi descontinuada com a v2.39 da API Local. Em vez disso, use o objeto template.


Somente API Local.

image

objeto

Obrigatório quando type=image.

Um objeto media que contém uma imagem.

interactive

objeto

Obrigatório quando type=interactive.

Um objeto interactive. Os componentes de cada objeto interactive geralmente seguem um padrão consistente: header, body, footer e action.

location

objeto

Obrigatório quando type=location.

Um objetolocation.

messaging_product

string

Obrigatório

Serviço de mensagens usado para a solicitação. Use "whatsapp".


Somente a API de Nuvem.

preview_url

booliano

Obrigatório se type=text.

Permite visualização de URLs em mensagens de texto — consulte Sending URLs in Text Messages. Este campo é opcional se uma URL não for incluída na mensagem. Valores:false (padrão), true.


Somente API Local. Os usuários da API de Nuvem podem usar a mesma funcionalidade com o campo preview_url dentro de um objeto de texto.

recipient_type

string

Opcional.

Atualmente, somente é possível enviar mensagens para pessoas. Defina-o como individual.


Padrão: individual

status

string

O status de uma mensagem. Use este campo para marcar uma mensagem como read. Consulte os seguintes guias para obter informações:


sticker

objeto

Obrigatório quando type=sticker.

Um objeto media que contém uma figurinha.


API de Nuvem: suporte a figurinhas enviadas estáticas e animadas de terceiros, além de todos os tipos de figurinhas recebidas. Uma figurinha estática precisa ter 512x512 pixels e não ultrapassar 100 KB. Uma figurinha animada deve ter 512x512 pixels e não ultrapassar 500 KB.


API Local: somente figurinhas enviadas estáticas de terceiros têm suporte, além de todos os tipos de figurinhas recebidas. Uma figurinha estática precisa ter 512x512 pixels e não ultrapassar 100 KB. Figurinhas animadas não são aceitas.

template

objeto

Obrigatório quando type=template.

Um objeto template.

text

objeto

Obrigatório para mensagens de texto.

Um objeto text.

to

string

Obrigatório.

O número de telefone ou a identificação do WhatsApp do cliente para quem você deseja enviar uma mensagem. Consulte Phone Number Formats.


Se necessário, os usuários da API Local podem obter este número chamando o ponto de extremidade contacts.

type

string

Opcional.

O tipo de mensagem que você deseja enviar. Se for omitido, o padrão será text.

Objeto text

NomeDescrição

body

Obrigatório.

Contém o texto da mensagem, que pode ter URLs e formatação.

Objeto media

Para a API Local, o ID do objeto é retornado quando a mídia é carregada com sucesso no cliente local/de referência da WhatsApp Business API por meio do ponto de extremidade 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.

Objeto contacts

Em contacts, é possível aninhar estes objetos: addresses, emails, name, org, phone e urls. Os objetos pluralizados devem ser agrupados em uma matriz, conforme mostrado no exemplo abaixo.

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.

Veja o exemplo de um objeto contacts com objetos pluralizados aninhados:

"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"
        }]
    }
]

Objeto 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.

Objeto template

Em template, é possível aninhar os objetos components e language.

A partir da v2.27.8, o namespace do modelo precisa ser o mesmo associado à WABA cujo número de telefone está no cliente local do WhatsApp Business. Caso contrário, a mensagem não será enviada.

Além disso, na v2.41 e posteriores, o namespace será um campo opcional.

NomeDescrição

namespace

Obrigatório.

Namespace do modelo.


Desde a v2.27.8, esse deve ser o namespace associado à conta comercial do WhatsApp que controla o número de telefone associado ao cliente atual da WhatsApp Business API. Caso contrário, a mensagem não será enviada.

name

Obrigatório.

Nome do modelo.

language

Obrigatório.

Especifica o idioma no qual o modelo pode ser renderizado. Apenas a política de idioma deterministic funciona com modelos de mensagem de mídia. Consulte a seção Idioma para obter mais informações.

components

Opcional.

Matriz contendo os parâmetros da mensagem.

Objeto components

Em components, é possível aninhar o objeto parameters. Além disso, é possível definir type como button.

NomeDescrição

type

Obrigatório.

Descreve o tipo component.
Valores:header, body e footer.

parameters

Opcional.

Matriz que inclui o conteúdo da mensagem.

Objeto do parâmetro

NomeDescrição

type

Obrigatório.

Descreve o tipo parameter.
Valores:text, currency, date_time, image, document e video.


Os tipos de mídia (image, document e video) seguem o mesmo formato usado em mensagens de mídia padrão. Consulte a documentação de mídia para obter mais informações. Atualmente, apenas documentos em PDF são compatíveis com modelos de mensagem de mídia.


Para obter mais informações sobre currency e date_time, consulte a seção Parâmetros localizáveis. Os parâmetros currency e date_time para mensagens de template utilizam fallback_value em vez de default. Veja o exemplo de solicitação acima.

Tipo de botão

No objeto components, é possível definir type como button. Estes são os parâmetros de botão:

NomeDescrição

sub_type

Obrigatório.

Tipo de botão a ser criado.
Valores: quick_reply, url, copy_code (available from 2.49 and onwards).

index

Obrigatório.

Índice de posição do botão. Até 10 botões podem usar os valores de índice de 0-9.

parameters

Obrigatório.

Os parâmetros do botão, definidos no momento da criação no seu Gerenciador de Negócios. Inclua os seguintes parâmetros:

  • type (obrigatório): indica o tipo de parâmetro do botão. Os valores compatíveis são payload, text e coupon_code.
  • payload (obrigatório para botões quick_reply): carga definida pelo desenvolvedor que retornará quando houver clique no botão, além do texto de exibição nele.
  • text (obrigatório para botões url): sufixo fornecido pelo desenvolvedor e que será anexado a um botão URL dinâmico criado anteriormente.
  • coupon_code (obrigatório para botões copy_code e disponível a partir da versão 2.49): código do cupom fornecido pelo desenvolvedor que é copiado após o clique no botão.

Veja o exemplo do tipo button com sub_type quick_reply:

 {
    "type": "button",
    "sub_type": "quick_reply",
    "index": 0,
    "parameters": 
     [{
    	"type": "payload",
    	"payload": "Yes-Button-Payload"
     }]
 } 

Veja o exemplo do tipo button com sub_type copy_code:

    
 { 
    "type": "button", 
    "sub_type": "copy_code", 
    "index": 0, 
    "parameters": 
    [{ 
     "type": "coupon_code", 
     "coupon_code": "DISCOUNT20" 
    }] 
 }

Objeto hsm

O objeto hsm foi descontinuado com a v2.39 local/de referência do WhatsApp Business. Em vez disso, use o objeto template.

Nome Descrição

namespace

Obrigatório.

O namespace que será usado. A partir da v2.2.7, se o namespace não corresponder ao element_name, a mensagem não será enviada.

element_name

Obrigatório.

O nome do elemento que indica qual modelo deve ser usado dentro do namespace. A partir da v2.2.7, se element_name não corresponder ao namespace, a mensagem não será enviada.

language

Obrigatório.

Permite a especificação de um idioma determinístico. Consulte a seção Idioma para saber mais.


Este campo permitia a opção fallback, mas ela se tornou obsoleta a partir da v2.27.8.

localizable_params

Obrigatório.

Este campo é uma matriz de valores a serem aplicados às variáveis no modelo. Para mais informações, consulte a seção Parâmetros localizáveis.

Objeto 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.

Objeto 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.


Não é possível usar espaços no começo ou no final dos IDs de botões.

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.

Exemplos

Mensagens de áudio:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "audio",
  "audio": {
      "id": "your-media-id",
  }
}

Mensagens de documento com filename:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "document",
  "document": {
      "id": "your-media-id",
      "filename": "your-document-filename"
  }
}

Mensagens de documento com link:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "document",
  "document": {
      "link": "http(s)://the-url"
      "provider": {
          "name" : "provider-name"
      }     
    }
}

Mensagens de vídeo com link:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "video",  
  "video": {
      "link": "http(s)://the-url"
      "provider": {
          "name" : "provider-name"
      }
    }
  }
}

Mensagem de texto:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "text",
  "text": {
      "body": "your-message-content"
  }
}

Mensagens interativas (listas):

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",           
            }
          ]
        },
        ...
      ]
    }
  }

}

Mensagens interativas (botões de resposta):

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

}

Mensagens interativas (de produto único e de vários produtos):

{ 
  "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"
    }
  }
}

Mensagens interativas (multiproduto):

{ 
  "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" }
                           ...
              ]},
               ...
       ]
     },  
    }
}

Mensagens interativas (catálogo):

{ 
  "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"
      	}
     },  
    }
}

Mensagens interativas (Flows):

{
  "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
          }
        }
      }
    }
  }
}

Veja a seguir um exemplo de payload em uma resposta. Os objetos de erro e meta foram omitidos por questões de concisão.

{
  "messages": [{ 
    "id": "message-id" 
  }]    
}

Se a solicitação for bem-sucedida, você receberá uma resposta com uma identificação de mensagem. Se a solicitação retornar uma seção errors, verifique a mensagem original e corrija os erros antes de reenviar a solicitação. Para saber mais sobre erros, consulte Códigos de erro do cliente da WhatsApp Business API e Códigos de status HTTP.

Esse recurso ficará disponível para empresas no Brasil, na Colômbia e em Singapura a partir de 12 de setembro de 2023 e para todas as empresas em 12 de outubro de 2023.

Se a solicitação for retida para avaliação, a resposta conterá uma propriedade message_status com uma notificação indicando que a mensagem não foi enviada imediatamente e será encaminhada ou descartada após a validação da qualidade. Essa propriedade só existirá se a mensagem for retida.

    {
      "messages": [{ 
        "id": "message-id",
        "message_status": "Message has been held because quality assessment is pending",
      }]    
    }
    

Como formatar mensagens de texto

O WhatsApp permite algumas formatações nas mensagens. Para formatar toda ou parte de uma mensagem, use estes símbolos de formatação:

FormataçãoSímboloExemplo

Negrito

Asterisco (*)

Seu total é de *US$ 10,50*.

Itálico

Sublinhado (_)

Bem-vindo ao _WhatsApp_!

Riscado

Til (~)

Isso é ~ótimo~ o melhor!

Code

Três acentos graves (```)

```print 'Olá, mundo';```

Desempenho

Nesse contexto, desempenho representa o número de mensagens que podem ser enviadas em um segundo usando o cliente local/de referência do WhatsApp Business. O desempenho máximo que pode ser alcançado depende de uma série de fatores, sendo o mais importante a escolha da configuração do cliente e se uma mensagem está sendo enviada para um novo usuário ou usuário existente — a configuração das sessões de criptografia leva um pouco mais de tempo ao enviar mensagens para um novo usuário.

Configuração do clienteMensagens de texto aceitas por segundo

Fragmento único

70

Múltiplos fragmentos (32)

250

Perguntas frequentes

Observação: não envie a mesma mensagem repetidamente para o mesmo destinatário usando a WhatsApp Business API.

Existem vários motivos que podem fazer com que sua taxa de entrega não seja de 100%. Isso pode ocorrer devido a usuários com acesso esporádico à rede ou que ficam inativos por um período de tempo ou para criar uma experiência de usuário de alta qualidade.

As mensagens que podem ser entregues com o WhatsApp terão uma taxa de entrega muito alta. No entanto, existem muitas razões pelas quais uma mensagem pode não ser entregue. Para ter acesso ao status exato de uma mensagem, monitore seus retornos de chamada. Isso é diferente de enviar mensagens por SMS, em que você não tem acesso ao status final de entrega e reenviar a mensagem pode gerar um resultado diferente.

As mensagens podem não ser entregues porque o smartphone do usuário está fora de serviço ou sem bateria, ou porque ele perdeu o aparelho, está comprando um novo e desabilitou o SIM. É possível que haja erros na capacidade do cliente da empresa de se conectar à rede. Também pode haver falha na entrega de retornos de chamada (Webhooks). Você pode monitorar essas situações usando o nó health. É possível ativar os retornos de chamada de recebimento do servidor para saber se a mensagem chegou à nuvem do servidor do WhatsApp.

Quando um usuário se conectar novamente à rede, todas as mensagens que foram enviadas por você serão entregues a ele. Receber mais de uma mensagem com o mesmo conteúdo gera uma experiência ruim para o usuário. Isso aumenta a probabilidade de ele reclamar ou bloquear você. Você também corre o risco de ter sua conta banida.

Quando você envia uma mensagem e recebe um número de identificação de mensagens da API, isso significa que foi feito o possível para efetuar o envio. Não reenvie o mesmo conteúdo para o mesmo destinatário.

Caso suas taxas de entrega se mantenham baixas por um período prolongado, crie um tíquete no Suporte Direto.

Quando você recebe o ID de uma mensagem que enviou, isso significa que a solicitação de mensagem foi armazenada no banco de dados. O Cliente da API do WhatsApp Business continuará tentando enviar a mensagem até receber o reconhecimento do servidor do WhatsApp. Não há um limite de tempo para esse processo. Depois disso, o servidor do WhatsApp tentará entregar a mensagem ao telefone do usuário. Se o telefone do usuário não estiver online, a mensagem ficará armazenada por 30 dias até ser descartada pelo servidor do WhatsApp.

Sim! O WhatsApp permite que você formate o texto selecionado na mensagem com negrito, itálico, tachado ou espaçamento uniforme.

No momento, não existe uma maneira de ver quantos usuários bloquearam sua empresa. O melhor indicador seria acompanhar os retornos de chamada indicando o status e, se você não receber o status delivered, isso significará que o usuário bloqueou sua empresa ou está sem uma conexão de rede. Consulte a documentação do Webhook para obter mais detalhes.

Se um usuário tiver bloqueado sua empresa, a API Contatos continuará retornando o número de telefone como um usuário válido do WhatsApp. No entanto, se você enviar uma mensagem, ela nunca será recebida. Em caso de mensagens pagas, você não será cobrado.

Não. Não há garantia de que as mensagens serão entregues na mesma ordem na qual foram enviadas. Se a ordem for essencial no seu caso de uso, a abordagem sugerida é a de acompanhar o retorno de chamada indicando que a primeira mensagem foi entregue antes de enviar a segunda.

Ao usar o nó messages, é necessário definir o cabeçalho Content-Type como application/json para que o Cliente da API do WhatsApp Business possa analisar o corpo da mensagem. Também existe um cabeçalho Authorization, que deve ser definido e conter um token de acesso que não esteja expirado. Consulte a documentação sobre login e autenticação para obter mais informações sobre como obter um token e quando ele expira.

Poderá haver casos em que você precisará de mais tempo para atender à solicitação de um cliente, e será necessário enviar uma resposta ao cliente após o período de 24h. Recomendamos criar modelos de mensagem para:

  • enviar o resultado ao usuário ou
  • solicitar uma resposta do usuário com o objetivo de ativar uma nova janela de atendimento ao cliente.

Em ambos os casos, adicione a maior quantidade possível de contexto ao modelo de mensagem. Por exemplo:

  • “Olá, {{1}}! A respeito do problema que você relatou anteriormente, viemos informar que, infelizmente, {{2}}. Pedimos desculpas por qualquer inconveniência causada."
  • Temos atualizações a respeito do seu ticket. Responda a esta mensagem se deseja continuar recebendo suporte.”