Mensajes

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

Antes de empezar

Necesitas lo siguiente:

A partir de la versión 2.39, no es necesario llamar al nodo de contactos antes de enviar un mensaje.

Restricciones

  • Se admiten los siguientes tipos de mensajes: texto, plantilla de mensaje, imágenes, documentos y audio.
  • Un mensaje de texto puede tener, como máximo, 4.096 caracteres.

Creación

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

Parámetros

Los siguientes parámetros son los más usados en solicitudes POST de /messages:

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.

Objeto "Texto"

NombreDescripción

body

Obligatorio.

Contiene el texto del mensaje, que puede incluir formato y URL.

Objeto "Contenido multimedia"

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.

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 "Contactos"

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.

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.

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

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 "Template"

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.

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.

Objeto "Components"

Dentro de components, puedes anidar el objeto parameters. A su vez, puedes fijar type en button.

NombreDescripción

type

Obligatorio.

Describe el tipo component
Valores:header, body, footer

parameters

Opcional.

Matriz que incluye el contenido del mensaje.

Objeto "Parameter"

NombreDescripción

type

Obligatorio.

Describe el tipo parameter.
Valores:text, currency, date_time, image, document, video


Los tipos de contenido multimedia (image, document y video) siguen el mismo formato que los que se usan en mensajes multimedia estándar; consulta la documentación sobre contenido multimedia para obtener más información. Actualmente, las plantillas de mensajes multimedia solo admiten documentos PDF.


Para obtener más información sobre currency y date_time, consulta la sección sobre parámetros localizables. Los parámetros currency y date_time para mensajes de template usan fallback_value en lugar de default. Consulta el ejemplo anterior de solicitud para ver un modelo.

Tipo de botón

Dentro del objeto components, puedes fijar type en button. Estos son los parámetros de botón:

NombreDescripción

sub_type

Obligatorio.

Tipo de botón que se crea.
Valores:quick_reply, url y copy_code (available from 2.49 and onwards)

index

Obligatorio.

Índice de posición del botón. Es posible tener hasta 10 botones con valores índice de 0-9.

parameters

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:

  • type (obligatorio): indica el tipo de parámetro del botón. Los valores admitidos son payload, text y coupon_code.
  • payload (obligatorio para botones quick_reply): carga útil definida por el desarrollador, que se devolverá cuando se haga clic en el botón junto con el texto de visualización del botón.
  • text (obligatorio para botones url): sufijo proporcionado por el desarrollador que se agregará a un botón de URL dinámica creado previamente.
  • coupon_code (obligatorio para los botones "copy_code"; disponible a partir de la versión 2.49): código del cupón proporcionado por el desarrollador que se copia cuando se hace clic en el botón de copia del código.

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

Objeto "Hsm"

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

namespace

Obligatorio.

Espacio de nombres que se utilizará. A partir de la v2.2.7, si el espacio de nombres no coincide con element_name, no se podrá enviar el mensaje.

element_name

Obligatorio.

Nombre del elemento que indica la plantilla que se utilizará en el espacio de nombres. A partir de la v2.2.7, si el espacio de nombres no coincide con element_name, no se podrá enviar el mensaje.

language

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 fallback, pero quedó obsoleto con v2.27.8.

localizable_params

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.

Objeto "Interactive"

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:

  • Inside header, you can nest media objects.
  • Inside action, you can nest section and button objects.
NameDescription

type

string

Required.

The type of interactive message you want to send. Supported values:

  • list: Use it for List Messages.
  • button: Use it for Reply Buttons.
  • product: Use it for Single-Product Messages.
  • product_list: Use it for Multi-Product Messages.
  • catalog_message: Use it for Catalog Messages.
  • flow: Use it for Flows Messages.

header

object

Required for type product_list. Optional for other types.

Header content displayed on top of a message. You cannot set a header if your interactive object is of product type.


The header object contains the following fields:

documentobjectRequired if type is set to document. Contains the media object with the document.

imageobjectRequired if type is set to image. Contains the media object with the image.

videoobjectRequired if type is set to video. Contains the media object with the video.

textstringRequired if type is set to text. Text for the header. Formatting allows emojis, but not markdown. Maximum length: 60 characters.

typestringRequired. The header type you would like to use. Supported values are:

text – for List Messages, Reply Buttons, and Multi-Product Messages.

video – for Reply Buttons.

image – for Reply Buttons.

document – for Reply Buttons.

body

object

Optional for type product. Required for other message types.

An object with the body of the message.


The body object contains the following field:

textstringRequired if body is present. The content of the message. Emojis and markdown are supported. Maximum length: 1024 characters.

footer

object

Optional.

An object with the footer of the message.


The footer object contains the following field:

textstringRequired if footer is present. The footer content. Emojis, markdown, and links are supported. Maximum length: 60 characters.

action

object

Required.

An action object with what you want the user to perform after reading the message. See action object for full information.

Objeto "Action"

NameDescription

button

string

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.

buttons

object

Required for Reply Button Messages.

A button object. The object can contain the following parameters:

type – The only supported option is reply for Reply Button Messages.

title – Button title. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters.

id – Unique identifier for your button. This ID is returned in the webhook when the button is clicked by the user. Maximum length: 256 characters.


No puede haber espacios al inicio ni al final del identificador.

sections

array of objects

Required for List Messages and Multi-Product Messages.

Array of section objects. There is a minimum of 1 and maximum of 10. See section object.

catalog_id

string

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.

product_retailer_id

string

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.

mode

string

Optional for Flows Messages.

The current mode of the Flow, either draft or published.


Default: published

flow_message_version

string

Required for Flows Messages.

Must be 3.

flow_token

string

Required for Flows Messages.

A token that is generated by the business to serve as an identifier.

flow_id

string

Required for Flows Messages.

Unique identifier of the Flow provided by WhatsApp.

flow_cta

string

Required for Flows Messages.

Text on the CTA button, eg. "Signup".


Maximum length: 20 characters (no emoji).

flow_action

string

Optional for Flows Messages.

navigate or data_exchange. Use navigate to predefine the first screen as part of the message. Use data_exchange for advanced use-cases where the first screen is provided by your endpoint.


Default: navigate

flow_action_payload

object

Optional for Flows Messages.

Required only if flow_action is navigate. The object can contain the following parameters:

screenstringRequired. The id of the first screen of the Flow.

dataobjectOptional. The input data for the first screen of the Flow. Must be a non-empty object.

Section Object

NameDescription

title

string

Required if the message has more than one section.

Title of the section. Maximum length: 24 characters.

rows

array of objects

Required for List Messages.

Contains a list of row objects. Limited to 10 rows across all sections.


Each row object contains the following fields:

titlestringRequired. Maximum length: 24 characters.

IDstringRequired. Maximum length: 200 characters.

descriptionstringOptional. Maximum length: 72 characters.

product_items

array of objects

Required for Multi-Product Messages.

Array of product objects. There is a minimum of 1 product per section and a maximum of 30 products across all sections.


Each product object contains the following field:

product_retailer_idstringRequired for Multi-Product Messages. Unique identifier of the product in a catalog. To get this ID, go to Commerce Manager, select your account and the shop you want to use. Then, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name.

Ejemplos

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 por motivos de brevedad.

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

Aplicar formato en mensajes de texto

WhatsApp permite aplicar formato en los mensajes. Para aplicar formato en todo o parte del mensaje, usa los siguientes símbolos de formato:

FormatoSímboloEjemplo:

Negrita

Asterisco (*)

Tu total es *10.50 USD*.

Cursiva

Guion bajo (_)

¡Bienvenido a _WhatsApp_!

Tachado

Tilde (~)

¡Esto es ~bueno~ perfecto!

Code

Tres acentos graves (```)

```print 'Hello World';```

Rendimiento

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 clienteMensajes de texto admitidos por segundo

Un fragmento

70

Múltiples fragmentos (32 fragmentos)

250

Preguntas frecuentes

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:

  • Entregar el resultado al usuario
  • Solicitar al usuario que responda para activar la ventana de atención al cliente

En ambos casos, asegúrate de ofrecer el mayor contexto posible en la plantilla de mensaje. Por ejemplo:

  • "Hola {{1}}, respecto al problema informado anteriormente, lamentamos notificarte que {{2}}. Te pedimos disculpas por las molestias ocasionadas".
  • "Se ha actualizado tu ticket de asistencia. Por favor responde si sigues necesitando asistencia".