Este documento se ha actualizado.
La traducción en Español (España) no está disponible todavía.
Actualización del documento en inglés: 31 ene.

Mensajes

Usa el extremo /PHONE_NUMBER_ID/messages para enviar texto, contenido multimedia, contactos, ubicaciones y mensajes interactivos, así como plantillas de mensajes, a tus clientes. Obtén más información sobre los mensajes que puedes enviar.

ExtremoAutenticació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.

Los mensajes se identifican con un identificador único (WAMID). Puedes hacer un seguimiento del estado de los mensajes en los webhooks mediante su WAMID. También puedes marcar un mensaje entrante como leído mediante el extremo de mensajes. Este WAMID puede tener una longitud máxima de hasta 128 caracteres.

Con la API de la nube, ya no es posible comprobar de forma explícita si un número de teléfono tiene un identificador de WhatsApp. Para enviar un mensaje mediante la API de la nube, envíalo directamente al número de teléfono del cliente una vez que haya otorgado su consentimiento. Consulta Referencia, Mensajes para obtener ejemplos.

Objeto de mensaje

Para enviar un mensaje, primero debes montar un objeto de mensaje con el contenido que quieras enviar. Estos son los parámetros que se utilizan en un objeto message:

NombreDescripción (Haz clic en la flecha de la columna de la izquierda para consultar las opciones admitidas).

audio

Objeto

Obligatorio cuando type=audio.

Un objeto media con audio.

biz_opaque_callback_data

Cadena

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


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.

contacts

Objeto

Obligatorio cuando 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"}


Solo en la API de nube.

document

Objeto

Obligatorio cuando type=document.

Un objeto media con un documento.

hsm

Objeto

Contiene un objeto hsm. Esta opción se retiró con la versión v2.39 de la API local. En su lugar, usa el objeto template.


Solo en la API local.

image

Objeto

Obligatorio cuando type=image.

Un objeto media con una imagen.

interactive

Objeto

Obligatorio cuando 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 cuando type=location.

Un objeto location.

messaging_product

Cadena

Obligatorio.

Servicio de mensajes que se usa para la solicitud. Usa "whatsapp".


Solo en la API de nube.

preview_url

Booleano

Obligatorio si type=text.

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


Solo en la API local. Los usuarios de la API de nube pueden utilizar la misma funcionalidad con el campo preview_url en un objeto de texto.

recipient_type

Cadena

Opcional.

Actualmente solo puedes enviar mensajes a personas. Establécelo como individual.


Valor predeterminado: individual.

status

Cadena

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


sticker

Objeto

Obligatorio cuando type=sticker.

Un objeto media con un sticker.


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.

template

Objeto

Obligatorio cuando type=template.

Un objeto template.

text

Objeto

Obligatorio para mensajes de texto.

Un objeto text.

to

Cadena

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

type

Cadena

Opcional.

El tipo de mensaje que quieres enviar. Si se omite, se establece en text de forma predeterminada.

Los siguientes objetos están anidados en el objeto de mensaje:

Objeto de contactos

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 interactivo

NombreDescripción

action

Objeto

Obligatorio.

Acción que quieres que haga el usuario después de leer el mensaje.

body

Objeto

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

Objeto con el cuerpo del mensaje.


El objeto body contiene el campo siguiente:

Cadena de text. Obligatorio si el cuerpo está presente. Contenido del mensaje. Se admiten los emoticonos y el marcado. Longitud máxima: 1024 caracteres.

footer

Objeto

Opcional. Objeto con el pie de página del mensaje.


El objeto footer contiene el campo siguiente:

Cadena de text. Obligatorio si el pie de página está presente. Contenido del pie de página. Se admiten los emoticonos, el marcado y los 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 superior de un mensaje. No puedes establecer un encabezado si el objeto interactivo es de tipo product. Para obtener más información, consulta la sección Objeto header.

type

Objeto

Obligatorio.

El tipo de mensaje interactivo que quieres enviar. Valores admitidos:


  • button: se usa para los botones de respuesta.
  • catalog_message: se usa para los mensajes de catálogo.
  • list: se usa para los mensajes de lista.
  • product: se usa para los mensajes sobre un solo producto.
  • product_list: se usa para los mensajes sobre varios productos.
  • flow: se usa para los mensajes de Flows.

Los siguientes objetos están anidados en el objeto interactive:

Objeto de acción

NombreDescripción

button

Cadena

Obligatorio para los mensajes de lista.

Contenido del botón. No puede ser una cadena vacía y debe ser único en el mensaje. Se admiten los emoticonos, pero no el marcado.


Longitud máxima: 20 caracteres.

buttons

Matriz de objetos

Obligatorio para los botones de respuesta.

Un objeto de botón puede contener los parámetros siguientes:


  • type: el único tipo admitido es reply (en el caso del botón de respuesta).
  • title: título del botón. No puede ser una cadena vacía y debe ser único en el mensaje. Se admiten los emoticonos, pero no el marcado. Longitud máxima: 20 caracteres.
  • id: identificador único del botón. Este identificador se devuelve en el webhook cuando el usuario hace clic en el botón. Longitud máxima: 256 caracteres.

Puedes tener hasta tres botones. No puedes tener espacios iniciales ni finales al establecer el identificador.

catalog_id

Cadena

Obligatorio para los mensajes sobre un solo producto y los mensajes sobre varios productos.

Identificador único del catálogo de Facebook vinculado a tu cuenta de WhatsApp Business. Este identificador se puede recuperar mediante Meta Commerce Manager.

product_retailer_id

Cadena

Obligatorio para los mensajes sobre un solo producto y los mensajes sobre varios productos.

Identificador único del producto en un catálogo.


Para obtener este identificador, accede a Meta Commerce Manager y selecciona tu cuenta de Meta Business. Verás una lista de las tiendas conectadas a tu cuenta. Haz clic en la tienda que quieras usar. En el panel lateral de la izquierda, haz clic en Catálogo > Artículos y busca el artículo que quieras mencionar. El identificador de dicho artículo se muestra debajo del nombre.

sections

Matriz de objetos

Obligatorio para los mensajes de lista y los mensajes sobre varios productos.

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

mode

Cadena

Opcional para los mensajes de Flows.

Modo actual del Flow: draft o published.


El valor predeterminado es published.

flow_message_version

Cadena

Obligatorio para los mensajes de Flows.

Debe ser 3.

flow_token

Cadena

Obligatorio para los mensajes de Flows.

Identificador que genera la empresa para servir de identificador.

flow_id

Cadena

Obligatorio para los mensajes de Flows.

Identificador único del Flow que proporciona WhatsApp.

flow_cta

Cadena

Obligatorio para los mensajes de Flows.

Texto del botón de llamada a la acción (por ejemplo, “Registro”).


Longitud máxima: 20 caracteres (sin emoticonos).

flow_action

Cadena

Opcional para los mensajes de Flows.

navigate o data_exchange. Utiliza navigate para predefinir la primera pantalla como parte del mensaje. Utiliza data_exchange para casos de uso avanzados en los que la primera pantalla la proporciona tu extremo.


El valor predeterminado es navigate.

flow_action_payload

Objeto

Opcional para los mensajes de Flows.

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

Cadena de screen. Obligatorio. Es el valor de id de la primera pantalla del Flow.

Objetodata. Opcional. Datos de entrada de la primera pantalla del Flow. Debe ser un objeto que no esté vacío.

Objeto de encabezado

NombreDescripción

document

Objeto

Obligatorio si type se ha definido como document.

Contiene el objeto multimedia para este documento.

image

Objeto

Obligatorio si type se ha definido como image.

Contiene el objeto multimedia para esta imagen.

text

Cadena

Obligatorio si type se ha definido como text.

Texto del encabezado. El formato admite los emoticonos, pero no el marcado.


Longitud máxima: 60 caracteres.

type

Cadena

Obligatorio.

Tipo de encabezado que te gustaría utilizar. Valores admitidos:


  • text: se utiliza para los mensajes de lista, los botones de respuesta y los mensajes sobre varios productos.
  • 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

Obligatorio si type se ha definido como video.

Contiene el objeto multimedia para este vídeo.

Objeto de sección

NombreDescripción

product_items

Matriz de objetos

Obligatorio para los mensajes sobre varios productos.

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


Cada objeto product contiene el siguiente campo:


  • Cadena de product_retailer_id. Obligatorio para los mensajes sobre varios productos. Identificador único del producto en un catálogo. Para obtener este identificador, accede a Meta Commerce Manager y selecciona la cuenta y la tienda que quieras usar. A continuación, haz clic en Catálogo > Artículos y busca el artículo que quieras mencionar. El identificador de dicho artículo se muestra debajo del nombre.

rows

Matriz de objetos

Obligatorio para los mensajes de lista.

Contiene una lista de filas. Puedes tener un total de diez filas en las secciones.


Cada fila debe tener un título (longitud máxima: 24 caracteres) y un identificador (longitud máxima: 200 caracteres). Puedes añadir 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 de ubicación

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 multimedia

Consulta Obtener el identificador del contenido multimedia para obtener información sobre cómo obtener el identificador del objeto multimedia. Para obtener información sobre los tipos de contenido multimedia admitidos para la API de 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 de plantilla

Los precios basados en conversaciones han cambiado. Consulta Precios para obtener información sobre el funcionamiento del nuevo modelo de precios basados en conversaciones.

Además, la visibilidad de metric_types ha cambiado el 1 de julio de 2023. Consulta la tabla de análisis de conversaciones para obtener más información.

NameDescription

name

Required.

Name of the template.

language

object

Required.

Contains a language object. Specifies the language the template may be rendered in.


The language object can contain the following fields:

policystringRequired. The language policy the message should follow. The only supported option is deterministic. See Language Policy Options.

codestringRequired. The code of the language or locale to use. Accepts both language and language_locale formats (e.g., en and en_US). For all codes, see Supported Languages.

components

array of objects

Optional.

Array of components objects containing the parameters of the message.

namespace

Optional. Only used for On-Premises API.

Namespace of the template.

Los siguientes objetos están anidados en el objeto template:

Objeto de parámetro de botón

NombreDescripción (Haz clic en la flecha de la columna de la izquierda para consultar las opciones admitidas).

type

Cadena

Obligatorio.

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

Opciones admitidas

  • "payload"
  • "text"

payload

Obligatorio para los botones quick_reply.

Carga útil definida por el desarrollador que se devuelve cuando se hace clic en el botón, además del texto para mostrar del botón.


Consulta un ejemplo en Devolución de llamada con un clic del botón de respuesta rápida.

text

Obligatorio para botones de URL.

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

Objeto de componentes

NameDescription (Click the arrow in the left column for supported options.)

type

string

Required.

Describes the component type.


Example of a components object with an array of parameters object nested inside:

 "components": [{
   "type": "body",
   "parameters": [{
                "type": "text",
                "text": "name"
            },
            {
            "type": "text",
            "text": "Hi there"
            }]
      }] 

Supported Options

  • header
  • body
  • button

For text-based templates, we only support the type=body.

sub_type

string

Required when type=button. Not used for the other types.

Type of button to create.

Supported Options

  • quick_reply: Refers to a previously created quick reply button that allows for the customer to return a predefined message.
  • url: Refers to a previously created button that allows the customer to visit the URL generated by appending the text parameter to the predefined prefix URL in the template.
  • catalog: Refers to a previously created catalog button that allows for the customer to return a full product catalog.

parameters

array of objects

Required when type=button.

Array of parameter objects with the content of the message.

For components of type=button, see the button parameter object.

index

Required when type=button. Not used for the other types.

Position index of the button. You can have up to 10 buttons using index values of 0 to 9.

Objeto de divisa

NombreDescripción

fallback_value

Obligatorio.

Texto predeterminado si se produce un error de localización.

code

Obligatorio.

Código de divisa según se define en la ISO 4217.

amount_1000

Obligatorio.

Importe multiplicado por 1000.

Objeto Date_Time

NombreDescripción

fallback_value

Obligatorio.

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

Objeto de parámetro

NombreDescripción

type

Cadena

Obligatorio.

Describe el tipo de parámetro. Valores admitidos:


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

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

text

Cadena

Obligatorio cuando type=text.

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


Para el tipo de componente header:

  • 60 caracteres

Para el tipo de componente body:

  • 1024 caracteres si se incluyen otros tipos de componentes
  • 32 768 caracteres si body es el único tipo de componente incluido

currency

Objeto

Obligatorio cuando type=currency.

Objeto currency.

date_time

Objeto

Obligatorio cuando type=date_time.

Objeto date_time.

image

Objeto

Obligatorio cuando type=image.

Objeto media de tipo image. No se admite texto cuando se usa en una plantilla de contenido multimedia.

document

Objeto

Obligatorio cuando type=document.

Objeto media de tipo document. Solo se admiten documentos PDF para las plantillas de mensajes basadas en contenido multimedia. No se admite texto cuando se usa en una plantilla de contenido multimedia.

video

Objeto

Obligatorio cuando type=video.

Objeto media de tipo video. No se admite texto cuando se usa en una plantilla de contenido multimedia.

Objeto de texto

NombreDescripción

body

Cadena

Obligatorio para los mensajes de texto.

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


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


Longitud máxima: 4096 caracteres

preview_url

Booleano

Opcional. Solo en la API de nube.

Se establece en true para que las aplicaciones WhatsApp Messenger y WhatsApp Business intenten mostrar una vista previa del enlace de cualquier URL de la cadena de texto body. Las URL deben comenzar por http:// o https://. Si hay varias URL en la cadena de texto body, solo se mostrará la primera URL.


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


Los usuarios de la API local deben usar preview_url en la carga útil de mensajes de nivel superior en su lugar. Consulta Parámetros.

Objeto de reacción

NombreDescripción

message_id

Cadena

Obligatorio.

Identificador del mensaje de WhatsApp (wamid) en el que debería aparecer la reacción. La reacción no se enviará si:


  • El mensaje tiene más de 30 días.
  • El mensaje es de reacción.
  • El mensaje se ha eliminado.

Si el identificador pertenece a un mensaje que se ha eliminado, el mensaje no se entregará.

emoji

Cadena

Obligatorio.

Emoticono que aparecerá en el mensaje.


  • Se admiten todos los emoticonos compatibles con los dispositivos Android y iOS.
  • Se admiten los emoticonos mostrados.
  • Si se usan valores Unicode de emoticonos, los valores deben estar codificados con escape de Java o JavaScript.
  • En un mensaje de reacción solo se puede enviar un emoticono.
  • Usa una cadena vacía para eliminar un emoticono enviado previamente.

Información general

Guías

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

Ejemplos

Mensajes de texto

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 '
    {
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "PHONE_NUMBER",
      "type": "text",
      "text": { // the text object
        "preview_url": false,
        "body": "MESSAGE_CONTENT"
        }
    }'

Mensajes de reacción

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 '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "reaction",
  "reaction": {
    "message_id": "wamid.HBgLM...",
    "emoji": "\uD83D\uDE00"
  }
}'

Mensajes de contenido multimedia

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 '{
  "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/v19.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/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"
        }]
    }]
}'

Mensajes interactivos

Mensajes sobre un solo producto

curl -X  POST \
 'https://graph.facebook.com/v19.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 sobre varios productos

curl -X  POST \
 'https://graph.facebook.com/v19.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/v19.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 Flows

curl -X  POST \
 'https://graph.facebook.com/v19.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/v19.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/v19.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 plantilla

Los precios basados en conversaciones han cambiado. Consulta Precios para obtener información sobre el funcionamiento del nuevo modelo de precios basados en conversaciones.

Además, la visibilidad de metric_types ha cambiado el 1 de julio de 2023. Consulta la tabla de análisis de conversaciones para obtener más información.

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 '{
  "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"
          }
        ]
      }
    ]
  }
}'

Responder al mensaje

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