We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.

Mensajes

Usa el punto final /PHONE_NUMBER_ID/messages para enviar texto, contenido multimedia, contactos, ubicaciones, mensajes interactivos y plantillas de mensajes a tus clientes. Más información sobre los mensajes que puedes enviar.

Punto de conexiónAutenticación

/PHONE_NUMBER_ID/messages

Developers can authenticate their API calls with the access token generated in the App Dashboard > WhatsApp > API Setup.


Solution Partners must authenticate themselves with an access token with the whatsapp_business_messaging permission.

Un identificador único (WAMID) identifica los mensajes. Con este, puedes hacer un seguimiento del estado de los mensajes en los webhooks. También puedes marcar un mensaje entrante como leído a través del punto final de mensajes. Este WAMID puede tener un máximo de 128 caracteres.

Con la API Cloud, ya no es posible verificar de manera explícita si un número de teléfono tiene un identificador de WhatsApp. Para enviar un mensaje a un cliente con la API Cloud, envíalo directamente a su número de teléfono después de que se haya suscrito. Consulta Referencia, Mensajes para ver ejemplos.

Objeto "Message"

Para enviar un mensaje, primero debes crear un objeto "Message" con el contenido que deseas enviar. Estos son los parámetros que se utilizan en un objeto message:

NombreDescripción (haz clic en la flecha de la columna izquierda para ver las opciones compatibles)

audio

Objeto

Obligatorio si type=audio.

Un objeto media que contiene audio.

biz_opaque_callback_data

Cadena

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 messages en la cuenta de WhatsApp Business pueden obtener esta cadena, ya que está incluida en el objeto statuses dentro de las cargas útiles 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.

contacts

Objeto

Obligatorio si type=contacts.

Un objeto contacts.

context

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:


{"message_id":"MESSAGE_ID"}


API de nube únicamente.

document

Objeto

Obligatorio si type=document.

Un objeto media que contiene un documento.

hsm

Objeto

Contiene un objeto hsm. Esta opción quedó obsoleta con la v2.39 de la API de instalaciones locales. Utiliza el objeto template en su lugar.


API de instalaciones locales únicamente.

image

Objeto

Obligatorio si type=image.

Un objeto media que contiene una imagen.

interactive

Objeto

Obligatorio si type=interactive.

Un objeto interactive. Los componentes de cada objeto interactive suelen seguir un patrón coherente: header, body, footer y action.

location

Objeto

Obligatorio si type=location.

Un objeto location.

messaging_product

Cadena

Obligatorio

Servicio de mensajes utilizado para la solicitud. Usa "whatsapp".


API de nube únicamente.

preview_url

Booleano

Obligatorio si type=text.

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:false (predeterminado), true.


API de Instalaciones locales únicamente. Los usuarios de la API de la nube pueden utilizar la misma funcionalidad con el campo preview_url dentro de un objeto de texto.

recipient_type

Cadena

Opcional.

En estos momentos, solo es posible enviar mensajes a individuos. Se debe configurar como individual.


Predeterminado: individual

status

Cadena

El estado de un mensaje. Puedes usar este campo para marcar un mensaje como read. Consulte las siguientes guías para obtener información:


sticker

Objeto

Obligatorio si type=sticker.

Un objeto media que contiene un sticker.


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.

template

Objeto

Obligatorio si type=template.

Un objeto template.

text

Objeto

Obligatorio para mensajes de texto.

Un objeto text.

to

Cadena

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 contacts.

type

Cadena

Opcional.

El tipo de mensaje que deseas enviar. Si se omite, se establece de forma predeterminada como text.

Los siguientes objetos se anidan dentro del objeto "Message":

Objeto "Contacts"

NameDescription

addresses

object

Optional.

Full contact address(es) formatted as an addresses object. The object can contain the following fields:

streetstringOptional. Street number and name.

citystringOptional. City name.

statestringOptional. State abbreviation.

zipstringOptional. ZIP code.

countrystringOptional. Full country name.

country_codestringOptional. Two-letter country abbreviation.

typestringOptional. Standard values are HOME and WORK.

birthday

Optional.

YYYY-MM-DD formatted string.

emails

object

Optional.

Contact email address(es) formatted as an emails object. The object can contain the following fields:

emailstringOptional. Email address.

typestringOptional. Standard values are HOME and WORK.

name

object

Required.

Full contact name formatted as a name object. The object can contain the following fields:

formatted_namestringRequired. Full name, as it normally appears.

first_namestringOptional*. First name.

last_namestringOptional*. Last name.

middle_namestringOptional*. Middle name.

suffixstringOptional*. Name suffix.

prefixstringOptional*. Name prefix.


*At least one of the optional parameters needs to be included along with the formatted_name parameter.

org

object

Optional.

Contact organization information formatted as an org object. The object can contain the following fields:

companystringOptional. Name of the contact's company.

departmentstringOptional. Name of the contact's department.

titlestringOptional. Contact's business title.

phones

object

Optional.

Contact phone number(s) formatted as a phone object. The object can contain the following fields:

phonestringOptional. Automatically populated with the `wa_id` value as a formatted phone number.

typestringOptional. Standard Values are CELL, MAIN, IPHONE, HOME, and WORK.

wa_idstringOptional. WhatsApp ID.

urls

object

Optional.

Contact URL(s) formatted as a urls object. The object can contain the following fields:

urlstringOptional. URL.

typestringOptional. Standard values are HOME and WORK.

Objeto "Interactive"

NombreDescripción

action

Objeto

Obligatorio.

La acción que deseas que realice el usuario después de leer el mensaje.

body

Objeto

Opcional para el tipo product. Obligatorio para otros tipos de mensajes.

Un objeto con el cuerpo del mensaje.


El objeto body contiene el siguiente campo:

textcadenaObligatorio si contiene cuerpo. El contenido del mensaje. Se admiten emojis y Markdown. Longitud máxima: 1.024 caracteres.

footer

Objeto

Opcional. Un objeto con el pie de página del mensaje.


El objeto footer contiene el siguiente campo:

textcadena - Obligatorio si contiene pie de página. El contenido del pie de página. Se admiten emojis, Markdown y enlaces. Longitud máxima: 60 caracteres.

header

Objeto

Obligatorio para el tipo product_list. Opcional para otros tipos.

Contenido de encabezado que se muestra en la parte de arriba del mensaje. No puedes configurar un encabezado si tu objeto "Interactive" es del tipo product. Consulta el objeto header para obtener más información.

type

Objeto

Obligatorio.

El tipo de mensaje interactivo que te gustaría enviar. Valores admitidos:


  • button: se utiliza en botones de respuesta.
  • catalog_message: se utiliza en mensajes de catálogo.
  • list: se utiliza en mensajes de lista.
  • product: se utiliza en mensajes de productos individuales.
  • product_list: se utiliza en mensajes multiproducto.
  • flow: se utiliza en mensajes de procesos.

Los siguientes objetos se anidan dentro del objeto interactive:

Objeto "Action"

NombreDescripción

button

Cadena

Se requiere para los mensajes de lista.

Contenido del botón. No puede ser una cadena vacía y debe ser único dentro del mensaje. Se ofrece compatibilidad con emojis, no así con Markdown .


Longitud máxima: 20 caracteres.

buttons

Matriz de objetos

Obligatorio en los botones de respuesta.

Un objeto "Button" puede contener los siguientes parámetros:


  • type: el único tipo admitido es reply (en botones de respuesta)
  • title: título del botón. No puede ser una cadena vacía y debe ser único dentro del mensaje. Se ofrece compatibilidad con emojis, no así con Markdown . Longitud máxima: 20 caracteres.
  • id: identificador único del botón. Se devuelve este identificador en el webhook cuando el usuario hace clic en el botón. Longitud máxima: 256 caracteres.

Puedes tener hasta 3 botones. No puede haber espacios al comienzo ni al final del identificador.

catalog_id

Cadena

Obligatorio en el caso de los mensajes de productos individuales y múltiples.

Identificador único del catálogo de Facebook vinculado a la cuenta de WhatsApp Business. Este identificador se puede recuperar a través del administrador de ventas de Meta.

product_retailer_id

Cadena

Obligatorio en el caso de los mensajes de productos individuales y múltiples.

Identificador único del producto en un catálogo.


Para obtener este identificador, ve al administrador de ventas de Meta y selecciona tu cuenta comercial de Meta. Verás una lista de las tiendas conectadas a tu cuenta. Haz clic en la tienda que deseas usar. En el panel izquierdo, haz clic en Catálogo > Artículos y busca el artículo que deseas mencionar. El identificador de ese artículo se muestra en el nombre del mismo.

sections

matriz de objetos

Obligatorio en el caso de mensajes de listas y mensajes de productos múltiples.

Matriz de objetos section. Mínimo 1, máximo 10. Consulta el objeto section.

mode

Cadena

Opcional en el caso de los mensajes de procesos.

El modo actual del proceso, ya sea draft o published.


Predeterminado: published

flow_message_version

Cadena

Obligatorio en el caso de los mensajes de procesos.

Debe ser 3.

flow_token

Cadena

Obligatorio en el caso de los mensajes de procesos.

Un token que genera el negocio y sirve como identificador.

flow_id

Cadena

Obligatorio en el caso de los mensajes de procesos.

Identificador único del proceso proporcionado por WhatsApp.

flow_cta

Cadena

Obligatorio en el caso de los mensajes de procesos.

Texto del botón de llamada a la acción, por ejemplo. "Registrarse".


Longitud máxima: 20 caracteres (no se admiten emojis).

flow_action

Cadena

Opcional en el caso de los mensajes de procesos.

navigate o data_exchange. Usa navigate para predefinir la primera pantalla como parte del mensaje. Usa data_exchange para los casos de uso avanzados en los que tu punto de conexión proporciona la primera plantilla.


Valor predeterminado: navigate

flow_action_payload

Objeto

Opcional en el caso de los mensajes de procesos.

Obligatorio solo si flow_action es navigate. El objeto puede contener los siguientes parámetros:

screencadenaObligatorio. El id de la primera pantalla del proceso.

dataobjetoOpcional. Los datos de entrada de la primera pantalla del proceso. Debe ser un objeto no vacío.

Objeto "Header"

NombreDescripción

document

Objeto

Es obligatorio si type se configura en document.

Contiene el objeto "Media" de este documento.

image

Objeto

Se requiere cuando type está configurado en image.

Contiene el objeto "Media" de esta imagen.

text

Cadena

Es obligatorio si type se configura en text.

Texto del encabezado. El formato admite emojis, pero no Markdown.


Longitud máxima: 60 caracteres.

sub_text

Cadena

Opcional.

Texto del encabezado. El formato admite emojis, pero no Markdown.


Longitud máxima: 60 caracteres.

type

Cadena

Obligatorio.

El tipo de encabezado que deseas que se utilice. Valores admitidos:


  • text: se utiliza los mensajes de lista, los botones de respuesta y los mensajes de productos múltiples.
  • video: se utiliza para los botones de respuesta.
  • image: se utiliza para los botones de respuesta.
  • document: se utiliza para los botones de respuesta.

video

Objeto

Es obligatorio cuando type se configura en video.

Contiene el objeto "Media" de este vídeo.

Objeto "Section"

NombreDescripción

product_items

Matriz de objetos

Es obligatorio en el caso de los mensajes de productos múltiples.

Matriz de objetos product. Hay un mínimo de 1 producto por sección y un máximo de 30 productos en todas las secciones.


Cada objeto product contiene el siguiente campo:


  • product_retailer_idcadena - Obligatorio en el caso de los mensajes multiproducto. Identificador único del producto en un catálogo. Para obtener este identificador, ve al administrador de ventas de Meta y selecciona tu cuenta y la tienda que deseas usar. Luego, haz clic en Catálogo > Artículos, y busca el artículo que quieres mencionar. El identificador de ese artículo se muestra en el nombre del mismo.

rows

Matriz de objetos

Se requiere para los mensajes de lista.

Contiene una lista de filas. Puedes tener un total de 10 filas en tus secciones.


Cada fila debe tener un título (longitud máxima: 24 caracteres) y un identificador (longitud máxima: 200 caracteres). Puedes agregar una descripción (longitud máxima: 72 caracteres), pero es opcional.


Ejemplo:

"rows": [
  {
   "id":"unique-row-identifier-here",
   "title": "row-title-content-here",
   "description": "row-description-content-here",           
   }
]

title

Cadena

Obligatorio si el mensaje tiene más de una sección.

Título de la sección.


Longitud máxima: 24 caracteres.

Objeto "Location"

NameDescription

latitude

Required.

Location latitude in decimal degrees.

longitude

Required.

Location longitude in decimal degrees.

name

Required.

Name of the location.

address

Required.

Address of the location.

Objeto "Media"

Consulta Obtener el identificador del contenido multimedia para descubrir cómo puedes obtener el identificador de tu objeto "Media". Para obtener información sobre los tipos de contenido multimedia admitidos en la API de la nube, consulta Tipos de contenido multimedia admitidos.

NameDescription

id

string

Required when type is audio, document, image, sticker, or video and you are not using a link.


The media object ID. Do not use this field when message type is set to text.

link

string

Required when type is audio, document, image, sticker, or video and you are not using an uploaded media ID (i.e. you are hosting the media asset on your public server).

The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs.


Do not use this field when message type is set to text.


Cloud API users only:


  • See Media HTTP Caching if you would like us to cache the media asset for future messages.
  • When we request the media asset from your server you must indicate the media's MIME type by including the Content-Type HTTP header. For example: Content-Type: video/mp4. See Supported Media Types for a list of supported media and their MIME types.

caption

string

Optional.


Media asset caption. Do not use with audio or sticker media.


On-Premises API users:

  • For v2.41.2 or newer, this field is is limited to 1024 characters.
  • Captions are currently not supported for document media.

filename

string

Optional.


Describes the filename for the specific document. Use only with document media.


The extension of the filename will specify what format the document is displayed as in WhatsApp.

provider

string

Optional. On-Premises API only.

This path is optionally used with a link when the HTTP/HTTPS link is not directly accessible and requires additional configurations like a bearer token. For information on configuring providers, see the Media Providers documentation.

Objeto "Template"

NombreDescripción

namespace

Obligatorio.

Espacio de nombres de la plantilla.


A partir de la versión v2.27.8, este debe ser el espacio de nombres asociado a la cuenta de WhatsApp Business que posee el número de teléfono correspondiente al cliente de la API de WhatsApp Business actual, o el mensaje no se enviará.

name

Obligatorio.

Nombre de la plantilla.

language

Obligatorio.

Especifica el lenguaje en que se puede representar la plantilla. Solo funciona la política de lenguaje deterministic con los mensajes de plantilla multimedia. Consulta la sección Idioma para obtener más información.

components

Opcional.

Matriz que incluye los parámetros del mensaje.

Los siguientes objetos se anidan dentro del objeto template:

Objeto "Parameter" del botón

NombreDescripción (haz clic en la flecha de la columna izquierda para ver las opciones compatibles)

type

Cadena

Obligatorio.

Indica el tipo de parámetro del botón.

Opciones compatibles

  • "payload"
  • "text"

payload

Obligatorio en el caso de los botones quick_reply.

Carga útil definida por el desarrollador que se devolverá cuando se haga clic en el botón junto con el texto en pantalla del botón.


Para ver un ejemplo, consulta Devolución de llamada de un clic en el botón de respuesta rápida.

text

Obligatorio en el caso de los botones de URL.

Sufijo proporcionado por el desarrollador que se agrega a la URL predefinida del prefijo en la plantilla.

Objeto "Components"

NombreDescripción

type

Obligatorio.

Describe el tipo component
Valores:header, body, footer

parameters

Opcional.

Matriz que incluye el contenido del mensaje.

Objeto "Currency"

NombreDescripción

fallback_value

Obligatorio.

El texto predeterminado si no funciona la localización.

code

Obligatorio.

El código de la divisa, como se define en la norma ISO 4217.

amount_1000

Obligatorio.

Importe multiplicado por 1.000.

Objeto "Date_Time"

NombreDescripción

fallback_value

Obligatorio.

Texto predeterminado. En la API de la nube, siempre usamos el valor alternativo y no intentamos localizar usando otros campos opcionales.

Objeto "Parameter"

NombreDescripción

type

Cadena

Obligatorio.

Describe el tipo de parámetro. Valores admitidos:


  • currency
  • date_time
  • document
  • image
  • text
  • video

En las plantillas basadas en texto, los únicos tipos de parámetros admitidos son currency, date_time y text.

text

Cadena

Obligatorio si type=text.

El texto del mensaje. El límite de caracteres varía en función del tipo del siguiente componente incluido.


En el caso del tipo de componente header:

  • 60 caracteres

En el caso del tipo de componente body:

  • 1.024 caracteres si se incluyen otros tipos de componentes
  • 32.768 caracteres si body es el único tipo de componente incluido

currency

Objeto

Obligatorio si type=currency.

Un objeto currency.

date_time

Objeto

Obligatorio si type=date_time.

Un objeto date_time.

image

Objeto

Obligatorio si type=image.

Un objeto media de tipo image. No se admiten los subtítulos si se usan en una plantilla de contenido multimedia.

document

Objeto

Obligatorio si type=document.

Un objeto media de tipo document. Las plantillas de mensajes multimedia solo admiten documentos PDF. No se admiten los subtítulos si se usan en una plantilla de contenido multimedia.

video

Objeto

Obligatorio si type=video.

Un objeto media de tipo video. No se admiten los subtítulos si se usan en una plantilla de contenido multimedia.

Objeto "Text"

NombreDescripción

body

Cadena

Obligatorio en el caso de los mensajes de texto.

El texto del mensaje de texto que puede contener URL que comienzan con http:// o https:// y formato. Consulta aquí las opciones de formatos disponibles.


Si incluyes URL en tu texto y quieres incluir un cuadro de vista previa en los mensajes de texto (preview_url: true), asegúrate de que la URL comience con http:// o https://. Se prefieren las URL que comienzan con https://. Debes incluir un nombre de host, ya que las direcciones IP no se harán coincidir.


Longitud máxima: 4.096 caracteres

preview_url

booleano

Opcional. Solo en el caso de la API de la nube.

Configúralo en true para que las apps de WhatsApp Messenger y WhatsApp Business intenten representar una vista previa del enlace de cualquier URL en la cadena de texto body. Las URL deben comenzar con http:// o https://. Si hay varias URL en la cadena de texto body, sólo se representará la primera.


Si preview_url se omite, o si no se puede recuperar una vista previa, se mostrará un enlace en el que se puede hacer clic.


Los usuarios de la API de instalaciones locales deben utilizar preview_url en la carga útil de mensajes de nivel superior. Consulta Parámetros.

Objeto "Reaction"

NombreDescripción

message_id

Cadena

Obligatoria.

El identificador de mensajes de WhatsApp (wamid) del mensaje en el que debería aparecer la reacción. La reacción no se enviará en los siguientes casos:


  • Si el mensaje tiene más de 30 días
  • Si se trata de un mensaje de reacción
  • Si el mensaje se eliminó

Si el identificador es de un mensaje que se eliminó, este no se entregará.

emoji

Cadena

Obligatoria.

Emoji que aparecerá en el mensaje.


  • Se admiten todos los emojis que se admiten en los dispositivos Android y iOS.
  • Se admiten los emojis renderizados.
  • Si se usan valores Unicode de emojis, deben estar codificados para Java o JavaScript.
  • Se puede enviar solo un emoji en un mensaje de reacción.
  • Usa una cadena vacía para eliminar un emoji que se envió con anterioridad.

Información general

Guías

Consulta las siguientes guías para obtener información completa sobre cómo usar el punto final /messages para enviar mensajes:

Ejemplos

Mensajes de texto

curl -X  POST \
'https://graph.facebook.com/v21.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": "text",
      "text": { // the text object
        "preview_url": false,
        "body": "MESSAGE_CONTENT"
        }
    }'

Mensajes de reacciones

curl -X  POST \
 'https://graph.facebook.com/v21.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": "reaction",
  "reaction": {
    "message_id": "wamid.HBgLM...",
    "emoji": "\uD83D\uDE00"
  }
}'

Mensajes multimedia

curl -X  POST \
 'https://graph.facebook.com/v21.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": "image",
  "image": {
    "id" : "MEDIA-OBJECT-ID"
  }
}'

Mensajes de ubicación

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "location",
  "location": {
    "longitude": LONG_NUMBER,
    "latitude": LAT_NUMBER,
    "name": LOCATION_NAME,
    "address": LOCATION_ADDRESS
  }
}'

Mensajes de contacto

curl -X  POST \
 'https://graph.facebook.com/v21.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"
        }]
    }]
}'

Mensajes interactivos

Mensajes de un solo producto

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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": "product",
     "body": {
       "text": "optional body text"
     },
     "footer": {
       "text": "optional footer text"
     },
     "action": {
       "catalog_id": "CATALOG_ID",
       "product_retailer_id": "ID_TEST_ITEM_1"
     }
   }
 }'

Mensajes multiproducto

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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": "product_list",
     "header":{
       "type": "text",
       "text": "header-content"
     },
     "body": {
       "text": "body-content"
     },
     "footer": {
       "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": "section-title",
           "product_items": [
             { "product_retailer_id": "product-SKU-in-catalog" },
             { "product_retailer_id": "product-SKU-in-catalog" },
             ...
           ]
         }
       ]
     }
   }
 }

Mensajes de catálogo

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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" : "catalog_message",
    "body" : {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "catalog_message",
      "parameters": { 
        "thumbnail_product_retailer_id": "<Product-retailer-id>"
      }
    }
  }
}'

Mensajes de procesos

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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": "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": {
            "user_name": "name",
            "user_age": 25
          }
        }
      }
    }
  }
}'
  

Mensajes de lista

curl -X  POST \
 'https://graph.facebook.com/v21.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": "list",
    "header": {
      "type": "text",
      "text": "HEADER_TEXT"
    },
    "body": {
      "text": "BODY_TEXT"
    },
    "footer": {
      "text": "FOOTER_TEXT"
    },
    "action": {
      "button": "BUTTON_TEXT",
      "sections": [
        {
          "title": "SECTION_1_TITLE",
          "rows": [
            {
              "id": "SECTION_1_ROW_1_ID",
              "title": "SECTION_1_ROW_1_TITLE",
              "description": "SECTION_1_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_1_ROW_2_ID",
              "title": "SECTION_1_ROW_2_TITLE",
              "description": "SECTION_1_ROW_2_DESCRIPTION"
            }
          ]
        },
        {
          "title": "SECTION_2_TITLE",
          "rows": [
            {
              "id": "SECTION_2_ROW_1_ID",
              "title": "SECTION_2_ROW_1_TITLE",
              "description": "SECTION_2_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_2_ROW_2_ID",
              "title": "SECTION_2_ROW_2_TITLE",
              "description": "SECTION_2_ROW_2_DESCRIPTION"
            }
          ]
        }
      ]
    }
  }
}'

Botón de respuesta

curl -X  POST \
 'https://graph.facebook.com/v21.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": "button",
    "body": {
      "text": "BUTTON_TEXT"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_1",
            "title": "BUTTON_TITLE_1"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_2",
            "title": "BUTTON_TITLE_2"
          }
        }
      ]
    }
  }
}'

Mensajes de plantillas

curl -X  POST \
 'https://graph.facebook.com/v21.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": "template",
  "template": {
    "name": "TEMPLATE_NAME",
    "language": {
      "code": "LANGUAGE_AND_LOCALE_CODE"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "http(s)://URL"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "TEXT_STRING"
          },
          {
            "type": "currency",
            "currency": {
              "fallback_value": "VALUE",
              "code": "USD",
              "amount_1000": NUMBER
            }
          },
          {
            "type": "date_time",
            "date_time": {
              "fallback_value": "MONTH DAY, YEAR"
            }
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "0",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "1",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      }
    ]
  }
}'

Mensaje de respuesta

curl -X POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "context": {
     "message_id": "MESSAGE_ID"
  },
  "to": "PHONE_NUMBER",
  "type": "text",
  "text": {
    "preview_url": false,
    "body": "your-text-message-content"
  }
}’

Respuesta correcta

    {
      "messaging_product": "whatsapp",
      "contacts": [
        {
          "input": "16505555555",
          "wa_id": "16505555555"
        }
      ],
      "messages": [
        {
          "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
        }
      ]
    }
    

Applies to businesses in Brazil, Colombia, and Singapore, starting September 12, 2023. Applies to all businesses starting October 12, 2023.

Messages will have one of the following statuses which will be returned in each of the messages objects

  • "message_status":"accepted" : means the message was sent to the intended recipient
  • "message_status":"held_for_quality_assessment": means the message send was delayed until quality can be validated and it will either be sent or dropped at this point

      {
      "messaging_product": "whatsapp",
      "contacts": [
        {
          "input": "16505555555",
          "wa_id": "16505555555"
        }
      ],
      "messages": [
        {
          "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA",
          "message_status": "accepted",
        }
      ]
    }