Estamos retirando la API local. Consulta nuestro documento Retirada de la API local para obtener más información y aprender a migrar a nuestra API de nube de nueva generación.
We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
/v1/messages
Usa el nodo messages
para enviar texto, contenido multimedia, contactos, ubicaciones y mensajes interactivos, así como plantillas de mensajes, a tus clientes.
Consulta las guías siguientes para obtener información sobre los tipos de mensajes específicos que puedes enviar: mensajes de texto, mensajes multimedia, mensajes de contactos y ubicación, mensajes interactivos, plantillas de mensajes, plantillas de mensajes multimedia y plantillas de mensajes interactivos.
Necesitas lo siguiente:
A partir de la versión 2.39, no tienes que llamar al nodo de contacto antes de enviar un mensaje.
Para enviar mensajes, debes realizar una llamada POST
al nodo /messages
independientemente del tipo de mensaje. El contenido del cuerpo del mensaje JSON es distinto para cada tipo de mensaje (texto, imagen, etc.).
Estos son los parámetros principales que se utilizan en las solicitudes POST de /messages
:
Nombre | Descripción (Haz clic en la flecha de la columna de la izquierda para consultar las opciones admitidas). |
---|---|
| Obligatorio cuando Un objeto |
| Opcional. Cadena aleatoria útil para hacer un seguimiento. Por ejemplo, podrías pasar el identificador de la plantilla de mensaje en este campo para hacer un seguimiento del recorrido del cliente desde el primer mensaje que envíes. Después, podrías hacer un seguimiento del ROI de diferentes tipos de plantillas de mensajes para determinar el más efectivo. Las aplicaciones suscritas al campo del webhook La API de nube no procesa este campo, solo lo devuelve como parte de los webhooks de mensaje enviado, entregado o leído. Máximo 512 caracteres. Solo en la API de nube. |
| Obligatorio cuando Un objeto |
| Obligatorio si se responde a algún mensaje de la conversación. Un objeto que contiene el identificador de un mensaje anterior al que respondes. Por ejemplo:
Solo en la API de nube. |
| Obligatorio cuando Un objeto |
| Contiene un objeto Solo en la API local. |
| Obligatorio cuando Un objeto |
| Obligatorio cuando Un objeto |
| Obligatorio cuando Un objeto |
| Obligatorio. Servicio de mensajes que se usa para la solicitud. Usa Solo en la API de nube. |
| Obligatorio si Permite obtener la vista previa de las URL de mensajes de texto. Consulta Enviar direcciones URL en los mensajes de texto. Este campo es opcional si no incluye una URL en el mensaje. Valores: Solo en la API local. Los usuarios de la API de nube pueden utilizar la misma funcionalidad con el campo |
| Opcional. Actualmente solo puedes enviar mensajes a personas. Establécelo como Valor predeterminado: |
| El estado de un mensaje. Puedes utilizar este campo para marcar un mensaje como
|
| Obligatorio cuando Un objeto API de nube: se admiten los stickers de salida de terceros estáticos y animados, así como todos los tipos de stickers de entrada. Un sticker estático debe ser de 512 × 512 píxeles y no puede superar los 100 KB. Un sticker animado debe ser de 512 × 512 píxeles y no puede superar los 500 KB. API local: solo se admiten los stickers de salida de terceros estáticos, así como todos los tipos de stickers de entrada. Un sticker estático debe ser de 512 × 512 píxeles y no puede superar los 100 KB. Los stickers animados no se admiten. |
| Obligatorio cuando Un objeto |
| Obligatorio para mensajes de texto. Un objeto |
| Obligatorio. Identificador de WhatsApp o número de teléfono del cliente al que quieres enviar un mensaje. Consulta Formatos de número de teléfono. Si es necesario, los usuarios de la API local pueden obtener este número con una llamada al extremo |
| Opcional. El tipo de mensaje que quieres enviar. Si se omite, se establece en |
Nombre | Descripción |
---|---|
| Obligatorio. Contiene el texto del mensaje, que puede incluir URL y opciones de formato. |
Para la API local, se devuelve el identificador del objeto multimedia cuando el contenido multimedia se sube correctamente al cliente de la implementación de referencia/local de WhatsApp Business con el extremo media
.
Name | Description |
---|---|
| Required when The media object ID. Do not use this field when message |
| Required when The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs. Do not use this field when message Cloud API users only:
|
| Optional. Media asset caption. Do not use with On-Premises API users:
|
| Optional. Describes the filename for the specific document. Use only with The extension of the filename will specify what format the document is displayed as in WhatsApp. |
| Optional. On-Premises API only. This path is optionally used with a |
En contacts
, puedes anidar los objetos siguientes: addresses
, emails
, name
, org
, phone
y urls
. Los objetos en plural se deben incluir en una matriz, como se muestra en el siguiente ejemplo.
Name | Description |
---|---|
| Optional. Full contact address(es) formatted as an
|
| Optional.
|
| Optional. Contact email address(es) formatted as an
|
| Required. Full contact name formatted as a
*At least one of the optional parameters needs to be included along with the |
| Optional. Contact organization information formatted as an
|
| Optional. Contact phone number(s) formatted as a
|
| Optional. Contact URL(s) formatted as a
|
Ejemplo de un objeto contacts
con objetos en plural anidados en él:
"contacts": [ { "addresses": [ { "city": "city name", "country": "country name", "country_code": "code", "state": "Contact's State", "street": "Contact's Street", "type": "Contact's Address Type", "zip": "Contact's Zip Code" } ], "birthday": "birthday", "emails": [ { "email": "email", "type": "HOME" }, { "email": "email", "type": "WORK" } ], "name": { "first_name": "first name value", "formatted_name": "formatted name value", "last_name": "last name value", "suffix": "suffix value" }, "org": { "company": "company name", "department": "dep name", "title": "title" }, "phones": [ { "phone": "Phone number", "wa-id": "WA-ID value", "type": "MAIN" }, { "phone": "Phone number", "type": "HOME" }, { "phone": "Phone number", "type": "WORK" } ], "urls": [{ "url": "some url", "type": "WORK" }] } ]
Name | Description |
---|---|
| Required. Location latitude in decimal degrees. |
| Required. Location longitude in decimal degrees. |
| Required. Name of the location. |
| Required. Address of the location. |
En template
, puedes anidar los objetos components
y language
.
A partir de la versión v2.27.8
, el campo namespace
de la plantilla debe ser el espacio de nombres asociado a la cuenta WABA a la que pertenece el número de teléfono del cliente local de WhatsApp Business actual. En caso contrario, no se podrá enviar el mensaje.
Además, a partir de la versión v2.41
, namespace
será un campo opcional.
Nombre | Descripción |
---|---|
| Obligatorio. Espacio de nombres de la plantilla. A partir de la versión |
| Obligatorio. Nombre de la plantilla. |
| Obligatorio. Especifica el idioma en que se puede representar la plantilla. Solo la política de idioma |
| Opcional. Matriz que contiene los parámetros del mensaje. |
En components
, puedes anidar el objeto parameters
. Además, puedes establecer type
en button
.
Nombre | Descripción |
---|---|
| Obligatorio. Describe el tipo de |
| Opcional. Matriz que incluye el contenido del mensaje. |
Nombre | Descripción |
---|---|
| Obligatorio. Describe el tipo de Los tipos de contenido multimedia ( Para obtener más información sobre los parámetros |
En el objeto components
, puedes establecer type
en button
. Estos son los parámetros del botón:
Nombre | Descripción |
---|---|
| Obligatorio. Tipo de botón que se crea. |
| Obligatorio. Índice de la posición del botón. Puedes tener hasta 10 botones con los valores de índice de |
| Obligatorio. Parámetros para el botón, que se definen durante la creación en Business Manager. Incluye los siguientes parámetros:
|
Ejemplo del tipo button
con quick_reply
como valor del parámetro sub_type:
{ "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "Yes-Button-Payload" }] }
Ejemplo del tipo button
con copy_code
como valor del parámetro sub_type:
{ "type": "button", "sub_type": "copy_code", "index": 0, "parameters": [{ "type": "coupon_code", "coupon_code": "DISCOUNT20" }] }
El objeto hsm
se ha retirado con la versión v2.39
de la implementación de referencia/local de WhatsApp Business. En su lugar, debes usar el objeto template
.
Nombre | Descripción |
---|---|
| Obligatorio. Espacio de nombres que se usará. A partir de la versión |
| Obligatorio. Nombre del elemento que indica la plantilla que se debe usar en el espacio de nombres. A partir de la versión |
| Obligatorio. Permite la especificación de un idioma determinista. Consulta la sección Idioma para obtener más información. Este campo se usa para permitir una opción de |
| Obligatorio. Este campo es una matriz de valores que se aplica a las variables de la plantilla. Consulta la sección Parámetros localizables para obtener más información. |
The interactive
object generally contains 4 main components: header
, body
, footer
, and action
. Additionally, some of those components can contain one or more different objects:
header
, you can nest media
objects.action
, you can nest section
and button
objects.Name | Description |
---|---|
| Required. The type of interactive message you want to send. Supported values:
|
| Required for type Header content displayed on top of a message. You cannot set a The
|
| Optional for type An object with the body of the message. The
|
| Optional. An object with the footer of the message. The
|
| Required. An |
Name | Description |
---|---|
| Required for List Messages. Button content. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters. |
| Required for Reply Button Messages. A
No puedes añadir espacios iniciales ni finales al establecer el identificador. |
| Required for List Messages and Multi-Product Messages. Array of |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the Facebook catalog linked to your WhatsApp Business Account. This ID can be retrieved via Commerce Manager. |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the product in a catalog. Maximum 100 characters for both Single-Product and Multi-Product messages. To get this ID, go to Commerce Manager, select your Facebook Business account, and you will see a list of shops connected to your account. Click the shop you want to use. On the left-side panel, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name. |
| Optional for Flows Messages. The current mode of the Flow, either Default: |
| Required for Flows Messages. Must be |
| Required for Flows Messages. A token that is generated by the business to serve as an identifier. |
| Required for Flows Messages. Unique identifier of the Flow provided by WhatsApp. |
| Required for Flows Messages. Text on the CTA button, eg. "Signup". Maximum length: 20 characters (no emoji). |
| Optional for Flows Messages.
Default: |
| Optional for Flows Messages. Required only if
|
Name | Description |
---|---|
| Required if the message has more than one Title of the section. Maximum length: 24 characters. |
| Required for List Messages. Contains a list of row objects. Limited to 10 rows across all sections. Each
|
| Required for Multi-Product Messages. Array of Each
|
Mensajes de audio:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "audio", "audio": { "id": "your-media-id", } }
Mensajes de documento, mediante filename
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "id": "your-media-id", "filename": "your-document-filename" } }
Mensajes de documento, mediante link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } }
Mensajes de vídeo, mediante link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "video", "video": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } } }
Mensajes de texto:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "text", "text": { "body": "your-message-content" } }
Mensajes interactivos (listas):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive":{ "type": "list", "header": { "type": "text", "text": "your-header-content-here" }, "body": { "text": "your-text-message-content-here" }, "footer": { "text": "your-footer-content-here" }, "action": { "button": "cta-button-content-here", "sections":[ { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, ... ] } } }
Mensajes interactivos (botones de respuesta):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive": { "type": "button", "header": { # optional "type": "text" | "image" | "video" | "document", "text": "your text" # OR "document": { "id": "your-media-id", "filename": "some-file-name" } # OR "document": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name", }, "filename": "some-file-name" }, # OR "video": { "id": "your-media-id" } # OR "video": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name" } } # OR "image": { "id": "your-media-id" } # OR "image": { "link": "http(s)://the-url", "provider": { "name": "provider-name" } } }, # end header "body": { "text": "your-text-body-content" }, "footer": { # optional "text": "your-text-footer-content" }, "action": { "buttons": [ { "type": "reply", "reply": { "id": "unique-postback-id", "title": "First Button’s Title" } }, { "type": "reply", "reply": { "id": "unique-postback-id", "title": "Second Button’s Title" } } ] } # end action } # end interactive }
Mensajes interactivos (mensajes sobre un solo producto y sobre varios):
{ "recipient_type": "individual", "to" : "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "product", "body": { "text": "body text" }, "footer": { "text": "footer text" }, "action": { " _id": "catalog-ID", "product_retailer_id": "product-ID" } } }
Mensajes interactivos (mensajes sobre varios productos):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "product_list", "Header":{ "type": "text", "text": "text-header-content" }, "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "catalog_id":"catalog-id", "sections": [ { "title": "section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" }, { "product_retailer_id": "product-SKU-in-catalog" }, ... ]}, { "title": "the-section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" } ... ]}, ... ] }, } }
Mensajes interactivos (mensajes de catálogo):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "catalog_message", "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "name": "catalog_message", "parameters":{ "thumbnail_product_retailer_id": "product-SKU-in-catalog" } }, } }
Mensajes interactivos (flujos):
{ "recipient_type": "individual", "to": "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "flow", "header": { "type": "text", "text": "Flow message header" }, "body": { "text": "Flow message body" }, "footer": { "text": "Flow message footer" }, "action": { "name": "flow", "parameters": { "flow_message_version": "3", "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s", "flow_id": "<FLOW_ID>", "flow_cta": "Book!", "flow_action": "navigate", "flow_action_payload": { "screen": "<SCREEN_ID>", "data": { # optional "user_name": "name", "user_age": 25 } } } } } }
A continuación, se muestra un ejemplo del elemento payload
en una respuesta. Los objetos de metadatos y de errores se omiten para mayor brevedad.
{ "messages": [{ "id": "message-id" }] }
Si la solicitud se realiza correctamente, recibes una respuesta con un identificador de mensaje. Si la solicitud devuelve una sección errors
, comprueba el mensaje de origen y corrige los errores antes de volver a enviarla. Para obtener más información sobre los errores, consulta Códigos de error del cliente de la implementación de referencia/local de WhatsApp Business y Códigos de estado HTTP.
Se aplica a las empresas de Brasil, Colombia y Singapur a partir del 12 de septiembre de 2023. Se aplica a todas las empresas a partir del 12 de octubre de 2023.
Si la solicitud se retiene para evaluar su calidad, la respuesta incluirá una propiedad message_status
con un mensaje en el que se indica que el mensaje no se ha enviado inmediatamente y que se enviará o anulará una vez validada la calidad. Esta propiedad solo aparecerá si el mensaje se retiene.
{ "messages": [{ "id": "message-id", "message_status": "Message has been held because quality assessment is pending", }] }
WhatsApp permite aplicar algunas opciones de formato a los mensajes. Para formatear un mensaje, o parte de este, usa los símbolos de formato siguientes:
Formato | Símbolo | Ejemplo |
---|---|---|
Negrita | Asterisco (*) | Tu total es *10,50 USD*. |
Cursiva | Guion bajo (_) | ¡Bienvenido a _WhatsApp_! |
Tilde de la ñ (~) | ¡Esto es ~mejor~ lo mejor! | |
| Tres acentos graves (```) | ```print 'Hola, mundo';``` |
En este contexto, el rendimiento representa el número de mensajes que se pueden enviar en cualquier momento dado mediante el cliente de la implementación de referencia/local de WhatsApp Business. El rendimiento máximo alcanzable depende de distintos factores. Los más importantes son la elección que haces de la configuración del cliente y si un mensaje se envía a un nuevo usuario o a uno existente. Las sesiones de cifrado tardan un poco más en configurarse cuando se envían mensajes a un nuevo usuario.
Configuración del cliente | Mensajes de texto admitidos por segundo |
---|---|
Una partición | 70 |
Varias particiones (32) | 250 |
Nota: No envíes el mismo mensaje en repetidas ocasiones al mismo destinatario con la API de WhatsApp Business.
Puede haber varios motivos por los que la frecuencia de entrega no se encuentra al 100 %. Algunos de los casos frecuentes incluyen a usuarios que acceden de forma esporádica a la red o que han estado inactivos durante un periodo de tiempo o la creación de una experiencia de usuario de alta calidad.
Los mensajes que se pueden entregar con WhatsApp tendrán una frecuencia de entrega muy alta. Sin embargo, hay varios motivos por los que puede que un mensaje no se entregue. Tendrás acceso al estado exacto de un mensaje si supervisas las devoluciones de llamada. Este es diferente al envío de mensajes con SMS, por ejemplo, donde no tienes acceso al estado de entrega final y, si reenvías el mensaje, se puede producir un resultado diferente.
Los mensajes pueden quedarse pendientes de envío debido a que el teléfono del usuario se encuentra fuera de servicio, no tiene batería o se perdió y al obtener uno nuevo se ha desactivado la SIM. Es posible que exista algún error por el que el cliente empresarial no pueda conectarse a la red. También es posible que las devoluciones de llamada (webhooks) no se estén entregando. Puedes supervisar estas situaciones con el nodo health
. Puedes activar las devoluciones de llamada de recepción del servidor para saber si el mensaje llegó a la nube del servidor de WhatsApp.
Siempre y cuando un usuario vuelva a conectarse a la red, todos los mensajes que hayas enviado se le entregarán. La recepción de más de un mensaje con el mismo contenido será una mala experiencia para el usuario y será más probable que te bloquee o se queje. Además, será más probable que se prohíba tu participación en el servicio.
Si envías un mensaje y recibes un identificador de mensaje de la API, ya has hecho todo lo posible por enviar el mensaje. No vuelvas a enviar el mismo contenido al mismo destinatario.
Si observas frecuencias de entrega bajas durante un periodo prolongado de tiempo, envía un ticket de asistencia con Asistencia directa.
Cuando envías un mensaje, en cuanto recibes un identificador de mensaje, eso significa que la solicitud de mensaje se ha almacenado en la base de datos. El cliente de la API de WhatsApp Business seguirá intentando enviar el mensaje hasta que el servidor de WhatsApp lo confirme. Este proceso no tiene línea temporal final. A continuación, el servidor de WhatsApp intentará entregar el mensaje al teléfono del usuario. Si el teléfono del usuario no está en línea, el mensaje se almacenará durante 30 días antes de que lo descarte el servidor de WhatsApp.
Sí. WhatsApp te permite dar formato al texto seleccionado dentro de los mensajes con negrita, cursiva, tachado o fuente monoespaciada.
Actualmente, no hay ninguna forma de saber cuántos ni qué usuarios han bloqueado tu empresa. El mejor indicador sería escuchar las devoluciones de llamada de estado y, si no recibes el estado delivered
, puede que el usuario haya bloqueado tu empresa o que no tenga conexión de red. Para obtener más detalles, consulta la documentación sobre webhooks.
Si un usuario ha bloqueado la empresa, la API de contactos seguirá devolviendo el número de teléfono como usuario de WhatsApp válido. Sin embargo, al enviar el mensaje, no se entregará. Si se trata de un mensaje de pago, no se te cobrará.
No, no se garantiza que los mensajes lleguen en el mismo orden en que se enviaron. Si el orden es crítico para tu caso de uso, el enfoque sugerido es esperar a escuchar la llamada de entrega del primer mensaje antes de enviar el segundo.
Al utilizar el nodo messages
, debe configurar el encabezado Content-Type
como application/json
para el cliente de la API de WhatsApp Business a fin de poder analizar el cuerpo del mensaje correctamente. A continuación, también se debe definir un encabezado Authorization
, que debe contener un identificador de acceso que no haya caducado. Consulte la documentación de inicio de sesión y autenticación para obtener información sobre cómo obtener el identificador y cuándo caduca.
Pueden existir casos en los que necesites más tiempo para gestionar la consulta de un cliente y solo puedas proporcionar una respuesta después de 24 horas. Se recomienda crear plantillas de mensajes para:
En ambos casos, asegúrate de ofrecer tanto contexto como sea posible en la plantilla de mensaje. Por ejemplo: