Puedes usar la API para enviar los siguientes tipos de mensajes:
Todos estos tipos, excepto los mensajes de reacciones, pueden designarse como respuesta.
Usa el punto de conexión POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages para enviar mensajes a los usuarios de WhatsApp:
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages
Todas las solicitudes de mensajes utilizan el siguiente formato de objeto.
{ "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 | Ejemplo de valor |
---|---|---|
Cadena | El identificador o número de teléfono de WhatsApp del cliente al que se le envía 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 del mensaje de reacción. | Consulta Mensajes de reacción. |
Objeto | Contenido del mensaje multimedia. El nombre de la propiedad debería coincidir con el tipo de mensaje multimedia que envías ( | Consulta Mensajes multimedia. |
Objeto | Contenido del mensaje de ubicación. | Consulta Mensajes de ubicación. |
Objeto | Contenido del mensaje de contactos. | Consulta Mensajes de contactos. |
Objeto | Contenido del mensaje interactivo. | Consulta Mensajes interactivos. |
En los ejemplos que se incluyen en este documento, se describen los requisitos de carga útil del cuerpo de la publicación de cada tipo de mensaje.
Si la solicitud se procesa correctamente, la API responderá con los siguientes elementos:
{ "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 texto y una vista previa del enlace opcional.
En el caso de los mensajes de reacciones, se trata de reacciones con emojis que puedes aplicar al mensaje anterior de un usuario de WhatsApp que hayas recibido.
Puedes enviar mensajes de audio, documentos, imágenes, stickers y videos a los usuarios de WhatsApp.
Los mensajes de audio muestran un ícono de audio y un enlace al archivo de audio. Cuando el usuario de WhatsApp toca el icono, el cliente de WhatsApp carga y reproduce el archivo de audio.
En los mensajes de documentos, se muestra un icono de un documento que está vinculado a un documento y que un usuario de WhatsApp puede tocar para descargarlo.
En los mensajes de imágenes, se muestra una sola imagen y una descripción opcional.
Los mensajes de stickers muestran imágenes de sticker animadas o estáticas en un mensaje de WhatsApp.
Los mensajes de video muestran una vista previa en miniatura de una imagen del video con un título opcional. Cuando el usuario de WhatsApp toca la vista previa, se activa la carga del video y se lo muestra al usuario.
Los recursos multimedia deben cargarse al número de teléfono del negocio que enviará el mensaje, o bien debes alojar el recurso de un servidor público e incluir su URL en la solicitud de envío de mensajes.
Para reducir la probabilidad de errores y evitar solicitudes innecesarias a tu servidor público, te recomendamos que subas tus recursos multimedia y uses sus identificadores al enviar mensajes.
La API de la nube de WhatsApp admite el almacenamiento de archivos multimedia en caché HTTP. Si usas un enlace (link
) que te dirige a un recurso multimedia de tu servidor (a diferencia de un identificador [id
] de un recurso que subiste a nuestros servidores), puedes solicitarnos almacenar en caché el recurso para reutilizarlo en el futuro en otros mensajes. Para ello, incluye los encabezados que se muestran a continuación en la respuesta al servidor cuando solicitemos el recurso. 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 controlar el almacenamiento en caché de los activos. Admitimos las siguientes directivas:
max-age=n
: indica cuántos segundos del activo (n
) se deben almacenar en caché. Reutilizaremos el activo almacenado en caché en los siguientes mensajes hasta que se supere el tiempo. Con posterioridad, volveremos a solicitarlo, si es necesario. Ejemplo: Cache-Control: max-age=604800
.no-cache
: indica que el activo se puede almacenar en caché, pero que deberá actualizarse 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 deberá almacenar en caché. Ejemplo: Cache-Control: no-store
.private
: indica que el activo está personalizado para el destinatario y que no se debería 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 se incluye Cache-Control: no-cache
en la respuesta, actualizaremos nuestra versión almacenada en caché del activo 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 la versión específica 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 nuestra lógica interna (que no 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>
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
. Luego, agrega 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 incluye un objeto con un identificador que contiene un prefijo "wamid". Usa el identificador que figura después de "wamid" para hacer un seguimiento del estado de tu mensaje.
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
Los mensajes interactivos incluyen botones y otros componentes de UI que permiten a los usuarios de WhatsApp interactuar con el mensaje en el cliente de WhatsApp.
Consulta Compartir productos con los clientes.
Los mensajes de lista interactivos te permiten proporcionar a los usuarios de WhatsApp una lista de opciones entre las que pueden hacer una selección.
Los mensajes de solicitud de ubicación contienen el texto del cuerpo y un botón para enviar la ubicación. Cuando un usuarios de WhatsApp toca el botón, se muestra una pantalla que indica la ubicación que el usuario puede usar para compartir la ubicación.
Los mensajes interactivos con botones de respuesta te permiten enviar hasta tres respuestas predefinidas que deben seleccionar los usuarios.
Es posible que tus clientes duden en tocar la URL que contienen cadenas largas o confusas en mensajes de texto. En estas situaciones, te conviene enviar un mensaje interactivo con texto y un botón de URL de llamada a la acción (CTA).
Estos botones te permiten asignar cualquier URL a un botón, de modo que no tengas que incluir toda la URL 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 | Ejemplo de valor |
---|---|---|
Cadena | Obligatorio. El identificador o número de teléfono de WhatsApp del cliente al que se le 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 encabezado del mensaje. |
|
Cadena | Obligatorio. Texto del botón. |
|
Cadena | Obligatorio. URL que se cargará en el navegador web predeterminado del dispositivo cuando el usuario de WhatsApp la toque. |
|
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" } ] }
Después de crear un proceso de WhatsApp, puedes enviarlo. Para enviar un mensaje con un proceso, creamos un nuevo tipo de objeto interactivo llamado flow
. Las siguientes propiedades del objeto interactivo son específicas de los procesos:
Propiedad | Tipo | Descripción |
---|---|---|
| Cadena | El valor debe ser |
| Cadena | El valor debe ser |
| Cadena | El proceso puede estar en modo |
| Cadena | El valor debe ser |
| Cadena | Token del proceso que genera la empresa y sirve como identificador. |
| Cadena | Identificador único del proceso proporcionado por WhatsApp. |
| Cadena | Texto en el botón de llamada a la acción. Por ejemplo: "Regístrate" Límite de caracteres: 20 (sin emojis). |
| Cadena |
|
| Cadena | Obligatoria si |
| Cadena | El |
| Cadena | Opcional. Los datos de entrada de la primera pantalla del proceso. Debe ser un objeto no 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" } ] }
Puedes enviar cualquier tipo de mensaje como respuesta a un mensaje anterior. El mensaje anterior aparecerá en la parte superior del nuevo mensaje, citado dentro de una burbuja de contexto.
La burbuja de contexto no aparecerá en la parte superior del mensaje enviado como respuesta en los siguientes casos:
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<WHATSAPP_USER_PHONE_NUMBER>", "context": { "message_id": "WAMID_TO_REPLY_TO" }, /* Message type and type contents goes here */ }
Marcador de posición | Descripción | Ejemplo de valor |
---|---|---|
Cadena | Obligatorio. Identificador del mensaje de WhatsApp (wamid) del mensaje anterior al que deseas responder. |
|
String | Required. WhatsApp user phone number. |
|
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": "+16505551234", "context": { "message_id": "wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA=" }, "type": "text", "text": { "body": "You'\''re welcome, Pablo!" } }'
Esta función solo está disponible para empresas de Singapur, cuyos clientes son de Singapur, y para empresas de India, cuyos clientes son de India.
Los mensajes de direcciones brindan a tus usuarios una forma más sencilla de compartir la dirección de envío con la empresa en WhatsApp.
Los mensajes de direcciones son mensajes interactivos que contienen las 4 partes principales: header
, body
, footer
y action
. En el componente de acción, el negocio especifica el nombre "address_message" y los parámetros relevantes.
Por el momento, los mensajes de direcciones se admiten en los siguientes dos países: India y Singapur. A continuación, se describen los campos que se admiten específicamente en qué país.
Nombre del campo | Mostrar etiqueta | Tipo de entrada | Países admitidos | Limitaciones |
---|---|---|---|---|
| Nombre | Texto | India, Singapur | Ninguna |
| Número de teléfono | Teléfono | India, 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 departamento/casa | Texto | India | Ninguna |
| Número de piso | Texto | India | Ninguna |
| Número de torre | Texto | India | Ninguna |
| Nombre del edificio/departamento | Texto | India | Ninguna |
| Dirección | Texto | India, Singapur | Ninguna |
| Punto de referencia/área | Texto | India | Ninguna |
| Número de unidad | Texto | Singapur | Ninguna |
| Ciudad | Texto | India, Singapur | Ninguna |
| Estado | Texto | India | Ninguna |
Esta es una muestra de llamada a la API en relación con el mensaje de dirección. El atributo country
es un campo obligatorio de los parámetros de acción. Si no está incluido, 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 de un determinado país no es correcto, los negocios no podrán solicitar el mensaje de dirección al destinatario. Por ejemplo, los negocios no podrán solicitar un mensaje de dirección a un destinatario que tenga el país configurado en "Singapur", pero cuyo número de teléfono contenga el código de área "91".
Los mensajes de dirección no permitirán que se pasen de manera simultánea campos en conflicto. Por ejemplo, no puedes pasar sg_post_code
si country
está configurado en "IN".
Una vez enviado el mensaje de dirección, el negocio espera a que el usuario complete la dirección y la vuelva a enviar. La dirección que ingresa el usuario se comparte mediante el webhook que se registró en el proceso de configuración.
Los pasos que se deben realizar en un mensaje de dirección son los siguientes:
address_message
al usuario.El siguiente diagrama de secuencia muestra un proceso de integración típico de un mensaje de dirección.
El negocio puede pasar otros atributos, como values
, validation_errors
o saved_addresses
como parte de los parámetros de acción adicionales. A continuación, podrás encontrar información sobre el uso de cada uno.
Parámetro de acción | Uso |
---|---|
| Los negocios completan previamente los campos de dirección (por ejemplo, completan el campo de dirección de la ciudad con "Singapur"). |
| En relación con los negocios, pueden pasar direcciones guardadas previamente asociadas con el usuario. Se ofrece a los usuarios la opción de elegir la dirección guardada, en lugar de completarla manualmente. |
| Los negocios pueden tener errores en los campos de dirección, y WhatsApp impedirá que el usuario envíe la dirección hasta que el problema esté resuelto. |
Haz una llamada POST
a /PHONE_NUMBER_ID/messages
mediante la API de WhatsApp para enviar a un usuario un mensaje de dirección con cifrado de extremo a extremo:
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" } } }'
Si deseas enviar un mensaje de dirección en el que no hay ninguna dirección guardada, WhatsApp instará al usuario o negocio a ingresar una nueva dirección a través de un formulario de 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 ofrecerá al usuario o negocio la posibilidad de seleccionar una dirección entre las direcciones guardas o agregar una nueva dirección. Los usuarios pueden ignorar las direcciones guardadas e ingresar 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", "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 creado recientemente.
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
Una respuesta no exitosa contiene un mensaje de error. Consulta Códigos de error y de estado para obtener más información.
Se debe reenviar un mensaje de dirección al usuario en caso si hay un error de validación en el servidor comercial. El negocio debe devolver el conjunto de valores que ingresó previamente el usuario, junto con los respectivos errores de validación de los campos no válidos, como se muestra en los ejemplos de cargas a continuació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", "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." } } } } }'
Los negocios recibirán notificaciones de envío de direcciones mediante webhooks, como la que 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 siguientes valores.
Nombre del campo | Tipo | Descripción |
---|---|---|
| Objeto | Retiene la respuesta del cliente |
| Cadena | Sería el |
| Objeto | Retiene los datos recibidos del cliente |
| Cadena | Los valores de los campos de dirección que completó el usuario en formato JSON que siempre están presentes |
| Cadena | El texto del cuerpo que envía el cliente y que ve el usuario |
| Cadena | Sería el |
A continuación, se muestra una respuesta a un mensaje de dirección como tipo de respuesta NFM referida a 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" } } } ] }
Si el cliente no admite address_message
, los mensajes se omiten silenciosamente y se envía un mensaje de error al negocio 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.
Cuando envías una serie de mensajes, no se garantiza que el orden en que se entregan los mensajes coincida con el orden de tus solicitudes de la API. Si debes asegurarte de que los mensajes se entreguen en una secuencia determinada, cuando envíes uno, confirma la recepción del estado delivered
en un mensajes de webhook antes de enviar el siguiente mensaje de la secuencia.
Si tienes problemas con la entrega de mensajes, consulta No se entregó el mensaje.