É 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.
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
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>} }
Espaço reservado | Descrição | Exemplo de valor |
---|---|---|
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. |
|
String | O tipo de mensagem. |
|
Objeto | O conteúdo da mensagem de texto. | Consulte Mensagens de texto. |
Objeto | O conteúdo da mensagem de reação. | Consulte Mensagens de reação. |
Objeto | O conteúdo da mensagem de mídia. O nome da propriedade deve corresponder ao tipo de mensagem de mídia sendo enviada ( | Consulte Mensagens de mídia. |
Objeto | O conteúdo da mensagem de localização. | Consulte Mensagens de localização. |
Objeto | O conteúdo da mensagem de contato. | Consulte Mensagens com contatos. |
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.
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>" } ] }
Placeholder | Description | Sample Value |
---|---|---|
String | WhatsApp user's WhatsApp phone number. May not match |
|
String | WhatsApp user's WhatsApp ID. May not match |
|
String | WhatsApp Message ID. This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks. |
|
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 Request | Number Message Delivered To | Outcome |
---|---|---|
|
| Correct number |
|
| Correct number |
|
| Potentially wrong number |
|
| Potentially wrong number |
As mensagens de texto contêm apenas um corpo de texto e uma prévia de link opcional.
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.
Você pode enviar mensagens de áudio, documento, imagem, figurinha e vídeo para usuários do WhatsApp.
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.
As mensagens de documento exibem um ícone de documento para o usuário do WhatsApp clicar e baixar.
As mensagens de imagem exibem uma única imagem e uma legenda opcional.
As mensagens de figurinhas exibem imagens animadas ou estáticas de figurinhas em uma mensagem do WhatsApp.
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.
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.
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>
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.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
.
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).
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>
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.
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", }] }
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.
Consulte Compartilhar produtos com os clientes.
As mensagens de lista interativas permitem apresentar uma lista de opções para escolha dos usuários do WhatsApp.
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.
As mensagens de botões de resposta interativas permitem que você envie até três respostas predefinidas para o usuário escolher.
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.
POST /<BUSINESS_PHONE_NUMBER_ID>/messages
{ "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>" } } } }
Espaço reservado | Descrição | Exemplo de valor |
---|---|---|
String | Obrigatório. O ID do WhatsApp ou número de telefone do cliente que receberá a mensagem. Consulte Phone Number Formats. |
|
String | Opcional. Texto do cabeçalho. |
|
String | Obrigatório. Texto do corpo da mensagem. |
|
String | Opcional. Texto do rodapé da mensagem. |
|
String | Obrigatório. Texto do botão. |
|
String | Obrigatório. URL que será carregada no navegador da web padrão do dispositivo após o toque do usuário do WhatsApp. |
|
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"
}
}
}
}'
{ "messaging_product": "whatsapp", "contacts": [ { "input": "+16505555555", "wa_id": "+16505555555" } ], "messages": [ { "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA" } ] }
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 |
---|---|---|
| String | O valor deve ser |
| String | O valor deve ser |
| String | O fluxo pode estar no modo |
| String | O valor deve ser |
| String | O token de fluxo que é gerado pela empresa para servir de identificador. |
| String | Identificação única do fluxo fornecida pela WhatsApp. |
| String | Texto no botão de CTA. Por exemplo: "Inscreva-se". Limite de até 20 caracteres (sem emojis). |
| String |
|
| String | Obrigatório se |
| String | O |
| 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" } ] }
É 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:
"type":"template"
).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", }] }
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 |
---|---|---|---|---|
| Nome | texto | Índia e Singapura | Nenhum |
| Número de telefone | Telefone | Índia e Singapura | Somente números de telefone válidos |
| Código PIN | texto | Índia | Comprimento máximo: 6 |
| Código postal | número | Singapura | Comprimento máximo: 6 |
| Número do apartamento/casa | texto | Índia | Nenhum |
| Número do andar | texto | Índia | Nenhum |
| Número da torre | texto | Índia | Nenhum |
| Nome do edifício/condomínio | texto | Índia | Nenhum |
| Endereço | texto | Índia e Singapura | Nenhum |
| Ponto de referência/área | texto | Índia | Nenhum |
| Número da unidade | texto | Singapura | Nenhum |
| Cidade | texto | Índia e Singapura | Nenhum |
| Estado | texto | Índia | Nenhum |
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" } } } }'
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.
Estas são as etapas da mensagem de endereço:
address_message
.O diagrama de sequência a seguir mostra um fluxo de integração típico de uma mensagem de endereço.
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 |
---|---|
| As empresas preenchem automaticamente os campos de endereço (por exemplo, preenchem automaticamente o campo "city" com "Singapura"). |
| 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. |
| 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. |
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.
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" } } } } }'
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.
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" } } ] } } } }'
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" } } ] } } } }'
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.
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.
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." } } } } }'
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." } } } } }'
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 |
---|---|---|
| Objeto | Contém a resposta do cliente. |
| String | Seria |
| Objeto | Contém os dados recebidos do cliente. |
| String | Os valores dos campos de endereço preenchidos pelo usuário no formato JSON que sempre estão presentes. |
| String | O corpo do texto do cliente, o que o usuário vê. |
| String | Seria |
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" } } } ] }
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" } ] }
Consulte Mensagens de modelo.
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.
Se tiver problemas com a entrega de mensagens, consulte Mensagem não entregue.