Este documento foi atualizado.
A tradução para Português (Brasil) não foi concluída ainda.
Atualização em inglês: 2 de fev

Mensagens

Use o ponto de extremidade /PHONE_NUMBER_ID/messages para enviar texto, mídia, contatos, localização e mensagens interativas, bem como modelos de mensagem para seus clientes. Saiba mais sobre as mensagens que podem ser enviadas.

Ponto de extremidadeAutenticação

/PHONE_NUMBER_ID/messages

Developers can authenticate their API calls with the access token generated in the App Dashboard > WhatsApp > API Setup.


Solution Partners must authenticate themselves with an access token with the whatsapp_business_messaging permission.

As mensagens são identificadas por uma identificação única (WAMID). É possível rastrear o status da mensagem nos webhooks por meio do seu WAMID. Também é possível marcar uma mensagem recebida como lida por meio do ponto de extremidade das mensagens. Essa WAMID pode ter um tamanho máximo de até 128 caracteres.

Com a API de Nuvem, não há uma forma de verificar de forma explícita se um número de telefone tem um ID do WhatsApp. Para enviar uma mensagem usando essa API, envie-a diretamente para o número de telefone do cliente, depois que você obter aceitação para o WhatsApp. Consulte Reference, Messages para ver exemplos.

Objeto de mensagem

Para enviar uma mensagem, primeiro é preciso montar um objeto de mensagem com o conteúdo que deseja enviar. Estes são os parâmetros usados em um objeto message:

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.

Os seguintes objetos estão aninhados dentro do objeto da mensagem:

Objeto contacts

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.

Objeto interactive

NomeDescrição

action

objeto

Obrigatório.

A ação desejada do usuário após a leitura da mensagem.

body

objeto

Opcional para o tipo product. Obrigatório para os outros tipos de mensagem.

Um objeto com o corpo da mensagem.


O objeto body contém o seguinte campo:

textstring Obrigatória se o corpo estiver presente. O conteúdo da mensagem. Há compatibilidade com emojis e Markdown. Tamanho máximo: 1.024 caracteres.

footer

objeto

Opcional. Um objeto com o rodapé da mensagem.


O objeto footer contém o seguinte campo:

textstring Obrigatória se o rodapé estiver presente. O conteúdo do rodapé. Há compatibilidade com emojis, markdown e links. Tamanho máximo: 60 caracteres.

header

objeto

Obrigatório para o tipo product_list. Opcional para outros tipos.

O conteúdo do cabeçalho exibido na parte superior da mensagem. Não será possível definir um cabeçalho caso seu objeto interativo seja do tipo product. Consulte o objeto header para mais informações.

type

objeto

Obrigatório.

O tipo de mensagem interativa que você quer enviar. Valores compatíveis:


  • button: use para botões de resposta.
  • catalog_message: use para mensagens de catálogo.
  • list: use para mensagens de lista.
  • product: use para mensagens de um único produto.
  • product_list: use para mensagens multiproduto.
  • flow: use para mensagens de fluxos.

Os seguintes objetos estão aninhados dentro do objeto interactive:

Objeto action

NomeDescrição

button

string

Obrigatório para mensagens de lista.

O conteúdo do botão. A string não pode estar vazia e deve ser única na mensagem. É compatível com emojis, mas não com Markdown.


Tamanho máximo: 20 caracteres.

buttons

matriz de objetos

Obrigatório para botões de resposta.

Um objeto de botão pode conter os seguintes parâmetros:


  • type: o único tipo compatível é reply (para o botão de resposta)
  • title – título do botão. A string não pode estar vazia e deve ser única na mensagem. É compatível com emojis, mas não com Markdown. Tamanho máximo: 20 caracteres.
  • id – identificador único do botão. Essa identificação será retornada no webhook quando o usuário clicar no botão. Tamanho máximo: 256 caracteres.

Você pode ter até 3 botões. Não deixe espaços no início ou no fim ao definir a identificação.

catalog_id

string

Obrigatório para mensagens de produto único e multiproduto.

Identificador único do catálogo do Facebook vinculado à sua conta do WhatsApp Business. Esta identificação pode ser recuperada por meio do Gerenciador de Comércio da Meta.

product_retailer_id

string

Obrigatório para mensagens de produto único e multiproduto.

Identificador único do produto em um catálogo.


Para obter esta identificação, acesse o Gerenciador de Comércio da Meta e selecione sua conta empresarial da Meta. Será exibida uma lista de lojas associadas à sua conta. Clique na loja que deseja usar. No painel esquerdo, clique em Catálogo > Itens e busque o item que deseja mencionar. A identificação fica abaixo do nome do item.

sections

matriz de objetos

Obrigatório para mensagens de lista e multiproduto.

Matriz de objetos section. Mínimo de 1, máximo de 10. Consulte o objeto section.

mode

string

Opcional para mensagens de fluxos.

O modo atual do fluxo, draft ou published.


Padrão: published

flow_message_version

string

Obrigatório para mensagens de fluxos.

Deve ser 3.

flow_token

string

Obrigatório para mensagens de fluxos.

Um token que é gerado pela empresa para servir de identificador.

flow_id

string

Obrigatório para mensagens de fluxos.

Identificador único do fluxo fornecido pelo WhatsApp.

flow_cta

string

Obrigatório para mensagens de fluxos.

Texto no botão CTA, por exemplo. "Inscreva-se".


Comprimento máximo: 20 caracteres (sem emoji).

flow_action

string

Opcional para mensagens de fluxos.

navigate ou data_exchange. Use navigate para predefinir a primeira tela como parte da mensagem. Use data_exchange para casos de uso avançados, em que a primeira tela é fornecida pelo seu ponto de extremidade.


Padrão: navigate

flow_action_payload

objeto

Opcional para mensagens de fluxos.

Obrigatório somente se flow_action for navigate. O objeto pode conter os seguintes parâmetros:

String screenObrigatória. O id da primeira tela do fluxo.

Objeto dataOpcional. Os dados de entrada para a primeira tela do fluxo. Deve ser um objeto não vazio.

Objeto header

NomeDescrição

document

objeto

Obrigatório caso type seja definido como document.

Contém o objeto media para este documento.

image

objeto

Obrigatório caso type seja definido como image.

Contém o objeto media para esta imagem.

text

string

Obrigatório caso type seja definido como text.

O texto do cabeçalho. A formatação é compatível com emojis, mas não com Markdown.


Tamanho máximo: 60 caracteres.

type

string

Obrigatório.

O tipo de cabeçalho que você quer usar. Valores compatíveis:


  • text – usado para mensagens de lista, botões de resposta e mensagens multiproduto.
  • video – usado para botões de resposta.
  • image – usado para botões de resposta.
  • document – usado para botões de resposta.

video

objeto

Obrigatório caso type seja definido como video.

Contém o objeto media para este vídeo.

Objeto section

NomeDescrição

product_items

matriz de objetos

Obrigatório para mensagens multiproduto.

Matriz de objetos product. Existe um mínimo de 1 produto por seção e um máximo de 30 produtos em todas as seções.


Cada objeto product contém o seguinte campo:


  • String product_retailer_idObrigatória para mensagens multiproduto. Identificador único do produto em um catálogo. Para obter esta identificação, acesse o Gerenciador de Comércio da Meta, selecione sua conta e a loja que deseja utilizar. Depois, clique em Catálogo > Itens e encontre o item que deseja mencionar. A identificação fica abaixo do nome do item.

rows

matriz de objetos

Obrigatório para mensagens de lista.

Contém uma lista de linhas. É possível ter um total de 10 linhas nas seções.


Cada linha deve ter um título (tamanho máximo: 24 caracteres) e uma identificação ID (tamanho máximo: 200 caracteres). É possível adicionar uma descrição (tamanho máximo: 72 caracteres), mas é opcional.


Exemplo:

"rows": [
  {
   "id":"unique-row-identifier-here",
   "title": "row-title-content-here",
   "description": "row-description-content-here",           
   }
]

title

string

Obrigatório se a mensagem tiver mais de uma seção.

O título da seção.


Tamanho máximo: 24 caracteres.

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 media

Consulte Get Media ID para obter informações sobre como obter a identificação do seu objeto media. Para obter informações sobre tipos de mídia compatíveis para a API de Nuvem, consulte Supported Media Type.

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 template

Preços baseados em conversa mudaram. Consulte Preços para saber como nosso novo modelo de preços baseado em conversa funciona.

Além disso, a visibilidade de metric_types mudou desde 1º de julho de 2023. Consulte a tabela Análises de conversas para ver mais detalhes.

NameDescription

name

Required.

Name of the template.

language

object

Required.

Contains a language object. Specifies the language the template may be rendered in.


The language object can contain the following fields:

policystringRequired. The language policy the message should follow. The only supported option is deterministic. See Language Policy Options.

codestringRequired. The code of the language or locale to use. Accepts both language and language_locale formats (e.g., en and en_US). For all codes, see Supported Languages.

components

array of objects

Optional.

Array of components objects containing the parameters of the message.

namespace

Optional. Only used for On-Premises API.

Namespace of the template.

Os seguintes objetos estão aninhados dentro do objeto template:

Objeto do parâmetro button

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

type

string

Obrigatório.

Indica o tipo de parâmetro do botão.

Opções compatíveis

  • "payload"
  • "text"

payload

Obrigatório para botões quick_reply.

Carga definida pelo desenvolvedor que será retornada junto com o texto de exibição no botão quando houver um clique.


Para ver um exemplo, consulte Callback from a Quick Reply Button Click.

text

Obrigatório para botões de URL.

Sufixo fornecido pelo desenvolvedor que é anexado à URL de prefixo predefinida no modelo.

Objeto components

NameDescription (Click the arrow in the left column for supported options.)

type

string

Required.

Describes the component type.


Example of a components object with an array of parameters object nested inside:

 "components": [{
   "type": "body",
   "parameters": [{
                "type": "text",
                "text": "name"
            },
            {
            "type": "text",
            "text": "Hi there"
            }]
      }] 

Supported Options

  • header
  • body
  • button

For text-based templates, we only support the type=body.

sub_type

string

Required when type=button. Not used for the other types.

Type of button to create.

Supported Options

  • quick_reply: Refers to a previously created quick reply button that allows for the customer to return a predefined message.
  • url: Refers to a previously created button that allows the customer to visit the URL generated by appending the text parameter to the predefined prefix URL in the template.
  • catalog: Refers to a previously created catalog button that allows for the customer to return a full product catalog.

parameters

array of objects

Required when type=button.

Array of parameter objects with the content of the message.

For components of type=button, see the button parameter object.

index

Required when type=button. Not used for the other types.

Position index of the button. You can have up to 10 buttons using index values of 0 to 9.

Objeto currency

NomeDescrição

fallback_value

Obrigatório.

Texto padrão se a localização falhar.

code

Obrigatório.

Código da moeda conforme a norma ISO 4217.

amount_1000

Obrigatório.

Valor multiplicado por 1.000.

Objeto Date_Time

NomeDescrição

fallback_value

Obrigatório.

Texto padrão. Para a API de Nuvem, usamos sempre o valor de fallback e não tentamos localizar usando outros campos opcionais.

Objeto parameter

NomeDescrição

type

string

Obrigatório.

Descreve o tipo de parâmetro. Valores compatíveis:


  • currency
  • date_time
  • document
  • image
  • text
  • video

Para modelos baseados em texto, os únicos tipos de parâmetros compatíveis são currency, date_time e text.

text

string

Obrigatório quando type=text.

O texto da mensagem. O limite de caracteres varia com base no seguinte tipo de componente incluído.


Para o tipo de componente header:

  • 60 caracteres

Para o tipo de componente body:

  • 1024 caracteres se outros tipos de componentes estiverem incluídos
  • 32768 caracteres se body for o único tipo de componente incluído

currency

objeto

Obrigatório quando type=currency.

Um objeto currency.

date_time

objeto

Obrigatório quando type=date_time.

Um objeto date_time.

image

objeto

Obrigatório quando type=image.

Um objeto media do tipo image. Não há suporte para legendas quando são usadas em um modelo de mídia.

document

objeto

Obrigatório quando type=document.

Um objeto media do tipo document. Somente documentos em PDF são compatíveis com modelos de mensagem baseados em mídia. Não há suporte para legendas quando são usadas em um modelo de mídia.

video

objeto

Obrigatório quando type=video.

Um objeto media do tipo video. Não há suporte para legendas quando são usadas em um modelo de mídia.

Objeto text

NomeDescrição

body

string

Obrigatório para mensagens de texto.

O texto da mensagem de texto que pode conter URLs que começam com http:// ou https:// e formatação. Consulte as opções de formatação disponíveis aqui.


Se incluir URLs no texto e quiser acrescentar uma caixa de prévia nas mensagens de texto (preview_url: true), certifique-se de que a URL comece com http:// ou https:// — é recomendado usar URLs https://. É preciso incluir um nome de host, pois os endereços IP não serão correspondidos.


Tamanho máximo: 4096 caracteres

preview_url

booliano

Opcional. Apenas API de Nuvem.

Defina para true para que os apps WhatsApp Messenger e WhatsApp Business tentem renderizar uma prévia de link de qualquer URL na string de texto body. URLs devem começar com http:// ou https://. Se várias URLs estiverem na string de texto body, apenas a primeira URL será renderizada.


Se preview_url for omitido, ou se não for possível recuperar uma prévia, um link clicável será renderizado.


Usuários da API Local devem utilizar preview_url na carga de mensagens de nível superior. Consulte Parameters.

Objeto reaction

NomeDescrição

message_id

string

Obrigatório.

A identificação de mensagem do WhatsApp (wamid) da mensagem na qual a reação deve aparecer. A reação não será enviada se:


  • A mensagem tiver mais de 30 dias
  • A mensagem for uma mensagem de reação
  • A mensagem foi apagada

Se a identificação for de uma mensagem que foi apagada, a mensagem não será entregue.

emoji

string

Obrigatório.

Emoji que deverá aparecer na mensagem.


  • Todos os emojis compatíveis com dispositivos Android e iOS são aceitos.
  • Emojis renderizados são compatíveis.
  • Se estiver usando valores de emoji unicode, eles deverão ser codificados com escape do Java ou JavaScript.
  • Apenas um emoji pode ser enviado em uma mensagem de reação
  • Use uma string vazia para remover um emoji enviado anteriormente.

Visão geral

Guias

Consulte os seguintes guias para obter informações completas sobre como utilizar o ponto de extremidade /messages para enviar mensagens:

Exemplos

Mensagens de texto

curl -X  POST \
'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '
    {
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "PHONE_NUMBER",
      "type": "text",
      "text": { // the text object
        "preview_url": false,
        "body": "MESSAGE_CONTENT"
        }
    }'

Mensagens de reação

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "reaction",
  "reaction": {
    "message_id": "wamid.HBgLM...",
    "emoji": "\uD83D\uDE00"
  }
}'

Mensagens de mídia

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM-PHONE-NUMBER-ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE-NUMBER",
  "type": "image",
  "image": {
    "id" : "MEDIA-OBJECT-ID"
  }
}'

Mensagens de localização

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "location",
  "location": {
    "longitude": LONG_NUMBER,
    "latitude": LAT_NUMBER,
    "name": LOCATION_NAME,
    "address": LOCATION_ADDRESS
  }
}'

Mensagens de contato

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "contacts",
  "contacts": [{
      "addresses": [{
          "street": "STREET",
          "city": "CITY",
          "state": "STATE",
          "zip": "ZIP",
          "country": "COUNTRY",
          "country_code": "COUNTRY_CODE",
          "type": "HOME"
        },
        {
          "street": "STREET",
          "city": "CITY",
          "state": "STATE",
          "zip": "ZIP",
          "country": "COUNTRY",
          "country_code": "COUNTRY_CODE",
          "type": "WORK"
        }],
      "birthday": "YEAR_MONTH_DAY",
      "emails": [{
          "email": "EMAIL",
          "type": "WORK"
        },
        {
          "email": "EMAIL",
          "type": "HOME"
        }],
      "name": {
        "formatted_name": "NAME",
        "first_name": "FIRST_NAME",
        "last_name": "LAST_NAME",
        "middle_name": "MIDDLE_NAME",
        "suffix": "SUFFIX",
        "prefix": "PREFIX"
      },
      "org": {
        "company": "COMPANY",
        "department": "DEPARTMENT",
        "title": "TITLE"
      },
      "phones": [{
          "phone": "PHONE_NUMBER",
          "type": "HOME"
        },
        {
          "phone": "PHONE_NUMBER",
          "type": "WORK",
          "wa_id": "PHONE_OR_WA_ID"
        }],
      "urls": [{
          "url": "URL",
          "type": "WORK"
        },
        {
          "url": "URL",
          "type": "HOME"
        }]
    }]
}'

Mensagens interativas

Mensagens de produto único

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
   "messaging_product": "whatsapp",
   "recipient_type": "individual",
   "to": "PHONE_NUMBER",
   "type": "interactive",
   "interactive": {
     "type": "product",
     "body": {
       "text": "optional body text"
     },
     "footer": {
       "text": "optional footer text"
     },
     "action": {
       "catalog_id": "CATALOG_ID",
       "product_retailer_id": "ID_TEST_ITEM_1"
     }
   }
 }'

Mensagens multiproduto

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
 "messaging_product": "whatsapp",
   "recipient_type": "individual",
   "to": "PHONE_NUMBER",
   "type": "interactive",
   "interactive": {
     "type": "product_list",
     "header":{
       "type": "text",
       "text": "header-content"
     },
     "body": {
       "text": "body-content"
     },
     "footer": {
       "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": "section-title",
           "product_items": [
             { "product_retailer_id": "product-SKU-in-catalog" },
             { "product_retailer_id": "product-SKU-in-catalog" },
             ...
           ]
         }
       ]
     }
   }
 }

Mensagens de catálogo

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive" : {
    "type" : "catalog_message",
    "body" : {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "catalog_message",
      "parameters": { 
        "thumbnail_product_retailer_id": "<Product-retailer-id>"
      }
    }
  }
}'

Mensagens de fluxo

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "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": {
            "user_name": "name",
            "user_age": 25
          }
        }
      }
    }
  }
}'
  

Mensagens de lista

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "HEADER_TEXT"
    },
    "body": {
      "text": "BODY_TEXT"
    },
    "footer": {
      "text": "FOOTER_TEXT"
    },
    "action": {
      "button": "BUTTON_TEXT",
      "sections": [
        {
          "title": "SECTION_1_TITLE",
          "rows": [
            {
              "id": "SECTION_1_ROW_1_ID",
              "title": "SECTION_1_ROW_1_TITLE",
              "description": "SECTION_1_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_1_ROW_2_ID",
              "title": "SECTION_1_ROW_2_TITLE",
              "description": "SECTION_1_ROW_2_DESCRIPTION"
            }
          ]
        },
        {
          "title": "SECTION_2_TITLE",
          "rows": [
            {
              "id": "SECTION_2_ROW_1_ID",
              "title": "SECTION_2_ROW_1_TITLE",
              "description": "SECTION_2_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_2_ROW_2_ID",
              "title": "SECTION_2_ROW_2_TITLE",
              "description": "SECTION_2_ROW_2_DESCRIPTION"
            }
          ]
        }
      ]
    }
  }
}'

Botão Responder

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "body": {
      "text": "BUTTON_TEXT"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_1",
            "title": "BUTTON_TITLE_1"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_2",
            "title": "BUTTON_TITLE_2"
          }
        }
      ]
    }
  }
}'

Mensagens de modelo

Preços baseados em conversa mudaram. Consulte Preços para saber como nosso novo modelo de preços baseado em conversa funciona.

Além disso, a visibilidade de metric_types mudou desde 1º de julho de 2023. Consulte a tabela Análises de conversas para ver mais detalhes.

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "template",
  "template": {
    "name": "TEMPLATE_NAME",
    "language": {
      "code": "LANGUAGE_AND_LOCALE_CODE"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "http(s)://URL"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "TEXT_STRING"
          },
          {
            "type": "currency",
            "currency": {
              "fallback_value": "VALUE",
              "code": "USD",
              "amount_1000": NUMBER
            }
          },
          {
            "type": "date_time",
            "date_time": {
              "fallback_value": "MONTH DAY, YEAR"
            }
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "0",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "1",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      }
    ]
  }
}'

Mensagem Responder à

curl -X POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "context": {
     "message_id": "MESSAGE_ID"
  },
  "to": "PHONE_NUMBER",
  "type": "text",
  "text": {
    "preview_url": false,
    "body": "your-text-message-content"
  }
}’

Resposta bem-sucedida

    {
      "messaging_product": "whatsapp",
      "contacts": [
        {
          "input": "16505555555",
          "wa_id": "16505555555"
        }
      ],
      "messages": [
        {
          "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
        }
      ]
    }
    

Applies to businesses in Brazil, Colombia, and Singapore, starting September 12, 2023. Applies to all businesses starting October 12, 2023.

Messages will have one of the following statuses which will be returned in each of the messages objects

  • "message_status":"accepted" : means the message was sent to the intended recipient
  • "message_status":"held_for_quality_assessment": means the message send was delayed until quality can be validated and it will either be sent or dropped at this point

      {
      "messaging_product": "whatsapp",
      "contacts": [
        {
          "input": "16505555555",
          "wa_id": "16505555555"
        }
      ],
      "messages": [
        {
          "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA",
          "message_status": "accepted",
        }
      ]
    }