La API de instalaciones locales dejará de estar disponible. Consulta nuestro documento Fin de la API de instalaciones locales para conocer los detalles y descubrir cómo migrar a nuestra nueva generación de API de la nube.
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, mensajes interactivos y plantillas de mensajes a tus clientes.
Consulta las siguientes guías para obtener información acerca de los tipos específicos de mensajes que puedes enviar: mensajes de texto, mensajes multimedia, mensajes de ubicación y contactos, 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 es necesario llamar al nodo de contactos antes de enviar un mensaje.
Se envían mensajes haciendo una llamada /messages
al nodo POST
, independientemente del tipo de mensaje, aunque el contenido del cuerpo del mensaje JSON sí difiera para cada tipo de mensaje (texto, imagen, etc.).
Los siguientes parámetros son los más usados en solicitudes POST de /messages
:
Nombre | Descripción (haz clic en la flecha de la columna izquierda para ver las opciones compatibles) |
---|---|
| Obligatorio si Un objeto |
| Opcional. Una cadena aleatoria, útil para hacer seguimiento. Por ejemplo, podrías pasar el identificador del modelo de mensaje en este campo para hacer seguimiento del recorrido del cliente a partir del primer mensaje que envíes. Puedes seguir el ROI de diferentes tipos de plantillas de mensaje para determinar la más efectiva. Las apps suscriptas al campo del webhook La API de la nube no procesa este campo; solo lo devuelve como parte de los webhooks de mensajes enviados/entregados/leídos. Máximo de 512 caracteres. API de nube únicamente. |
| Obligatorio si 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:
API de nube únicamente. |
| Obligatorio si Un objeto |
| Contiene un objeto API de instalaciones locales únicamente. |
| Obligatorio si Un objeto |
| Obligatorio si Un objeto |
| Obligatorio si Un objeto |
| Obligatorio Servicio de mensajes utilizado para la solicitud. Usa API de nube únicamente. |
| Obligatorio si Permite previsualizar URL en mensajes de texto. Consulta Enviar URL en mensajes de texto. Este campo es opcional si no incluyes una URL en tu mensaje. Valores: API de Instalaciones locales únicamente. Los usuarios de la API de la nube pueden utilizar la misma funcionalidad con el campo |
| Opcional. En estos momentos, solo es posible enviar mensajes a individuos. Se debe configurar como Predeterminado: |
| El estado de un mensaje. Puedes usar este campo para marcar un mensaje como
|
| Obligatorio si Un objeto API de la nube: se admiten stickers de salida estáticos y animados de terceros, además de todos los tipos de stickers de entrada. Un sticker estático debe contener 512 x 512 píxeles y no puede exceder los 100 KB. Un sticker animado debe contener 512 x 512 píxeles y no puede exceder los 500 KB. API de instalaciones locales: solo se admiten stickers de salida estáticos de terceros, además de todos los tipos de stickers de entrada. Un sticker estático debe contener 512 x 512 píxeles y no puede exceder los 100 KB. Los stickers animados no son compatibles. |
| Obligatorio si Un objeto |
| Obligatorio para mensajes de texto. Un objeto |
| Obligatorio. Número de teléfono de WhatsApp o identificador del cliente al que deseas enviar un mensaje. Consulta formatos de números de teléfono. Si es necesario, los usuarios de la API de instalaciones locales pueden obtener este número realizando una llamada al punto de conexión |
| Opcional. El tipo de mensaje que deseas enviar. Si se omite, se establece de forma predeterminada como |
Nombre | Descripción |
---|---|
| Obligatorio. Contiene el texto del mensaje, que puede incluir formato y URL. |
En el caso de la API de instalaciones locales, se devuelve el identificador del objeto de contenido multimedia cuando el contenido multimedia se sube correctamente al cliente de instalaciones locales/referencia de WhatsApp Business mediante el media
punto de conexión.
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 |
Dentro de contacts
, puedes anidar los siguientes objetos: addresses
, emails
, name
, org
, phone
y urls
. Los objetos pluralizados se deben anidar en una matriz, como 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 pluralizados anidados en su interior:
"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. |
Dentro de template
, puedes anidar los objetos components
y language
.
A partir de la versión v2.27.8
, el namespace
de una plantilla debe ser el espacio de nombres asociado a la cuenta de WhatsApp Business que posee el número de teléfono del cliente actual de instalaciones locales de WhatsApp Business. De lo contrario, el mensaje no se enviará.
Además, a partir de la versión v2.41
, el campo namespace
será 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 lenguaje en que se puede representar la plantilla. Solo funciona la política de lenguaje |
| Opcional. Matriz que incluye los parámetros del mensaje. |
Dentro de components
, puedes anidar el objeto parameters
. A su vez, puedes fijar type
en button
.
Nombre | Descripción |
---|---|
| Obligatorio. Describe el tipo |
| Opcional. Matriz que incluye el contenido del mensaje. |
Nombre | Descripción |
---|---|
| Obligatorio. Describe el tipo Los tipos de contenido multimedia ( Para obtener más información sobre |
Dentro del objeto components
, puedes fijar type
en button
. Estos son los parámetros de botón:
Nombre | Descripción |
---|---|
| Obligatorio. Tipo de botón que se crea. |
| Obligatorio. Índice de posición del botón. Es posible tener hasta 10 botones con valores índice de |
| Obligatorio. Parámetros del botón, que se definen en el momento de la creación en el administrador comercial. Incluye los siguientes parámetros:
|
Ejemplo del tipo button
con sub_type quick_reply
:
{ "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "Yes-Button-Payload" }] }
Ejemplo del tipo button
con sub_type copy_code
{ "type": "button", "sub_type": "copy_code", "index": 0, "parameters": [{ "type": "coupon_code", "coupon_code": "DISCOUNT20" }] }
El objeto hsm
quedó obsoleto con la v2.39
de la API de instalaciones locales/referencia de WhatsApp Business. En su lugar, utiliza el objeto template
.
Nombre | Descripción |
---|---|
| Obligatorio. Espacio de nombres que se utilizará. A partir de la |
| Obligatorio. Nombre del elemento que indica la plantilla que se utilizará en el espacio de nombres. A partir de la |
| Obligatorio. Permite la especificación de un lenguaje "deterministic" o "fallback". Consulta la sección Lenguaje para obtener más información. Campo utilizado que ofrece una opción |
| Obligatorio. Este campo es una matriz de valores que se aplicarán a las variables en 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 puede haber espacios al inicio ni al final del 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 documentos con filename
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "id": "your-media-id", "filename": "your-document-filename" } }
Mensajes de documentos con link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } }
Mensajes de video con 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 de productos individuales y múltiples):
{ "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 de productos múltiples):
{ "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 (procesos):
{ "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 } } } } } }
El siguiente es un ejemplo de payload
en una respuesta (los objetos “meta” y “error” se omiten para abreviar).
{ "messages": [{ "id": "message-id" }] }
Si la solicitud se realiza correctamente, recibirás una respuesta con un identificador de mensaje. Si la solicitud devuelve una sección errors
, verifica el mensaje que la originó 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 API de instalaciones locales/referencia de WhatsApp Business y Códigos de estado HTTP.
Aplica a negocios en Brasil, Colombia y Singapur, a partir del 12 de septiembre de 2023. Aplica a todos los negocios a partir del 12 de octubre de 2023.
Si la solicitud está sujeta a una evaluación de calidad, la respuesta contendrá una propiedad message_status
con un mensaje, en el que se indica que el mensaje no fue enviado inmediatamente. El mensaje se enviará u omitirá después de que se haya validado la calidad. Esta propiedad solo existirá si el mensaje se retiene.
{ "messages": [{ "id": "message-id", "message_status": "Message has been held because quality assessment is pending", }] }
WhatsApp permite aplicar formato en los mensajes. Para aplicar formato en todo o parte del mensaje, usa los siguientes símbolos de formato:
Formato | Símbolo | Ejemplo: |
---|---|---|
Negrita | Asterisco (*) | Tu total es *10.50 USD*. |
Cursiva | Guion bajo (_) | ¡Bienvenido a _WhatsApp_! |
Tilde (~) | ¡Esto es ~bueno~ perfecto! | |
| Tres acentos graves (```) | ```print 'Hello World';``` |
En este contexto, el rendimiento representa la cantidad de mensajes que se pueden enviar en un segundo cualquiera usando el cliente de la API de instalaciones locales/referencia de WhatsApp Business. El rendimiento máximo alcanzable depende de varios factores; el más importante tiene que ver con la configuración elegida del cliente y con el hecho de que un mensaje se envíe o no a un usuario nuevo o existente. La configuración de sesiones de cifrado lleva un poco más de tiempo al enviar mensajes a un usuario nuevo.
Configuración del cliente | Mensajes de texto admitidos por segundo |
---|---|
Un fragmento | 70 |
Múltiples fragmentos (32 fragmentos) | 250 |
Nota: No envíes el mismo mensaje repetidamente al mismo destinatario con la API de WhatsApp Business.
Hay múltiples razones por las que los índices de entrega no son del 100%. Entre algunos casos frecuentes se incluye al de los usuarios que tienen acceso esporádico a la red, por lo que están inactivos durante un período de tiempo, o a la posibilidad de crear una experiencia del cliente de alta calidad.
Los mensajes que pueden ser entregados con WhatsApp tendrán un índice de entrega muy alto. Sin embargo, hay muchas razones por las que podría no entregarse un mensaje. Podrás acceder al estado exacto de un mensaje mediante la supervisión de tus devoluciones de llamadas. Esto es diferente al envío de mensajes por SMS, por ejemplo, en los que no tienes acceso al estado final de la entrega y volver a enviar el mensaje puede, de hecho, producir un resultado diferente.
Los mensajes pueden permanecer sin entregarse porque el teléfono de un usuario está apagado o no tiene batería, o porque perdió el teléfono y va a obtener uno nuevo y tiene desactivada la SIM. Es posible que existan errores en la capacidad de los clientes de la empresa de 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 llamadas de recepción del servidor para confirmar que el mensaje fue recibido en la nube del servidor de WhatsApp.
Cuando el usuario restablezca la conexión a la red, se le entregarán todos los mensajes que le hayas enviado. Recibir más de un mensaje con el mismo contenido será una mala experiencia para él. Lo más probable es que eso lo predisponga a bloquearte o a quejarse. Tendrás más probabilidades de que pases a ser un remitente prohibido.
Si envías un mensaje y recibes un identificador de mensaje de la API, quiere decir que hiciste lo posible por enviar este mensaje. No envíes el mismo contenido al mismo destinatario.
Si observas índices de entrega bajos durante un período prolongado, abre un ticket de asistencia en Asistencia directa.
Cuando envías un mensaje, apenas recibes un identificador de mensaje, significa que el mensaje se almacenó en la base de datos. El cliente de la API de WhatsApp Business seguirá intentando enviar ese mensaje hasta que el servidor de WhatsApp confirme la recepción. Este proceso no tiene cronograma final. El servidor de WhatsApp intentará entonces entregar ese mensaje al teléfono del usuario. Si el teléfono del usuario no está en internet, el mensaje se almacenará durante 30 días antes de que el servidor de WhatsApp lo descarte.
Sí. WhatsApp te permite dar formato al texto seleccionado dentro de tus mensajes con negrita, cursiva, tachado o monoespacio.
Actualmente, no existe forma de ver cuántos o qué usuarios han bloqueado tu empresa. El mejor indicador sería detectar las devoluciones de llamada del estado y si no recibes el estado delivered
, quiere decir que el usuario ha bloqueado tu empresa o que no tiene conexión a la red. Consulta la documentación sobre Webhook para obtener más detalles.
Si un usuario bloqueó tu empresa, la API de contactos seguirá devolviendo ese número de teléfono como usuario de WhatsApp válido. Sin embargo, cuando envíes el mensaje, no se entregará. Si es un mensaje pagado, no se te cobrará.
No, no se puede garantizar que el orden de llegada de los mensajes sea el mismo que el orden en el que los mensajes fueron enviados. Si en tu caso el orden es fundamental, te sugerimos esperar la devolución de llamada entregada del primer mensaje antes de enviar el segundo mensaje.
Al utilizar el nodo messages
, debes configurar el encabezado Content-Type
como application/json
para que el cliente de la API de WhatsApp Business analice de manera apropiada el cuerpo del mensaje. Además existe un encabezado de Authorization
que debe configurarse y que debe contener un token de acceso vigente. Consulta la documentación Inicio de sesión y autenticación para obtener información sobre cómo obtener tu token y saber cuándo caduca.
Puede haber casos en los que necesites más tiempo para tratar una consulta del cliente y que solo puedas dar una respuesta pasadas las 24 horas. Te recomendamos crear plantillas de mensaje para:
En ambos casos, asegúrate de ofrecer el mayor contexto posible en la plantilla de mensaje. Por ejemplo: