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

Como enviar mensagens

É possível usar a API para enviar os seguintes tipos de mensagem:

Todos esses tipos, exceto as mensagens de reação, podem ser designados como uma resposta.

Sintaxe da solicitação

Use o ponto de extremidade POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages para enviar mensagens aos usuários do WhatsApp:

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages

Corpo da publicação

Todas as solicitações para enviar mensagens usam o formato de objeto principal a seguir.

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<TO>",
  "type": "<TYPE>",
  
  /* TEXT MESSAGES ONLY */
  "text": {<TEXT>}

  /* REACTION MESSAGES ONLY */
  "reaction": {<REACTION>}

  /* MEDIA MESSAGES ONLY. FOR EXAMPLE, FOR IMAGE MEDIA: */
  "image": {<IMAGE>}

  /* LOCATION MESSAGES ONLY */
  "location": {<LOCATION>}

  /* CONTACTS MESSAGES ONLY */
  "contacts": {<CONTACTS>}

  /* INTERACTIVE MESSAGES ONLY */
  "interactive": {<INTERACTIVE>}

  /* TEMPLATE MESSAGES ONLY */
  "template": {<TEMPLATE>}

}

Parâmetros do corpo da publicação

Espaço reservadoDescriçãoExemplo de valor

<TO>

String

O ID do WhatsApp ou o número de telefone do cliente que deve receber a mensagem. Consulte Formatos de números de telefone.

+16315551234

<TYPE>

String

O tipo de mensagem.

text

<TEXT>

Objeto

O conteúdo da mensagem de texto.

Consulte Mensagens de texto.

<REACTION>

Objeto

O conteúdo da mensagem de reação.

Consulte Mensagens de reação.

<IMAGE>

Objeto

O conteúdo da mensagem de mídia. O nome da propriedade deve corresponder ao tipo de mensagem de mídia sendo enviada (image para imagem, video para vídeo e assim por diante).

Consulte Mensagens de mídia.

<LOCATION>

Objeto

O conteúdo da mensagem de localização.

Consulte Mensagens de localização.

<CONTACTS>

Objeto

O conteúdo da mensagem de contato.

Consulte Mensagens com contatos.

<INTERACTIVE>

Objeto

O conteúdo da mensagem interativa.

Consulte Mensagens interativas.

Os exemplos neste documento descrevem os requisitos de carga do corpo da publicação para cada tipo de mensagem.

Sintaxe da resposta

Se o processo for bem-sucedido, a API enviará a seguinte resposta:

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "<WHATSAPP_USER_PHONE_NUMBER>",
      "wa_id": "<WHATSAPP_USER_ID>"
    }
  ],
  "messages": [
    {
      "id": "<WHATSAPP_MESSAGE_ID>"
    }
  ]
}

Parâmetros de resposta

PlaceholderDescriptionSample Value

<WHATSAPP_USER_PHONE_NUMBER>

String

WhatsApp user's WhatsApp phone number. May not match wa_id value.

+16505551234

<WHATSAPP_USER_ID>

String

WhatsApp user's WhatsApp ID. May not match input value.

16505551234

<WHATSAPP_MESSAGE_ID>

String

WhatsApp Message ID.


This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks.

wamid.HBgLMTY0NjcwNDM1OTUVAgARGBI4MjZGRDA0OUE2OTQ3RkEyMzcA

WhatsApp User Phone Number Formats

Plus signs (+), hyphens (-), parenthesis ((,)), and spaces are supported in send message requests.

We highly recommend that you include both the plus sign and country calling code when sending a message to a customer. If the plus sign is omitted, your business phone number's country calling code is prepended to the customer's phone number. This can result in undelivered or misdelivered messages.

For example, if your business is in India (country calling code 91) and you send a message to the following customer phone number in various formats:

Number In Send Message RequestNumber Message Delivered ToOutcome

+16315551234

+16315551234

Correct number

+1 (631) 555-1234

+16315551234

Correct number

(631) 555-1234

+916315551234

Potentially wrong number

1 (631) 555-1234

+9116315551234

Potentially wrong number

Mensagens de texto

As mensagens de texto contêm apenas um corpo de texto e uma prévia de link opcional.

Mensagens de reação

As mensagens de reação são reações com emoji que você pode aplicar a uma mensagem anterior recebida de um usuário do WhatsApp.

Mensagens de mídia

Você pode enviar mensagens de áudio, documento, imagem, figurinha e vídeo para usuários do WhatsApp.

Mensagens de áudio

As mensagens de áudio mostram um ícone e um link para um arquivo de áudio. Quando o usuário do WhatsApp toca no ícone, o cliente do WhatsApp carrega e reproduz o arquivo.

Mensagens de documento

As mensagens de documento exibem um ícone de documento para o usuário do WhatsApp clicar e baixar.

Mensagens de imagem

As mensagens de imagem exibem uma única imagem e uma legenda opcional.

Mensagens de figurinhas

As mensagens de figurinhas exibem imagens animadas ou estáticas de figurinhas em uma mensagem do WhatsApp.

Mensagens de vídeo

As mensagens de vídeo mostram uma prévia em miniatura de uma imagem de vídeo com uma legenda opcional. Quando o usuário do WhatsApp toca na prévia, o vídeo é carregado e exibido.

Ativos de mídia

Os ativos de mídia devem ser carregados para o número de telefone comercial que enviará a mensagem, ou você deve hospedar o ativo em um servidor público e incluir a URL dele na solicitação de envio de mensagem.

Para reduzir a probabilidade de erros e evitar solicitações desnecessárias para seu servidor público, recomendamos que carregue seus ativos de mídia e use os IDs deles ao enviar mensagens.

Cache HTTP de mídia

A API de Nuvem do WhatsApp é compatível com o cache HTTP de mídia. Caso esteja usando o link para um ativo de mídia no seu servidor (e não o id de um ativo que você carregou nos nossos servidores), você poderá solicitar o armazenamento do ativo em cache para reutilização em mensagens futuras. Basta incluir os cabeçalhos a seguir na resposta do servidor quando solicitarmos o ativo. Caso nenhum dos cabeçalhos seja incluído, não armazenaremos o ativo em cache.

Cache-Control: <CACHE_CONTROL>
Last-Modified: <LAST_MODIFIED>
ETag: <ETAG>

Cache-Control

O cabeçalho Cache-Control indica como gerenciar o cache do ativo. As seguintes diretivas são compatíveis.

  • max-age=n: indica o tempo em segundos (n) que o ativo deve ficar em cache. Reutilizaremos o ativo em cache nas mensagens subsequentes até que o tempo seja excedido. Depois disso, solicitaremos o ativo novamente, caso seja necessário. Exemplo: Cache-Control: max-age=604800.
  • no-cache: indica que o ativo pode ser armazenado em cache, mas deve ser atualizado caso o valor do cabeçalho Last-Modified seja diferente de uma resposta anterior. Exige o cabeçalho Last-Modified. Exemplo: Cache-Control: no-cache.
  • no-store: indica que o ativo não deve ser armazenado em cache. Exemplo: Cache-Control: no-store.
  • private: indica que o ativo é personalizado para o destinatário e não deve ser armazenado em cache.

Last-Modified

Indica quando o ativo foi modificado pela última vez. Usado com Cache-Control: no-cache. Se o valor Last-Modified for diferente de uma resposta anterior e Cache-Control: no-cache estiver incluído, atualizaremos a versão do ativo em cache por aquela da resposta. Exemplo: Date: Tue, 22 Feb 2022 22:22:22 GMT.

ETag

O cabeçalho ETag é uma string única que identifica a versão específica do ativo. Exemplo: ETag: "33a64df5". Esse cabeçalho é ignorado, a menos que Cache-Control e Last-Modified não estejam incluídos na resposta. Nesse caso, armazenaremos o ativo em cache conforme nossa lógica interna (a qual não divulgamos).

Exemplo de resposta com cabeçalhos

HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
ETag: "33a64df5"
Cache-Control: max-age=604800

<IMAGE_PAYLOAD>

Mensagens de localização

As mensagens de localização permitem que você envie as coordenadas de latitude e longitude de uma localização para um usuário do WhatsApp.

Mensagens de contatos

Para enviar mensagens com contatos, faça uma chamada POST a /PHONE_NUMBER_ID/messages e anexe um objeto message com type=contact. Depois, adicione um objeto contacts.

Exemplo de solicitação:

curl -X  POST \
 'https://graph.facebook.com/v20.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"
        }]
    }]
}'

Uma resposta bem-sucedida tem um objeto que inclui um identificador com o prefixo "wamid". Use o ID listado depois de "wamid" para acompanhar o status da mensagem.

{
  "messaging_product": "whatsapp",
  "contacts": [{
      "input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID",
    }]
  "messages": [{
      "id": "wamid.ID",
    }]
}

Mensagens interativas

As mensagens interativas incluem botões e outros componentes de interface do usuário que permitem que os usuários do WhatsApp interajam com a mensagem dentro do cliente do WhatsApp.

Mensagens interativas de comércio

Consulte Compartilhar produtos com os clientes.

Mensagens de lista interativas

As mensagens de lista interativas permitem apresentar uma lista de opções para escolha dos usuários do WhatsApp.

Mensagens de solicitação de localização interativas

As mensagens de solicitação de localização incluem um corpo de texto e o botão Enviar localização. Quando o usuário do WhatsApp toca no botão, uma tela para compartilhar a localização é exibida, permitindo que ele faça o compartilhamento.

Mensagens de botões de resposta interativas

As mensagens de botões de resposta interativas permitem que você envie até três respostas predefinidas para o usuário escolher.

Botões de URL de chamada para ação interativos

Seus clientes talvez hesitem em tocar em URLs brutas com strings longas ou obscuras recebidas por mensagem de texto. Nessas situações, você pode enviar uma mensagem interativa com texto e um botão URL de chamada para ação (CTA).

Os botões URL de CTA permitem representar qualquer URL em um botão. Dessa forma, não será preciso incluir a URL bruta no corpo da mensagem interativa.

Sintaxe da solicitação

POST /<BUSINESS_PHONE_NUMBER_ID>/messages

Corpo da publicação

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<CUSTOMER_PHONE_NUMBER>",
  "type": "interactive",
  "interactive": {
    "type": "cta_url",

    /* Header optional */
    "header": {
      "type": "text",
      "text": "<HEADER_TEXT>"
    },

    /* Body optional */
    "body": {
      "text": "<BODY_TEXT>"
    },

    /* Footer optional */
    "footer": {
      "text": "<FOOTER_TEXT>"
    },
    "action": {
      "name": "cta_url",
      "parameters": {
        "display_text": "<BUTTON_TEXT>",
        "url": "<BUTTON_URL>"
      }
    }
  }
}

Propriedades do corpo


Espaço reservadoDescriçãoExemplo de valor

<CUSTOMER_PHONE_NUMBER>

String

Obrigatório.


O ID do WhatsApp ou número de telefone do cliente que receberá a mensagem. Consulte Phone Number Formats.

+15558543153

<HEADER_TEXT>

String

Opcional.


Texto do cabeçalho.

Available Dates

<BODY_TEXT>

String

Obrigatório.


Texto do corpo da mensagem.

Tap the button below to see available dates.

<FOOTER_TEXT>

String

Opcional.


Texto do rodapé da mensagem.

Dates subject to change.

<BUTTON_TEXT>

String

Obrigatório.


Texto do botão.

See Dates

<BUTTON_URL>

String

Obrigatório.


URL que será carregada no navegador da web padrão do dispositivo após o toque do usuário do WhatsApp.

https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4

Exemplo de solicitação

curl 'https://graph.facebook.com/v20.0/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '{
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "+16505555555",
    "type": "interactive",
    "interactive": {
        "type": "cta_url",
        "header": {
            "text": "Available Dates"
        },
        "body": {
            "text": "Tap the button below to see available dates."
        },
        "footer": {
            "text": "Dates subject to change."
        },
        "action": {
            "name": "cta_url",
            "parameters": {
                "display_text": "See Dates",
                "url": "https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4"
            }
        }
    }
}'

Exemplo de resposta

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

Mensagens do Flows

Depois de criar um fluxo do WhatsApp, será possível enviá-lo. Para enviar uma mensagem com um fluxo, lançamos um novo tipo de objeto interativo chamado flow. Confira as propriedades do objeto interativo específico para fluxos:

Propriedade Tipo Descrição

interactive.type

String

O valor deve ser flow.

interactive.action.name

String

O valor deve ser flow.

interactive.action.parameters.mode

String

O fluxo pode estar no modo draft ou published. published é o valor padrão para este campo.

interactive.action.parameters.flow_message_version

String

O valor deve ser 3.

interactive.action.parameters.flow_token

String

O token de fluxo que é gerado pela empresa para servir de identificador.

interactive.action.parameters.flow_id

String

Identificação única do fluxo fornecida pela WhatsApp.

interactive.action.parameters.flow_cta

String

Texto no botão de CTA. Por exemplo: "Inscreva-se".

Limite de até 20 caracteres (sem emojis).

interactive.action.parameters.flow_action

String

navigate ou data_exchange. O valor padrão é navigate.

interactive.action.parameters.flow_action_payload

String

Obrigatório se flow_action for navigate. Caso contrário, deve ser omitido.

interactive.action.parameters.flow_action_payload.screen

String

O id da primeira tela.

interactive.action.parameters.flow_action_payload.data

String

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

Exemplo de solicitaçã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 '{
  "recipient_type": "individual",
  "messaging_product": "whatsapp",
  "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": "1",
        "flow_cta": "Book!",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "<SCREEN_NAME>",
          "data": { 
            "product_name": "name",
            "product_description": "description",
            "product_price": 100
          }
        }
      }
    }
  }
}'

Exemplo de resposta

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "Input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID"
    }
  ],
  "messages": [
    {
      "id": "wamid.ID"
    }
  ]
}

Respostas

É possível enviar uma resposta a uma mensagem anterior na conversa ao incluir o ID da mensagem no objeto context. O destinatário receberá a mensagem com uma bolha contextual que exibe o conteúdo da mensagem anterior.

A bolha contextual não será exibida nos seguintes casos:

  • Se a resposta for um modelo de mensagem ("type":"template").
  • Se a resposta contiver imagem, vídeo, PTT ou áudio e o destinatário estiver no KaiOS.

Estamos cientes desses bugs e estamos trabalhando para solucioná-los.

Exemplo de solicitação:

curl -X  POST \
 'https://graph.facebook.com/v20.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -d '{
   "messaging_product": "whatsapp",
   "context": {
     "message_id": "MESSAGE_ID"
   },
   "to": "<phone number> or <wa_id>",
   "type": "text",
   "text": {
     "preview_url": False,
     "body": "your-text-message-content"
   }
 }'

Uma resposta bem-sucedida tem um objeto que inclui um identificador com o prefixo "wamid". Use o ID listado depois de "wamid" para acompanhar o status da mensagem.

Observação: se a mensagem anterior tiver mais de 30 dias ou não corresponder a nenhuma outra na conversa, a mensagem será enviada normalmente, e não como uma resposta.

Exemplo de resposta:

{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "PHONE_NUMBER",
    "wa_id": "WHATSAPP_ID",
  }]
  "messages": [{
    "id": "wamid.ID",
  }]
}

Mensagens de endereço

Esse recurso está disponível apenas para empresas na Índia e em Singapura, bem como os respectivos clientes locais.

Por meio de mensagens de endereço, os usuários podem compartilhar endereços de envio com as empresas no WhatsApp de um jeito mais simples.

As mensagens de endereço são mensagens interativas com quatro partes principais: header, body, footer e action. Dentro do componente de ação, a empresa especifica o nome “address_message” e os parâmetros relevantes.

No momento, as mensagens de endereço estão disponíveis nestes dois países: Índia e Singapura. A tabela abaixo descreve os campos compatíveis em cada país.

Nome do campo Etiqueta de exibição Tipo de entrada Países com suporte Limitações

name

Nome

texto

Índia e Singapura

Nenhum

phone_number

Número de telefone

Telefone

Índia e Singapura

Somente números de telefone válidos

in_pin_code

Código PIN

texto

Índia

Comprimento máximo: 6

sg_post_code

Código postal

número

Singapura

Comprimento máximo: 6

house_number

Número do apartamento/casa

texto

Índia

Nenhum

floor_number

Número do andar

texto

Índia

Nenhum

tower_number

Número da torre

texto

Índia

Nenhum

building_name

Nome do edifício/condomínio

texto

Índia

Nenhum

address

Endereço

texto

Índia e Singapura

Nenhum

landmark_area

Ponto de referência/área

texto

Índia

Nenhum

unit_number

Número da unidade

texto

Singapura

Nenhum

city

Cidade

texto

Índia e Singapura

Nenhum

state

Estado

texto

Índia

Nenhum

Exemplo de chamada de API

Este é um exemplo da chamada de API para mensagem de endereço. O atributo country é um campo obrigatório nos parâmetros de ação. Se ele não for incluído, ocorrerá um erro de validação.

curl -X  POST \
'https://graph.facebook.com/v15.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": "address_message",
              "body": {
                   "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
              },
              "action": {
                   "name": "address_message",
                   "parameters": {
                      "country" :"COUNTRY_ISO_CODE"
                   }
              }
          }
    }' 

Solução de erros

Se o código de área do número de telefone do país em questão não estiver correto, as empresas não conseguirão solicitar a mensagem de endereço ao destinatário. Por exemplo, as empresas não conseguirão solicitar uma mensagem de endereço a um destinatário cujo país seja "Singapura", mas cujo número de telefone tenha código de área "91".

As mensagens de endereço não permitem a passagem simultânea de campos em conflito. Por exemplo, não é possível passar sg_post_code quando country está definido como “IN”.

Após o envio da mensagem de endereço, a empresa aguarda o usuário preencher o endereço e enviá-lo de volta. O endereço inserido pelo usuário é compartilhado por meio do webhook registrado no processo de configuração.

Etapas da mensagem de endereço

Estas são as etapas da mensagem de endereço:

  1. A empresa envia uma mensagem de endereço ao usuário com o nome de ação address_message.
  2. O usuário interage com a mensagem clicando na CTA, que exibe a tela da mensagem de endereço. O usuário preenche o endereço e envia o formulário.
  3. Depois disso, o parceiro recebe uma notificação de webhook com os detalhes do endereço enviado pelo usuário.
Exemplo de mensagem de endereço na Índia
Exemplo de mensagem de endereço em Singapura

O diagrama de sequência a seguir mostra um fluxo de integração típico de uma mensagem de endereço.

Parâmetros de ação adicionais

A empresa pode passar atributos adicionais (por exemplo, values, validation_errors ou saved_addresses) como parte dos parâmetros de ação interativos. Veja abaixo mais informações sobre o uso de cada um deles.

Parâmetro de ação Uso

values

As empresas preenchem automaticamente os campos de endereço (por exemplo, preenchem automaticamente o campo "city" com "Singapura").

saved_addresses

Para empresas, elas podem passar endereços salvos anteriormente associados ao usuário.

Para usuários, eles terão a opção de escolher o endereço salvo em vez de preenchê-lo manualmente.

validation_errors

As empresas podem indicar erros nos campos de endereço, e o WhatsApp impedirá que o usuário envie o formulário antes que os problemas sejam corrigidos.

Enviar mensagem de endereço para um usuário

Faça uma chamada POST a /PHONE_NUMBER_ID/messages usando a API do WhatsApp para enviar mensagens de endereço criptografadas de ponta a ponta para o usuário:

curl -X  POST \
'https://graph.facebook.com/v15.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": "address_message",
                 "body": {
                       "text": "Thanks for your order! Tell us what address you’d like this order delivered 
                        to."
                 },
                "action": {
                      "name": "address_message",
                      "parameters": "JSON Payload"
                 }
            }
     }'

Para enviar uma mensagem de endereço sem endereços salvos, o WhatsApp exibirá ao usuário ou à empresa um formulário de endereço a ser preenchido com um novo endereço.

Índia

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "+91xxxxxxxxxx",
      "type": "interactive",
      "interactive": {
        "type": "address_message",
        "body": {
          "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
        },
        "action": {
          "name": "address_message",
          "parameters": {
              "country": "IN",
              "values": {
                 "name": "CUSTOMER_NAME",
                 "phone_number": "+91xxxxxxxxxx"
              }
           }
        }
      }
   }'

Singapura

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "+65xxxxxxxxxx",
      "type": "interactive",
      "interactive": {
        "type": "address_message",
        "body": {
          "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
        },
        "action": {
          "name": "address_message",
          "parameters": {
              "country": "SG",
              "values": {
                  "name": "CUSTOMER_NAME",
                  "phone_number": "+65xxxxxxxxxx"
              }
           }
        }
      }
   }'

Para enviar uma mensagem de endereço com endereços salvos, o WhatsApp apresentará ao usuário ou à empresa a opção de selecionar um dos endereços salvos ou adicionar um novo. Os usuários podem ignorar o endereço salvo e inserir um novo.

Índia

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "91xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
          "country": "IN",
          "saved_addresses": [
             {
                 "id": "address1",
                 "value": {
                    "name": "CUSTOMER_NAME",
                    "phone_number": "+91xxxxxxxxxx",
                    "in_pin_code": "400063",
                    "floor_number": "8",
                    "building_name": "",
                    "address": "Wing A, Cello Triumph,IB Patel Rd",
                    "landmark_area": "Goregaon",
                    "city": "Mumbai"
                 }
             }
          ]
       }
    }
  }
}'

Singapura

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+65xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
         "country": "SG",
         "values": {
             "name": "CUSTOMER_NAME",
             "phone_number": "+65xxxxxxxxxx"
         },
         "saved_addresses": [
            {
                "id": "address1",
                "value": {
                   "name": "CUSTOMER_NAME",
                   "phone_number": "+65xxxxxxxxxx",
                   "sg_post_code": "018937",
                   "address": "9 Straits View, Marina One West Tower",
                   "unit_number": "Suite 29-00",
                   "city": "Singapore"
                }
            }
         ]
      }
    }
  }
}'

Verificar a resposta

Uma resposta bem-sucedida inclui um objeto messages com um ID para a mensagem recém-criada.

{
  "messaging_product": "whatsapp",
  "contacts": [{
      "input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID",
    }]
  "messages": [{
      "id": "wamid.ID",
    }]
}

Respostas com falha conterão uma mensagem de erro. Consulte Mensagens de erro e status para mais informações.

Enviar uma mensagem de endereço com erros de validação

Uma mensagem de endereço será reenviada ao usuário caso ocorra um erro de validação no servidor da empresa. A empresa deverá devolver o conjunto de valores previamente inseridos pelo usuário com os respectivos erros de validação de cada campo inválido, conforme mostrado no exemplo de carga abaixo.

Índia

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "91xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
          "country": "IN",
          "values": {
             "name": "CUSTOMER_NAME",
             "phone_number": "+91xxxxxxxxxx",
             "in_pin_code": "666666",
             "address": "Some other location",
             "city": "Delhi"
          },
          "validation_errors": {
             "in_pin_code": "We could not locate this pin code."
          }
       }
    }
  }
}'

Singapura

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "12065550107",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
           "country": "SG",
           "values": {
              "name": "CUSTOMER_NAME",
              "phone_number": "+65xxxxxxxxxx",
              "sg_post_code": "666666",
              "address": "Some other location",
              "city": "Singapore"
           },
           "validation_errors": {
              "sg_post_code": "We could not locate this pin code."
           }
        }
     }
  }
}'

Receber notificações sobre o envio de endereços

As empresas receberão notificações de envio de endereço por meio de webhooks, como o exemplo abaixo.

{
    "messages": [
        {
           "id": "gBGGFlAwCWFvAgmrzrKijase8yA",
           "from": "PHONE_NUMBER",
           "Interactive": {
               "type":  "nfm_reply",
               "action":  "address_message",
               "nfm_reply": {
                   "name": "address_message",
                    "response_json": “<response_json from client>”,
                    "body": “<body text from client>”,
            }
           "timestamp": "1670394125",
           "type": "interactive"  
        }
    ]
}

A notificação de webhook tem os valores a seguir.

Nome do campo Tipo Descrição

interactive

Objeto

Contém a resposta do cliente.

type

String

Seria nfm_reply, indicando que se trata de uma resposta do fluxo nativo (NFM, pelas iniciais em inglês) do cliente.

nfm_reply

Objeto

Contém os dados recebidos do cliente.

response_json

String

Os valores dos campos de endereço preenchidos pelo usuário no formato JSON que sempre estão presentes.

body (opcional)

String

O corpo do texto do cliente, o que o usuário vê.

name (opcional)

String

Seria address_message, indicando o tipo de resposta de ação NFM do cliente.

Veja abaixo uma resposta do tipo NFM enviada na solicitação de mensagem de endereço na Índia.

{
   "messages": [
      {
          "context": {
	  "from": "FROM_PHONE_NUMBER_ID",
	  "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgARGBI3NjNFN0U5QzMzNDlCQjY0M0QA"
           },
          "from": "PHONE_NUMBER",
         "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgASGCA5RDhBNENEMEQ3RENEOEEzMEI0RUExRDczN0I1NThFQwA=",
         "timestamp": "1671498855",
         "type": "interactive",
         "interactive": {
	 "type": "nfm_reply",
	"nfm_reply": {
	      "response_json": "{\"saved_address_id\":\"address1\",\"values\":{\"in_pin_code\":\"400063\",\"building_name\":\"\",\"landmark_area\":\"Goregaon\",\"address\":\"Wing A, Cello Triumph, IB Patel Rd\",\"city\":\"Mumbai\",\"name\":\"CUSTOMER_NAME\",\"phone_number\":\"+91xxxxxxxxxx\",\"floor_number\":\"8\"}}",
                    "body": "CUSTOMER_NAME\n +91xxxxxxxxxx\n 400063, Goregaon, Wing A, Cello Triumph,IB Patel Rd, Mumbai, 8",
                    "name": "address_message"
                }
            }
        }
    ]
}

Recurso não compatível

Caso o cliente não ofereça suporte para address_message, as mensagens serão removidas silenciosamente. Além disso, a empresa receberá uma mensagem de erro por meio do webhook. Veja abaixo a notificação enviada por webhook:

{
  "statuses": [
    {
      "errors": [
        {
          "code": 1026,
          "href": "https://developers.facebook.com/docs/whatsapp/api/errors/",
          "title": "Receiver Incapable"
        }
      ],
      "id": "gBGGFlAwCWFvAgkyHMGKnRu4JeA",
      "message": {
        "recipient_id": "+91xxxxxxxxxx"
      },
      "recipient_id": "91xxxxxxxxxx",
      "status": "failed",
      "timestamp": "1670394125",
      "type": "message"
    }
  ]
}

Mensagens de modelo

Consulte Mensagens de modelo.

Sequência de entrega de mensagens

Se você enviar várias mensagens, talvez elas não sejam entregues na mesma ordem das solicitações da API. Caso haja uma ordem a ser seguida, verifique se cada mensagem foi entregue no status delivered do webhook de mensagens antes de enviar a próxima.

Solução de problemas

Se tiver problemas com a entrega de mensagens, consulte Mensagem não entregue.