Estamos retirando la API local. Consulta nuestro documento Retirada de la API local para obtener más información y aprender a migrar a nuestra API de nube de nueva generación.

Enviar mensajes interactivos

En esta guía se explica cómo enviar cada opción de mensajes interactivos. Los mensajes interactivos ofrecen a los usuarios una manera más sencilla de encontrar y seleccionar lo que quieren de tu empresa en WhatsApp. Durante las pruebas, los chatbots que utilizan funciones de mensajes interactivos lograron un aumento considerable de los índices de respuesta y las conversiones en comparación con aquellos que se basan en texto.

Tipos de mensajes interactivos:

  • Mensajes de lista: mensajes que incluyen un menú con un máximo de 10 opciones. Este tipo de mensaje ofrece a los usuarios una forma más sencilla y coherente de hacer una selección cuando interactúan con una empresa.
  • Mensajes con botón de respuesta: mensajes que incluyen un máximo de tres opciones, cada una de las cuales es un botón. Este tipo de mensaje ofrece a los usuarios una forma más rápida de hacer una selección en un menú cuando interactúan con una empresa. Los botones de respuesta tienen la misma experiencia de usuario que las plantillas interactivas con botones.
  • Mensajes de un solo producto: mensajes con un solo producto del inventario de la empresa. Consulta Compartir productos con los clientes para obtener más información.
  • Mensajes multiproducto: mensajes que contienen una selección de hasta 30 artículos del inventario de la empresa. Consulta Compartir productos con los clientes para obtener más información.
  • Mensajes de solicitud de ubicación: mensajes que solicitan la ubicación del usuario.
  • Mensajes de Flows: mensajes para interacciones estructuradas. Consulta Mensajes de Flows para obtener más información.

Especificaciones de los mensajes interactivos

  • Los mensajes interactivos se pueden combinar en el mismo proceso.
  • Los usuarios no pueden seleccionar al mismo tiempo más de una opción de una lista o un mensaje con botón, pero sí que pueden retroceder y reabrir un mensaje anterior.
  • Los mensajes de lista o con botón de respuesta no se pueden usar como notificaciones. Actualmente, solo se pueden enviar dentro de las 24 horas posteriores al último mensaje enviado por el usuario. Si intentas enviar un mensaje fuera del intervalo de 24 horas establecido, recibirás un mensaje de error.
  • Plataformas admitidas: iOS, Android y web (los mensajes de Flows no se admiten en la web).

A continuación puedes ver una comparación entre los mensajes de texto y los mensajes interactivos:


A continuación puedes ver un ejemplo de cómo los mensajes de lista y los botones de respuesta se pueden combinar en el mismo proceso:

Se ha producido un error
Tenemos problemas para reproducir este vídeo.

Información general

Por qué deberías utilizar esta función

Comprensión del usuario

En comparación con las listas basadas en texto, los mensajes interactivos ofrecen al usuario un formato más sencillo y coherente para encontrar y seleccionar lo que quiere de una empresa. Durante las pruebas, los usuarios mostraron mayores niveles de comprensión al interactuar con estas funciones.

Resultados empresariales

Durante las pruebas, los chatbots que utilizan funciones de mensajes interactivos lograron un aumento considerable de los índices de respuesta y las conversiones en comparación con aquellos que se basan en texto.

Personalización

Se rellena de forma dinámica en tiempo real, por lo que puede personalizarse según el cliente o la situación. Por ejemplo, puedes mostrar un mensaje de lista con las horas disponibles al reservar una cita o usar los botones de respuesta para mostrar direcciones de entrega anteriores.

Sin plantillas

Los mensajes interactivos no necesitan plantillas ni aprobaciones previas.

Cuándo deberías utilizar esta función

Los mensajes de lista son ideales para presentar varias opciones, como, por ejemplo:

  • Un menú de atención al cliente o de preguntas frecuentes
  • Un menú de comida para llevar
  • Selección de tiendas o ubicaciones cercanas
  • Horas de reserva disponibles
  • Elección de un pedido reciente para repetirlo

Los botones de respuesta son ideales para ofrecer respuestas rápidas de un conjunto limitado de opciones, como, por ejemplo:

  • Recarga de saldo
  • Cambio de datos personales
  • Repetición de un pedido anterior
  • Solicitud de devolución
  • Adición de productos adicionales a un pedido de comida
  • Elección de un método de pago

Los botones de respuesta son especialmente útiles para casos de uso “personalizados” en los que una respuesta genérica no resulta apropiada.

Los mensajes de Flows son la mejor opción para una comunicación estructurada en una o varias pantallas, como por ejemplo:

  • Reserva de citas
  • Exploración de productos
  • Obtención de comentarios de los clientes
  • Obtención de nuevos clientes potenciales de ventas

Los mensajes de Flows permiten a las empresas ofrecer una experiencia de usuario más completa y atractiva que puede ayudar a los clientes a hacer las cosas más rápido en WhatsApp sin necesariamente tener que cambiar a otra aplicación o visitar un sitio web.

Cómo se usa esta función

En el nivel de la API, para configurar los mensajes interactivos, se debe establecer el type del mensaje en interactive y añadir el objeto interactive. En general, estos mensajes incluyen cuatro partes principales: header, body, footer y action:

{
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive" 
  "interactive":{
    "type": "list" | "button" | ...,
    "header": {},
    "body": {},
    "footer": {},
    "action": {}
  }
}
En el caso de los mensajes de lista, así es como se disponen sus distintas partes:

En el caso de los mensajes con botón de respuesta, así es como se disponen sus distintas partes:

Obtén más información sobre cómo enviar este tipo de mensajes a continuación.

Introducción

Antes de poder enviar mensajes, tienes que obtener el identificador de WhatsApp del destinatario con una llamada al nodo/contacts.

Te recomendamos configurar los webhooks para recibir notificaciones sobre el estado de los mensajes y los mensajes entrantes. De esta forma, puedes hacer un seguimiento del mensaje enviado y consultar las respuestas de los usuarios. Consulta Webhooks para obtener más información.

Paso 1: Crear el objeto interactive

Mensajes de lista

Para enviar un mensaje de lista, debes crear un objeto interactive de tipo list con los siguientes componentes:

ObjetoDescripción

header

Opcional.

Si decides incluirlo, debes definir el tipo de encabezado como texto y añadir un campo de texto con el contenido que quieras. Máximo de 60 caracteres.


Consulta todos los campos de header disponibles.

body

Obligatorio.

Cuerpo del mensaje. Máximo de 1024 caracteres.


Consulta todos los campos de body disponibles.

footer

Opcional.

Pie del mensaje.


Consulta todos los campos de footer disponibles.

action

Obligatorio.

Dentro de la acción, debes anidar:

  • un campo button con el contenido del botón, con 20 caracteres como máximo
  • al menos un objeto section (10 como máximo), con un máximo de 24 caracteres para el title de la section

Dentro de section, debes añadir al menos un objeto rows. Máximo de 24 caracteres para el valor title de una fila y máximo de 72 caracteres para la description de una fila.


Consulta todos los campos de action disponibles.

Consulta todos los campos section disponibles.

Tras finalizar el proceso, el objeto interactive debería tener un aspecto similar al siguiente:

"interactive":{
  "type": "list",
  "header": {
    "type": "text",
    "text": "your-header-content"
  },
  "body": {
    "text": "your-text-message-content"
  },
  "footer": {
    "text": "your-footer-content"
  },
  "action": {
    "button": "cta-button-content",
    "sections":[
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      ...
    ]
  }
}

Botones de respuesta

Para enviar un mensaje con botón de respuesta, debes crear un objeto interactive de tipo button con los siguientes componentes:

ObjetoDescripción

header

Opcional.

Para los mensajes interactivos de tipo button, puedes usar los siguientes tipos de encabezado: text, video, image o document.


Una vez hayas seleccionado el type, añade los objetos o campos correspondientes con más información:

  • En el caso de los tipos video, image y document, añade un objeto media.
  • En el caso del tipo text, añade un campo text con el contenido que quieras.

Ejemplo:

"header": {
      "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"
        }
      }
    }

Consulta todos los campos de header disponibles.

body

Obligatorio.

Consulta todos los campos de body disponibles.

footer

Opcional.

Consulta todos los campos de footer disponibles.

action

Obligatorio.

Debes añadir al menos un button e incluir type, title y id en los botones. No puedes añadir más de tres botones. Máximo de 20 caracteres para title.

No puedes añadir espacios iniciales ni finales al establecer el identificador.


Ejemplo:

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

Consulta todos los campos de action disponibles.

Tras finalizar el proceso, el objeto interactive debería tener un aspecto similar al siguiente:

"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 de solicitud de ubicación

Los mensajes de solicitud de ubicación contienen el texto del cuerpo y un botón Enviar ubicación que los usuarios pueden tocar. Al tocar el botón, se muestra una pantalla para compartir la ubicación que el usuario puede utilizar para compartir su ubicación.

Para enviar un mensaje de solicitud de ubicación, primero crea un objeto interactive con el texto que quieres mostrar en el mensaje:

{
  "type": "location_request_message",
  "body": {
    "type": "text",
    "text": "<TEXT>"
  },
  "action": {
    "name": "send_location" 
  }
}
PropiedadDescripción

type

Se establece en location_request_message.

body.type

Se establece en text.

body.text

Se establece en el texto que quieres mostrar encima del botón Enviar ubicación.

action.name

Se establece en send_location.

Mensajes de Flows

Los mensajes de Flows contienen un botón de llamada a la acción que los usuarios pueden tocar. Al tocar el botón, se muestra el Flow personalizado.

Para enviar un mensaje de Flows, debes crear un objeto interactive de tipo flow. Consulta aquí todos los detalles.

Paso 2: Añadir parámetros de mensajes comunes

Una vez has creado el objeto interactivo, añade los demás parámetros que forman un mensaje: recipient_type, to y type. Recuerda establecer el valor de type en interactive.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id", // WhatsApp ID of your recipient
  "type": "interactive",
  "interactive":{
    // Your interactive object  
   }
  }

Consulta los parámetros comunes a todos los tipos de mensajes aquí.

Paso 3: Realizar una llamada POST a /messages

Realiza una llamada POST al extremo /messages con el objeto JSON que has creado en los pasos 1 y 2. Si el mensaje se envía correctamente, recibirás la siguiente respuesta:

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

Paso 4: Comprobar los webhooks

Si configuras webhooks, comprueba si hay cambios en el estado de tu mensaje, así como las respuestas de los usuarios.

Los webhooks de los usuarios que responden a los mensajes interactivos incluyen un componente nuevo llamado interactive que contiene información sobre la elección del usuario. Para obtener más información, consulta Webhooks, Componentes.

Por ejemplo, a continuación se muestra una solicitud de webhook que describe a un usuario que ha compartido su ubicación.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "12345",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "12345",
              "phone_number_id": "12345"
            },
            "contacts": [
              {
                "profile": {
                  "name": "John Doe"
                },
                "wa_id": "12345"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "12345",
                  "id": "test-id"
                },
                "from": "123450",
                "id": "test-id",
                "timestamp": "16632",
                "location": {
                  "address": "1071 5th Ave, New York, NY 10128", #Optional
                  "latitude": 37.421996751527,
                  "longitude": -122.08407156636,
                  "name": "Solomon R. Guggenheim Museum" #Optional
                },
                "type": "location"
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

El componente location de la carga útil contiene la latitud y la longitud del usuario. Ten en cuenta que tanto address como name son opcionales para el usuario y pueden no incluirse.

"location": {
  "address": "1071 5th Ave, New York, NY 10128", #Optional
  "latitude": 40.782910059774,
  "longitude": -73.959075808525,
  "name": "Solomon R. Guggenheim Museum" #Optional
}