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.
/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.
Você precisará fazer o seguinte:
Na v2.39 e posteriores, não é necessário chamar o nó de contatos antes de enviar uma mensagem.
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.).
Estes são os principais parâmetros usados em solicitações POST de /messages
:
Nome | Descrição (clique na seta da coluna à esquerda para ver as opções compatíveis) |
---|---|
| Obrigatório quando Um objeto |
| 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 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. |
| Obrigatório quando Um 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:
Somente a API de Nuvem. |
| Obrigatório quando Um objeto |
| Contém um objeto |
| Obrigatório quando Um objeto |
| Obrigatório quando Um objeto |
| Obrigatório quando Um objeto |
| Obrigatório Serviço de mensagens usado para a solicitação. Use Somente a API de Nuvem. |
| Obrigatório se 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: Somente API Local. Os usuários da API de Nuvem podem usar a mesma funcionalidade com o campo |
| Opcional. Atualmente, somente é possível enviar mensagens para pessoas. Defina-o como Padrão: |
| O status de uma mensagem. Use este campo para marcar uma mensagem como
|
| Obrigatório quando Um objeto 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. |
| Obrigatório quando Um objeto |
| Obrigatório para mensagens de texto. Um objeto |
| 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 |
| Opcional. O tipo de mensagem que você deseja enviar. Se for omitido, o padrão será |
Nome | Descrição |
---|---|
| Obrigatório. Contém o texto da mensagem, que pode ter URLs e formatação. |
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
.
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 |
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.
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
|
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" }] } ]
Name | Description |
---|---|
| Required. Location latitude in decimal degrees. |
| Required. Location longitude in decimal degrees. |
| Required. Name of the location. |
| Required. Address of the location. |
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.
Nome | Descrição |
---|---|
| Obrigatório. Namespace do modelo. Desde a |
| Obrigatório. Nome do modelo. |
| Obrigatório. Especifica o idioma no qual o modelo pode ser renderizado. Apenas a política de idioma |
| Opcional. Matriz contendo os parâmetros da mensagem. |
Em components
, é possível aninhar o objeto parameters
. Além disso, é possível definir type
como button
.
Nome | Descrição |
---|---|
| Obrigatório. Descreve o tipo |
| Opcional. Matriz que inclui o conteúdo da mensagem. |
Nome | Descrição |
---|---|
| Obrigatório. Descreve o tipo Os tipos de mídia ( Para obter mais informações sobre |
No objeto components
, é possível definir type
como button
. Estes são os parâmetros de botão:
Nome | Descrição |
---|---|
| Obrigatório. Tipo de botão a ser criado. |
| Obrigatório. Índice de posição do botão. Até 10 botões podem usar os valores de índice de |
| 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:
|
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" }] }
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 |
---|---|
| Obrigatório. O namespace que será usado. A partir da |
| Obrigatório. O nome do elemento que indica qual modelo deve ser usado dentro do namespace. A partir da |
| 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 |
| 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. |
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
Não é possível usar espaços no começo ou no final dos IDs de botões. |
| 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
|
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", }] }
O WhatsApp permite algumas formatações nas mensagens. Para formatar toda ou parte de uma mensagem, use estes símbolos de formatação:
Formatação | Símbolo | Exemplo |
---|---|---|
Negrito | Asterisco (*) | Seu total é de *US$ 10,50*. |
Itálico | Sublinhado (_) | Bem-vindo ao _WhatsApp_! |
Til (~) | Isso é ~ótimo~ o melhor! | |
| Três acentos graves (```) | ```print 'Olá, mundo';``` |
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 cliente | Mensagens de texto aceitas por segundo |
---|---|
Fragmento único | 70 |
Múltiplos fragmentos (32) | 250 |
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:
Em ambos os casos, adicione a maior quantidade possível de contexto ao modelo de mensagem. Por exemplo: