Puedes usar la API para enviar los siguientes tipos de mensajes:
Todos estos tipos de mensajes, excepto los mensajes de reacción, se pueden designar como respuesta.
Utiliza el extremoPOST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages para enviar mensajes a usuarios de WhatsApp:
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages
Todas las solicitudes de envío de mensajes utilizan el siguiente formato de objeto principal genérico.
{ "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>} }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
Cadena | Identificador de WhatsApp o número de teléfono del cliente al que se le va a enviar el mensaje. Consulta Formatos de número de teléfono. |
|
Cadena | Indica el tipo de mensaje. |
|
Objeto | Contenido de los mensajes de texto. | Consulta Mensajes de texto. |
Objeto | Contenido de los mensajes de reacción. | Consulta Mensajes de reacción. |
Objeto | Contenido de los mensajes multimedia. El nombre de la propiedad debe coincidir con el tipo de mensaje multimedia que se envía ( | Consulta Mensajes multimedia. |
Objeto | Contenido de los mensajes de ubicación. | Consulta Mensajes de ubicación. |
Objeto | Contenido de los mensajes de contactos. | Consulta Mensajes de contactos. |
Objeto | Contenido de los mensajes interactivos. | Consulta Mensajes interactivos. |
Los ejemplos de este documento describen los requisitos de la carga útil del cuerpo de la solicitud POST para cada tipo de mensaje.
Si la operación se realiza correctamente, la API responderá con lo siguiente:
{ "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 |
Los mensajes de texto son mensajes que solo contienen un cuerpo de mensaje y una vista previa del enlace opcional.
Los mensajes de reacción son reacciones mediante emoticonos que puedes aplicar a los mensajes recibidos de usuarios de WhatsApp.
Puedes enviar mensajes de audio, documento, imagen, sticker y vídeo a usuarios de WhatsApp.
Los mensajes de audio muestran un icono de audio y un enlace a un archivo de audio. Cuando el usuario de WhatsApp toca el icono, el cliente de WhatsApp carga y reproduce el archivo de audio.
Los mensajes de documento muestran un icono de documento vinculado a un documento que el usuario de WhatsApp puede tocar para descargar.
Por ejemplo, a continuación se muestra un mensaje de imagen en el que se incluye un pie de foto opcional:
Los mensajes de sticker muestran stickers con animaciones o imágenes estáticas en mensajes de WhatsApp.
Los mensajes de vídeo muestran una vista previa del vídeo mediante una miniatura de una imagen del vídeo y un pie de vídeo opcional. Cuando el usuario de WhatsApp toca la vista previa, se carga el vídeo y se le reproduce al usuario.
Debes subir los activos multimedia al número de teléfono de empresa que enviará el mensaje o alojar los activos en un servidor público e incluir la URL en la solicitud de envío de mensaje.
Para reducir la probabilidad de errores y evitar solicitudes innecesarias al servidor público, te recomendamos que subas los activos multimedia y utilices los identificadores correspondientes al enviar mensajes.
La API de nube de WhatsApp admite el almacenamiento en caché HTTP de contenido multimedia. Si utilizas un enlace (link
) a un activo de contenido multimedia de tu servidor (en lugar del identificador, id
, de un activo que hayas subido a nuestros servidores), puedes indicarnos que almacenemos en caché el activo para volver a utilizarlo con mensajes futuros; para ello, incluye los encabezados siguientes en la respuesta del servidor cuando solicitemos el activo. Si no se incluye ninguno de estos encabezados, no almacenaremos en caché el activo.
Cache-Control: <CACHE_CONTROL> Last-Modified: <LAST_MODIFIED> ETag: <ETAG>
El encabezado Cache-Control
nos indica cómo gestionar el almacenamiento en caché del activo. Admitimos las siguientes directivas:
max-age=n
: indica cuántos segundos (n
) se debe almacenar en caché el activo. Volveremos a utilizar el activo almacenado en caché en las llamadas posteriores hasta que se supere este tiempo; después, solicitaremos de nuevo el activo si es necesario. Ejemplo: Cache-Control: max-age=604800
.no-cache
: indica que el activo se puede almacenar en caché, pero se debe actualizar si el valor del encabezado Last-Modified
es diferente al de una respuesta anterior. Requiere el encabezado Last-Modified
. Ejemplo: Cache-Control: no-cache
.no-store
: indica que el activo no se debe almacenar en caché. Ejemplo: Cache-Control: no-store
.private
: indica que el activo se ha personalizado para el destinatario y no se debe almacenar en caché.Indica cuándo se modificó el activo por última vez. Se usa con Cache-Control: no-cache
. Si el valor de Last-Modified
es diferente al de una respuesta anterior y Cache-Control: no-cache
se incluye en la respuesta, actualizaremos nuestra versión del activo almacenada en caché con el activo de la respuesta. Ejemplo: Date: Tue, 22 Feb 2022 22:22:22 GMT
.
El encabezado ETag
es una cadena única que identifica una versión concreta de un activo. Ejemplo: ETag: "33a64df5"
. Este encabezado se ignora a menos que los encabezados Cache-Control
y Last-Modified
no se incluyan en la respuesta. En este caso, almacenaremos en caché el activo según tu propia lógica interna (que no revelaremos).
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>
Los mensajes de ubicación te permiten enviar las coordenadas de latitud y longitud de una ubicación a un usuario de WhatsApp.
Para enviar mensajes de contactos, haz una llamada POST
a /PHONE_NUMBER_ID/messages
y adjunta un objeto message
con type=contact
. A continuación, añade un objeto contacts
.
Ejemplo de solicitud:
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"
}]
}]
}'
Una respuesta correcta contiene un objeto con un identificador con el prefijo “wamid”. Utiliza el identificador que se muestra después de “wamid” para hacer un seguimiento del estado del mensaje.
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
Los mensajes interactivos incluyen mensajes de lista, botones de respuesta, botones de URL de llamada a la acción y mensajes de Flows. Para enviar mensajes interactivos, haz una llamada POST
a /PHONE_NUMBER_ID/messages
y adjunta un objeto de mensaje con type=interactive
. A continuación, añade un objeto interactive
.
Los mensajes interactivos de lista te permiten presentar a los usuarios de WhatsApp una lista de opciones entre las que elegir.
Los mensajes de solicitud de ubicación muestran un cuerpo de texto y un botón de envío de la ubicación. Cuando un usuario de WhatsApp toca el botón, aparece una pantalla para compartir la ubicación que el usuario puede utilizar para compartir su ubicación.
Los mensajes interactivos de botones de respuesta te permiten enviar hasta tres respuestas predefinidas entre las que los usuarios pueden elegir.
Es posible que los clientes se muestren reticentes a tocar URL sin formato con cadenas largas o poco claras en los mensajes de texto. En estas situaciones, puede que quieras enviar un mensaje interactivo con un botón de URL de llamada a la acción y texto en el cuerpo.
Los botones de URL de llamada a la acción te permiten asignar una URL a un botón para no tener que incluir la URL sin formato en el cuerpo del mensaje interactivo.
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>" } } } }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
Cadena | Obligatorio. Identificador de WhatsApp o número de teléfono del cliente al que se envía el mensaje. Consulta Formatos de número de teléfono. |
|
Cadena | Opcional. Texto del encabezado. |
|
Cadena | Obligatorio. Texto del cuerpo del mensaje. |
|
Cadena | Opcional. Texto del pie de página del mensaje. |
|
Cadena | Obligatorio. Texto del botón. |
|
Cadena | Obligatorio. URL que se va a cargar en el navegador web predeterminado del dispositivo cuando el usuario de WhatsApp toque el botón. |
|
curl 'https://graph.facebook.com/v19.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" } ] }
Cuando crees un Flow de WhatsApp, puedes enviarlo. Para enviar un mensaje con un Flow, hemos introducido un nuevo tipo de objeto interactivo llamado flow
. A continuación se indican las propiedades del objeto interactivo específico de los Flows:
Propiedad | Tipo | Descripción |
---|---|---|
| Cadena | El valor debe ser |
| Cadena | El valor debe ser |
| Cadena | El Flow puede estar en modo |
| Cadena | El valor debe ser |
| Cadena | Identificador del Flow que genera la empresa para servir de identificador. |
| Cadena | Identificador único del Flow que proporciona WhatsApp. |
| Cadena | Texto del botón de llamada a la acción. Por ejemplo: “Regístrate”. Límite de caracteres: 20 caracteres (sin emoticonos). |
| Cadena |
|
| Cadena | Obligatorio solo si el valor de |
| Cadena | Valor de |
| Cadena | Opcional. Datos de entrada de la primera pantalla del Flow. Debe ser un objeto que no esté vacío. |
Ejemplo de solicitud
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 } } } } } }'
Ejemplo de respuesta
{ "messaging_product": "whatsapp", "contacts": [ { "Input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID" } ], "messages": [ { "id": "wamid.ID" } ] }
Para enviar cualquier mensaje como respuesta a un mensaje anterior en una conversación, incluye el identificador de mensaje anterior en el objeto context
. El destinatario recibirá el mensaje nuevo junto con una burbuja contextual que muestra el contenido del mensaje anterior.
Los destinatarios no verán ninguna burbuja contextual si:
"type":"template"
);Son errores conocidos que estamos solucionando.
Ejemplo de solicitud:
curl -X POST \
'https://graph.facebook.com/v19.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"
}
}'
Una respuesta correcta contiene un objeto con un identificador con el prefijo “wamid”. Utiliza el identificador que se muestra después de wamid para hacer un seguimiento del estado del mensaje.
Nota: Si el mensaje anterior tiene más de 30 días o no se corresponde con ningún mensaje de la conversación, el mensaje se enviará como mensaje normal en lugar de como respuesta.
Ejemplo de respuesta:
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
Esta función solo está disponible para empresas con sede en Singapur y en la India, así como para sus clientes en ambos países.
Los mensajes de dirección ofrecen a los usuarios una forma más sencilla de compartir la dirección de envío con la empresa en WhatsApp.
Se trata de mensajes interactivos que incluyen las cuatro partes principales: header
, body
, footer
y action
. En el componente de acción, la empresa especifica el nombre “address_message” y los parámetros pertinentes.
En este momento, los mensajes de dirección se admiten en los dos siguientes países: India y Singapur. En la tabla siguiente, se indican los campos que se admiten en cada país en concreto.
Nombre del campo | Etiqueta para mostrar | Tipo de entrada | Países admitidos | Limitaciones |
---|---|---|---|---|
| Nombre | Texto | India y Singapur | Ninguna |
| Número de teléfono | Teléfono | India y Singapur | Solo números de teléfono válidos |
| Código PIN | Texto | India | Longitud máxima: 6 |
| Código postal | Número | Singapur | Longitud máxima: 6 |
| Número de casa o piso | Texto | India | Ninguna |
| Número de planta | Texto | India | Ninguna |
| Número de torre | Texto | India | Ninguna |
| Nombre del apartamento o edificio | Texto | India | Ninguna |
| Dirección | Texto | India y Singapur | Ninguna |
| Punto de referencia o área | Texto | India | Ninguna |
| Número de unidad | Texto | Singapur | Ninguna |
| Ciudad | Texto | India y Singapur | Ninguna |
| Estado | Texto | India | Ninguna |
A continuación, se incluye un ejemplo de llamada a la API para el mensaje de dirección. El atributo country
es un campo obligatorio en los parámetros de acción. Si no se incluye, se producirá un error de validación.
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" } } } }'
Si el código de área del número de teléfono del país indicado no es correcto, las empresas no podrán solicitar el mensaje de dirección al destinatario. Por ejemplo, las empresas no podrán solicitar un mensaje de dirección a un destinatario cuyo país sea “Singapur”, pero que tenga un número de teléfono con el código de área “91”.
Los mensajes de dirección no permitirán pasar campos en conflicto de forma simultánea. Por ejemplo, no puedes pasar sg_post_code
si el valor de country
se ha definido como “IN”.
Una vez enviado el mensaje de dirección, la empresa espera a que el usuario rellene la dirección y la devuelva. La dirección indicada por el usuario se comparte mediante el webhook registrado en el proceso de configuración.
Los pasos relacionados con un mensaje de dirección son los siguientes:
address_message
al usuario.En el siguiente diagrama de secuencias se muestra un proceso típico de integración de un mensaje de dirección.
La empresa puede pasar atributos adicionales, como values
, validation_errors
o saved_addresses
, como parte de los parámetros de acción interactivos. A continuación, encontrarás información sobre sus usos.
Parámetro de acción | Uso |
---|---|
| Las empresas rellenan previamente este parámetro para los campos de dirección (p. ej., el campo de dirección de ciudad se rellena previamente con “Singapur”). |
| En el caso de las empresas, pueden pasar direcciones guardadas que se hayan asociado previamente al usuario. En el caso de los usuarios, pueden elegir la dirección guardada en lugar de rellenarla manualmente. |
| Las empresas pueden devolver errores en los campos de dirección y WhatsApp impedirá que el usuario envíe la dirección hasta que se resuelvan los problemas. |
Realiza una llamada POST
a /PHONE_NUMBER_ID/messages
mediante la API de WhatsApp para enviar un mensaje de dirección cifrado de extremo a extremo al usuario:
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 un mensaje de dirección sin direcciones guardadas, WhatsApp mostrará al usuario o empresa un formulario de dirección para introducir una nueva dirección.
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 un mensaje de dirección con direcciones guardadas, WhatsApp mostrará al usuario o empresa una opción para seleccionar entre las direcciones guardadas o añadir una opción de dirección. Los usuarios pueden ignorar la dirección guardada e introducir una nueva.
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" } } ] } } } }'
Una respuesta correcta incluye un objeto messages
con un identificador del mensaje recién creado.
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
Una respuesta incorrecta contiene un mensaje de error. Consulta Códigos de error y de estado para obtener más información.
Será necesario volver a enviar un mensaje de dirección al usuario en caso de que se produzca un error de validación en el servidor de la empresa. La empresa debe devolver el conjunto de valores que ha introducido previamente el usuario, junto con los correspondientes errores de validación de cada campo no válido, como se muestra en los ejemplos de cargas útiles siguientes.
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." } } } } }'
Las empresas recibirán notificaciones de envíos de direcciones mediante webhooks, como se muestra a continuación.
{ "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" } ] }
La notificación de webhook tiene los valores siguientes.
Nombre del campo | Tipo | Descripción |
---|---|---|
| Objeto | Contiene la respuesta del cliente. |
| Cadena | Será |
| Objeto | Contiene los datos recibidos del cliente. |
| Cadena | Valores de los campos de dirección que ha rellenado el usuario en formato JSON que aparecen siempre. |
| Cadena | Texto del cuerpo del cliente, que es lo que ve el usuario. |
| Cadena | Será |
A continuación, se muestra la respuesta de un mensaje de dirección como un tipo de respuesta de NFM para una solicitud de mensaje de dirección de la India.
{ "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" } } } ] }
En caso de que el cliente no admita address_message
, los mensajes se omitirán de forma silenciosa y se devolverá un mensaje a la empresa en un webhook. A continuación, se muestra la notificación de webhook que se devolverá:
{ "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" } ] }
Consulta mensajes de plantilla.
Al enviar varios mensajes, no se garantiza que el orden de entrega coincida con el orden de las solicitudes a la API. Si necesitas asegurarte de que los mensajes se entregan en una secuencia determinada, confirma la recepción del estado delivered
en un webhook de mensajes antes de enviar el siguiente mensaje de la secuencia.
Si tienes problemas con la entrega de mensajes, consulta Mensaje no entregado.