Mensajes

/v1/messages

Usa el nodo messages para enviar texto, contenido multimedia, contactos, ubicaciones y mensajes interactivos, así como plantillas de mensajes, a tus clientes.

Consulta las guías siguientes para obtener información sobre los tipos de mensajes específicos que puedes enviar: mensajes de texto, mensajes multimedia, mensajes de contactos y ubicación, mensajes interactivos, plantillas de mensajes, plantillas de mensajes multimedia y plantillas de mensajes interactivos.

Antes de empezar

Necesitas lo siguiente:

A partir de la versión 2.39, no tienes que llamar al nodo de contacto antes de enviar un mensaje.

Restricciones

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

Creación

Para enviar mensajes, debes realizar una llamada POST al nodo /messages independientemente del tipo de mensaje. El contenido del cuerpo del mensaje JSON es distinto para cada tipo de mensaje (texto, imagen, etc.).

Parámetros

Estos son los parámetros principales que se utilizan en las solicitudes POST de /messages:

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.

Objeto de texto

NombreDescripción

body

Obligatorio.

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

Objeto multimedia

Para la API local, se devuelve el identificador del objeto multimedia cuando el contenido multimedia se sube correctamente al cliente de la implementación de referencia/local de WhatsApp Business con el extremo media.

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 contactos

En contacts, puedes anidar los objetos siguientes: addresses, emails, name, org, phone y urls. Los objetos en plural se deben incluir en una matriz, como se muestra en el siguiente ejemplo.

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 en plural anidados en él:

"contacts": [
    {
        "addresses": [
            {
                "city": "city name",
                "country": "country name",
                "country_code": "code",
                "state": "Contact's State",
                "street": "Contact's Street",
                "type": "Contact's Address Type",
                "zip": "Contact's Zip Code"
            }
        ],
        "birthday": "birthday",
        "emails": [
            {
                "email": "email",
                "type": "HOME"
            },
            {
                "email": "email",
                "type": "WORK"
            }
        ],
        "name": {
            "first_name": "first name value",
            "formatted_name": "formatted name value",
            "last_name": "last name value",
            "suffix": "suffix value"
        },
        "org": {
            "company": "company name",
            "department": "dep name",
            "title": "title"
        },
        "phones": [
            {
                "phone": "Phone number",
                "wa-id": "WA-ID value",
                "type": "MAIN"
            },
            {
                "phone": "Phone number",
                "type": "HOME"
            },
            {
                "phone": "Phone number",
                "type": "WORK"
            }
        ],
        "urls": [{
            "url": "some url",
            "type": "WORK"
        }]
    }
]

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 de plantilla

En template, puedes anidar los objetos components y language.

A partir de la versión v2.27.8, el campo namespace de la plantilla debe ser el espacio de nombres asociado a la cuenta WABA a la que pertenece el número de teléfono del cliente local de WhatsApp Business actual. En caso contrario, no se podrá enviar el mensaje.

Además, a partir de la versión v2.41, namespace será un campo opcional.

NombreDescripción

namespace

Obligatorio.

Espacio de nombres de la plantilla.


A partir de la versión v2.27.8, debe ser el espacio de nombres asociado con la cuenta de WhatsApp Business que tiene el número de teléfono relacionado con el cliente de la API de WhatsApp Business actual. De lo contrario, el mensaje no se envía.

name

Obligatorio.

Nombre de la plantilla.

language

Obligatorio.

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

components

Opcional.

Matriz que contiene los parámetros del mensaje.

Objeto de componentes

En components, puedes anidar el objeto parameters. Además, puedes establecer type en button.

NombreDescripción

type

Obligatorio.

Describe el tipo de component.
Valores:header, body y footer

parameters

Opcional.

Matriz que incluye el contenido del mensaje.

Objeto de parámetros

NombreDescripción

type

Obligatorio.

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


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


Para obtener más información sobre los parámetros currency y date_time, consulta la sección Parámetros localizables. Los parámetros currency y date_time de los mensajes de template utilizan el elemento fallback_value en lugar de default. Consulta el ejemplo de solicitud anterior.

Tipo de botón

En el objeto components, puedes establecer type en button. Estos son los parámetros del botón:

NombreDescripción

sub_type

Obligatorio.

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

index

Obligatorio.

Índice de la posición del botón. Puedes tener hasta 10 botones con los valores de índice de 0-9.

parameters

Obligatorio.

Parámetros para el botón, que se definen durante la creación en Business Manager. 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 los botones quick_reply): carga útil definida por el desarrollador que se devolverá cuando se haga clic en el botón, además del texto para mostrar del botón.
  • text (obligatorio para los botones url): sufijo proporcionado por el desarrollador que se anexará a un botón de URL dinámico creado anteriormente.
  • coupon_code (obligatorio para los botones copy_code y disponible a partir de la versión 2.49): código de cupón proporcionado por el desarrollador que se copia cuando se hace clic en el botón para copiar el código.

Ejemplo del tipo button con quick_reply como valor del parámetro sub_type:

 {
    "type": "button",
    "sub_type": "quick_reply",
    "index": 0,
    "parameters": 
     [{
    	"type": "payload",
    	"payload": "Yes-Button-Payload"
     }]
 } 

Ejemplo del tipo button con copy_code como valor del parámetro sub_type:

    
 { 
    "type": "button", 
    "sub_type": "copy_code", 
    "index": 0, 
    "parameters": 
    [{ 
     "type": "coupon_code", 
     "coupon_code": "DISCOUNT20" 
    }] 
 }

Objeto hsm

El objeto hsm se ha retirado con la versión v2.39 de la implementación de referencia/local de WhatsApp Business. En su lugar, debes usar el objeto template.

Nombre Descripción

namespace

Obligatorio.

Espacio de nombres que se usará. A partir de la versión v2.2.7, si el espacio de nombres no coincide con el valor de element_name, el mensaje no se puede enviar.

element_name

Obligatorio.

Nombre del elemento que indica la plantilla que se debe usar en el espacio de nombres. A partir de la versión v2.2.7, si el valor de element_name no coincide con el espacio de nombres, el mensaje no se puede enviar.

language

Obligatorio.

Permite la especificación de un idioma determinista. Consulta la sección Idioma para obtener más información.


Este campo se usa para permitir una opción de fallback, pero se ha retirado con la versión v2.27.8.

localizable_params

Obligatorio.

Este campo es una matriz de valores que se aplica a las variables de la plantilla. Consulta la sección Parámetros localizables para obtener más información.

Objeto interactivo

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 de acción

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 puedes añadir espacios iniciales ni finales al establecer el 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 documento, mediante filename:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "document",
  "document": {
      "id": "your-media-id",
      "filename": "your-document-filename"
  }
}

Mensajes de documento, mediante link:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "document",
  "document": {
      "link": "http(s)://the-url"
      "provider": {
          "name" : "provider-name"
      }     
    }
}

Mensajes de vídeo, mediante link:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "video",  
  "video": {
      "link": "http(s)://the-url"
      "provider": {
          "name" : "provider-name"
      }
    }
  }
}

Mensajes de texto:

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "text",
  "text": {
      "body": "your-message-content"
  }
}

Mensajes interactivos (listas):

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "interactive",
  "interactive":{
    "type": "list",
    "header": {
      "type": "text",
      "text": "your-header-content-here"
    },
    "body": {
      "text": "your-text-message-content-here"
    },
    "footer": {
      "text": "your-footer-content-here"
    },
    "action": {
      "button": "cta-button-content-here",
      "sections":[
        {
          "title":"your-section-title-content-here",
          "rows": [
            {
              "id":"unique-row-identifier-here",
              "title": "row-title-content-here",
              "description": "row-description-content-here",           
            }
          ]
        },
        {
          "title":"your-section-title-content-here",
          "rows": [
            {
              "id":"unique-row-identifier-here",
              "title": "row-title-content-here",
              "description": "row-description-content-here",           
            }
          ]
        },
        ...
      ]
    }
  }

}

Mensajes interactivos (botones de respuesta):

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": { # optional
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }, # end header
    "body": {
      "text": "your-text-body-content"
    },
    "footer": { # optional
      "text": "your-text-footer-content"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    } # end action   
  } # end interactive

}

Mensajes interactivos (mensajes sobre un solo producto y sobre varios):

{ 
  "recipient_type": "individual",
  "to" : "{{Recipient-WA-ID}}",
  "type": "interactive",
  "interactive": {
    "type": "product",
    "body": {
      "text": "body text"
    },
    "footer": {
      "text": "footer text"
    },
    "action": {
      "
      
      _id": "catalog-ID",
      "product_retailer_id": "product-ID"
    }
  }
}

Mensajes interactivos (mensajes sobre varios productos):

{ 
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive",
  "interactive": 
    {
    "type": "product_list",
    "Header":{
       "type": "text",
        "text": "text-header-content"
     },
     "body":{
        "text": "text-body-content"
      },
     "footer":{
        "text":"text-footer-content"
     },
     "action":{
        "catalog_id":"catalog-id",
        "sections": [
             {
             "title": "section-title",             
             "product_items": [
                  { "product_retailer_id": "product-SKU-in-catalog" },
                  { "product_retailer_id": "product-SKU-in-catalog" },
                            ...
              ]},
              {
              "title": "the-section-title",
              "product_items": [
                 { "product_retailer_id": "product-SKU-in-catalog" }
                           ...
              ]},
               ...
       ]
     },  
    }
}

Mensajes interactivos (mensajes de catálogo):

{ 
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive",
  "interactive": 
    {
    "type": "catalog_message",
     "body":{
        "text": "text-body-content"
      },
     "footer":{
        "text":"text-footer-content"
     },
     "action":{
        "name": "catalog_message",
      	"parameters":{ 
      	  "thumbnail_product_retailer_id": "product-SKU-in-catalog"
      	}
     },  
    }
}

Mensajes interactivos (flujos):

{
  "recipient_type": "individual",
  "to": "{{Recipient-WA-ID}}",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Flow message header"
    },
    "body": {
      "text": "Flow message body"
    },
    "footer": {
      "text": "Flow message footer"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s",
        "flow_id": "<FLOW_ID>",
        "flow_cta": "Book!",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "<SCREEN_ID>",
          "data": { # optional
            "user_name": "name",
            "user_age": 25
          }
        }
      }
    }
  }
}

A continuación, se muestra un ejemplo del elemento payload en una respuesta. Los objetos de metadatos y de errores se omiten para mayor brevedad.

{
  "messages": [{ 
    "id": "message-id" 
  }]    
}

Si la solicitud se realiza correctamente, recibes una respuesta con un identificador de mensaje. Si la solicitud devuelve una sección errors, comprueba el mensaje de origen y corrige los errores antes de volver a enviarla. Para obtener más información sobre los errores, consulta Códigos de error del cliente de la implementación de referencia/local de WhatsApp Business y Códigos de estado HTTP.

Se aplica a las empresas de Brasil, Colombia y Singapur a partir del 12 de septiembre de 2023. Se aplica a todas las empresas a partir del 12 de octubre de 2023.

Si la solicitud se retiene para evaluar su calidad, la respuesta incluirá una propiedad message_status con un mensaje en el que se indica que el mensaje no se ha enviado inmediatamente y que se enviará o anulará una vez validada la calidad. Esta propiedad solo aparecerá si el mensaje se retiene.

    {
      "messages": [{ 
        "id": "message-id",
        "message_status": "Message has been held because quality assessment is pending",
      }]    
    }
    

Aplicar formato en los mensajes de texto

WhatsApp permite aplicar algunas opciones de formato a los mensajes. Para formatear un mensaje, o parte de este, usa los símbolos de formato siguientes:

FormatoSímboloEjemplo

Negrita

Asterisco (*)

Tu total es *10,50 USD*.

Cursiva

Guion bajo (_)

¡Bienvenido a _WhatsApp_!

Tachado

Tilde de la ñ (~)

¡Esto es ~mejor~ lo mejor!

Code

Tres acentos graves (```)

```print 'Hola, mundo';```

Rendimiento

En este contexto, el rendimiento representa el número de mensajes que se pueden enviar en cualquier momento dado mediante el cliente de la implementación de referencia/local de WhatsApp Business. El rendimiento máximo alcanzable depende de distintos factores. Los más importantes son la elección que haces de la configuración del cliente y si un mensaje se envía a un nuevo usuario o a uno existente. Las sesiones de cifrado tardan un poco más en configurarse cuando se envían mensajes a un nuevo usuario.

Configuración del clienteMensajes de texto admitidos por segundo

Una partición

70

Varias particiones (32)

250

Preguntas frecuentes

Nota: No envíes el mismo mensaje en repetidas ocasiones al mismo destinatario con la API de WhatsApp Business.

Puede haber varios motivos por los que la frecuencia de entrega no se encuentra al 100 %. Algunos de los casos frecuentes incluyen a usuarios que acceden de forma esporádica a la red o que han estado inactivos durante un periodo de tiempo o la creación de una experiencia de usuario de alta calidad.

Los mensajes que se pueden entregar con WhatsApp tendrán una frecuencia de entrega muy alta. Sin embargo, hay varios motivos por los que puede que un mensaje no se entregue. Tendrás acceso al estado exacto de un mensaje si supervisas las devoluciones de llamada. Este es diferente al envío de mensajes con SMS, por ejemplo, donde no tienes acceso al estado de entrega final y, si reenvías el mensaje, se puede producir un resultado diferente.

Los mensajes pueden quedarse pendientes de envío debido a que el teléfono del usuario se encuentra fuera de servicio, no tiene batería o se perdió y al obtener uno nuevo se ha desactivado la SIM. Es posible que exista algún error por el que el cliente empresarial no pueda conectarse a la red. También es posible que las devoluciones de llamada (webhooks) no se estén entregando. Puedes supervisar estas situaciones con el nodo health. Puedes activar las devoluciones de llamada de recepción del servidor para saber si el mensaje llegó a la nube del servidor de WhatsApp.

Siempre y cuando un usuario vuelva a conectarse a la red, todos los mensajes que hayas enviado se le entregarán. La recepción de más de un mensaje con el mismo contenido será una mala experiencia para el usuario y será más probable que te bloquee o se queje. Además, será más probable que se prohíba tu participación en el servicio.

Si envías un mensaje y recibes un identificador de mensaje de la API, ya has hecho todo lo posible por enviar el mensaje. No vuelvas a enviar el mismo contenido al mismo destinatario.

Si observas frecuencias de entrega bajas durante un periodo prolongado de tiempo, envía un ticket de asistencia con Asistencia directa.

Cuando envías un mensaje, en cuanto recibes un identificador de mensaje, eso significa que la solicitud de mensaje se ha almacenado en la base de datos. El cliente de la API de WhatsApp Business seguirá intentando enviar el mensaje hasta que el servidor de WhatsApp lo confirme. Este proceso no tiene línea temporal final. A continuación, el servidor de WhatsApp intentará entregar el mensaje al teléfono del usuario. Si el teléfono del usuario no está en línea, el mensaje se almacenará durante 30 días antes de que lo descarte el servidor de WhatsApp.

Sí. WhatsApp te permite dar formato al texto seleccionado dentro de los mensajes con negrita, cursiva, tachado o fuente monoespaciada.

Actualmente, no hay ninguna forma de saber cuántos ni qué usuarios han bloqueado tu empresa. El mejor indicador sería escuchar las devoluciones de llamada de estado y, si no recibes el estado delivered, puede que el usuario haya bloqueado tu empresa o que no tenga conexión de red. Para obtener más detalles, consulta la documentación sobre webhooks.

Si un usuario ha bloqueado la empresa, la API de contactos seguirá devolviendo el número de teléfono como usuario de WhatsApp válido. Sin embargo, al enviar el mensaje, no se entregará. Si se trata de un mensaje de pago, no se te cobrará.

No, no se garantiza que los mensajes lleguen en el mismo orden en que se enviaron. Si el orden es crítico para tu caso de uso, el enfoque sugerido es esperar a escuchar la llamada de entrega del primer mensaje antes de enviar el segundo.

Al utilizar el nodo messages, debe configurar el encabezado Content-Type como application/json para el cliente de la API de WhatsApp Business a fin de poder analizar el cuerpo del mensaje correctamente. A continuación, también se debe definir un encabezado Authorization, que debe contener un identificador de acceso que no haya caducado. Consulte la documentación de inicio de sesión y autenticación para obtener información sobre cómo obtener el identificador y cuándo caduca.

Pueden existir casos en los que necesites más tiempo para gestionar la consulta de un cliente y solo puedas proporcionar una respuesta después de 24 horas. Se recomienda crear plantillas de mensajes para:

  • entregar el resultado al usuario, o
  • pedir al usuario que responda para activar el período de atención al cliente.

En ambos casos, asegúrate de ofrecer tanto contexto como sea posible en la plantilla de mensaje. Por ejemplo:

  • "Hola, {{1}}. En relación con el evento sobre el que nos notificaste anteriormente, lamentamos informarte que {{2}}. Nos disculpamos por las molestias ocasionadas".
  • "Tenemos noticias relacionadas con tu solicitud. Responde a este mensaje si quieres continuar con el proceso de asistencia".