{"id":696,"date":"2026-10-29T13:14:25","date_gmt":"2026-10-29T13:14:25","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/mensajes-interactivos-api-whatsapp\/"},"modified":"2026-10-29T13:14:44","modified_gmt":"2026-10-29T13:14:44","slug":"mensajes-interactivos-api-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/","title":{"rendered":"Mensajes interactivos en la API de WhatsApp: botones, listas, multimedia, ubicaci\u00f3n y Flows"},"content":{"rendered":"\n<p><em>Actualizado el 29\/10\/2026<\/em><\/p>\n\n\n\n<p>Los mensajes interactivos son env\u00edos con <code>type: \"interactive\"<\/code> que le muestran al usuario botones de respuesta (hasta 3), una lista (hasta 10 opciones), un bot\u00f3n de enlace, una solicitud de ubicaci\u00f3n, un carrusel o un WhatsApp Flow; cuando toca, el webhook devuelve el <code>id<\/code> que definiste. Son mensajes de servicio, por lo que solo se pueden enviar con la ventana de 24 horas abierta. Para iniciar una conversaci\u00f3n con botones o Flow, usa una plantilla.<\/p>\n\n\n\n<p>A continuaci\u00f3n est\u00e1n los payloads de cada tipo, los l\u00edmites de caracteres, el formato de la respuesta en el webhook y un enrutador en Node.js para manejarlo todo. Los ejemplos usan Vectalk (<code>https:\/\/apis.vectalk.com.br\/api\/messages<\/code>), que acepta el mismo cuerpo de la Cloud API de Meta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Panorama de los tipos<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tipo<\/th><th><code>interactive.type<\/code><\/th><th>L\u00edmites principales<\/th><th>Qu\u00e9 vuelve en el webhook<\/th><\/tr><\/thead><tbody><tr><td>Botones de respuesta<\/td><td><code>button<\/code><\/td><td>Hasta 3 botones; etiqueta de 20 caracteres; cuerpo de 1.024<\/td><td><code>interactive.button_reply<\/code> con <code>id<\/code> y <code>title<\/code><\/td><\/tr><tr><td>Lista<\/td><td><code>list<\/code><\/td><td>Hasta 10 secciones y 10 filas en total; bot\u00f3n de 20 caracteres<\/td><td><code>interactive.list_reply<\/code> con <code>id<\/code>, <code>title<\/code> y <code>description<\/code><\/td><\/tr><tr><td>Bot\u00f3n de enlace<\/td><td><code>cta_url<\/code><\/td><td>1 bot\u00f3n; etiqueta de 20 caracteres<\/td><td>Nada (abre el navegador)<\/td><\/tr><tr><td>Solicitud de ubicaci\u00f3n<\/td><td><code>location_request_message<\/code><\/td><td>Cuerpo de 1.024 caracteres<\/td><td>Mensaje <code>type: \"location\"<\/code><\/td><\/tr><tr><td>Carrusel multimedia<\/td><td><code>carousel<\/code><\/td><td>De 2 a 10 tarjetas con imagen o video<\/td><td>Depende del bot\u00f3n usado<\/td><\/tr><tr><td>Flow<\/td><td><code>flow<\/code><\/td><td><code>flow_message_version<\/code> igual a <code>\"3\"<\/code><\/td><td><code>interactive.nfm_reply<\/code> con <code>response_json<\/code><\/td><\/tr><tr><td>Producto y multiproducto<\/td><td><code>product<\/code>, <code>product_list<\/code><\/td><td>Ligados a un cat\u00e1logo<\/td><td>Pedido (<code>type: \"order\"<\/code>)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>La multimedia simple (imagen, video, documento, audio) y la ubicaci\u00f3n fija no son interactivas, pero suelen aparecer en los mismos flujos y tambi\u00e9n est\u00e1n en esta gu\u00eda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Botones de respuesta<\/h2>\n\n\n\n<p>El formato m\u00e1s usado para confirmar, elegir entre pocas opciones o derivar a un agente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST https:\/\/apis.vectalk.com.br\/api\/messages \\\n  -H \"Authorization: Bearer TU_TOKEN\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"to\": \"5584999999999\",\n    \"type\": \"interactive\",\n    \"interactive\": {\n      \"type\": \"button\",\n      \"header\": { \"type\": \"text\", \"text\": \"Cita de ma\u00f1ana\" },\n      \"body\": { \"text\": \"Hola, Marina. Tu cita est\u00e1 programada para el 21\/10 a las 9 h. \u00bfLa confirmas?\" },\n      \"footer\": { \"text\": \"Cl\u00ednica Ejemplo\" },\n      \"action\": {\n        \"buttons\": [\n          { \"type\": \"reply\", \"reply\": { \"id\": \"confirmar_8812\", \"title\": \"Confirmar\" } },\n          { \"type\": \"reply\", \"reply\": { \"id\": \"reprogramar_8812\", \"title\": \"Reprogramar\" } },\n          { \"type\": \"reply\", \"reply\": { \"id\": \"agente\", \"title\": \"Hablar con alguien\" } }\n        ]\n      }\n    }\n  }'<\/code><\/pre>\n\n\n\n<p>Reglas de Meta para este tipo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>hasta 3 botones, con etiquetas \u00fanicas de hasta 20 caracteres;<\/li>\n\n\n<li><code>id<\/code> de hasta 256 caracteres;<\/li>\n\n\n<li>cuerpo de hasta 1.024 caracteres y pie de hasta 60;<\/li>\n\n\n<li>encabezado opcional de texto, imagen, video o documento.<\/li>\n\n<\/ul>\n\n\n\n<p>Usa el <code>id<\/code> para llevar contexto. En el ejemplo, <code>confirmar_8812<\/code> ya indica la acci\u00f3n y la cita, y el webhook no depende del texto del bot\u00f3n. Cuando el usuario toca, llega:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">\"interactive\": {\n  \"type\": \"button_reply\",\n  \"button_reply\": { \"id\": \"confirmar_8812\", \"title\": \"Confirmar\" }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Lista interactiva<\/h2>\n\n\n\n<p>Para m\u00e1s de tres opciones: men\u00fa, horarios, departamentos, planes. El usuario toca el bot\u00f3n y se abre un panel con las filas.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5584999999999\",\n  \"type\": \"interactive\",\n  \"interactive\": {\n    \"type\": \"list\",\n    \"header\": { \"type\": \"text\", \"text\": \"Horarios disponibles\" },\n    \"body\": { \"text\": \"Elige un horario para tu visita t\u00e9cnica.\" },\n    \"footer\": { \"text\": \"Hora de Brasilia\" },\n    \"action\": {\n      \"button\": \"Ver horarios\",\n      \"sections\": [\n        {\n          \"title\": \"Mi\u00e9rcoles, 22\/10\",\n          \"rows\": [\n            { \"id\": \"slot_2210_09\", \"title\": \"09:00\", \"description\": \"T\u00e9cnico disponible\" },\n            { \"id\": \"slot_2210_14\", \"title\": \"14:00\", \"description\": \"T\u00e9cnico disponible\" }\n          ]\n        },\n        {\n          \"title\": \"Jueves, 23\/10\",\n          \"rows\": [\n            { \"id\": \"slot_2310_10\", \"title\": \"10:00\" }\n          ]\n        }\n      ]\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campo<\/th><th>L\u00edmite<\/th><\/tr><\/thead><tbody><tr><td><code>action.button<\/code><\/td><td>20 caracteres, un bot\u00f3n<\/td><\/tr><tr><td>Secciones<\/td><td>Hasta 10, t\u00edtulo de hasta 24 caracteres<\/td><\/tr><tr><td>Filas<\/td><td>Hasta 10 sumando todas las secciones<\/td><\/tr><tr><td><code>rows[].title<\/code><\/td><td>24 caracteres<\/td><\/tr><tr><td><code>rows[].description<\/code><\/td><td>72 caracteres, opcional<\/td><\/tr><tr><td><code>rows[].id<\/code><\/td><td>200 caracteres<\/td><\/tr><tr><td>Cuerpo<\/td><td>4.096 caracteres<\/td><\/tr><tr><td>Encabezado<\/td><td>Solo texto, 60 caracteres<\/td><\/tr><tr><td>Pie<\/td><td>60 caracteres, opcional<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El l\u00edmite de 10 filas es el total del mensaje, no por secci\u00f3n. Si tienes m\u00e1s opciones, div\u00eddelas en etapas (primero el d\u00eda, despu\u00e9s el horario). La elecci\u00f3n vuelve como <code>list_reply<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">\"interactive\": {\n  \"type\": \"list_reply\",\n  \"list_reply\": { \"id\": \"slot_2210_14\", \"title\": \"14:00\", \"description\": \"T\u00e9cnico disponible\" }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Bot\u00f3n de enlace (CTA URL)<\/h2>\n\n\n\n<p>Esconde una URL larga detr\u00e1s de un bot\u00f3n. \u00datil para comprobantes de pago, seguimiento y portal del cliente. (En Brasil, un uso t\u00edpico es el <em>boleto<\/em>, un comprobante bancario que se paga con c\u00f3digo de barras.)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5584999999999\",\n  \"type\": \"interactive\",\n  \"interactive\": {\n    \"type\": \"cta_url\",\n    \"body\": { \"text\": \"Tu duplicado de factura est\u00e1 listo.\" },\n    \"action\": {\n      \"name\": \"cta_url\",\n      \"parameters\": {\n        \"display_text\": \"Abrir factura\",\n        \"url\": \"https:\/\/cliente.ejemplo.com\/facturas\/7731?origen=whatsapp\"\n      }\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p>La etiqueta admite hasta 20 caracteres y el cuerpo hasta 1.024. El toque abre el navegador y no genera un mensaje del usuario, as\u00ed que no renueva la <a href=\"https:\/\/vectalk.com.br\/blog\/es\/ventana-24-horas-whatsapp\/\">ventana de 24 horas<\/a>. Para medir clics, usa par\u00e1metros en la propia URL.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ubicaci\u00f3n: enviar y pedir<\/h2>\n\n\n\n<p>Para enviar una direcci\u00f3n fija (tienda, punto de retiro), usa <code>type: \"location\"<\/code>. Latitud y longitud son obligatorias; nombre y direcci\u00f3n son opcionales.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5584999999999\",\n  \"type\": \"location\",\n  \"location\": {\n    \"latitude\": -5.7945,\n    \"longitude\": -35.2110,\n    \"name\": \"Tienda Ejemplo Centro\",\n    \"address\": \"Av. Exemplo, 100 - Natal, RN\"\n  }\n}<\/code><\/pre>\n\n\n\n<p>Para pedir la ubicaci\u00f3n del usuario (entrega, atenci\u00f3n en terreno), usa el mensaje interactivo con el bot\u00f3n de enviar ubicaci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5584999999999\",\n  \"type\": \"interactive\",\n  \"interactive\": {\n    \"type\": \"location_request_message\",\n    \"body\": { \"text\": \"Para calcular el env\u00edo, toca el bot\u00f3n y comparte tu ubicaci\u00f3n.\" },\n    \"action\": { \"name\": \"send_location\" }\n  }\n}<\/code><\/pre>\n\n\n\n<p>La respuesta llega como un mensaje com\u00fan de ubicaci\u00f3n, con <code>latitude<\/code>, <code>longitude<\/code> y, si el usuario quiere compartirlos, <code>name<\/code> y <code>address<\/code>. El campo <code>context.id<\/code> apunta al mensaje de solicitud, lo que ayuda a relacionar la respuesta con el pedido correcto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Carrusel multimedia<\/h2>\n\n\n\n<p>El carrusel muestra de 2 a 10 tarjetas con desplazamiento horizontal. Cada tarjeta necesita un encabezado de imagen o video, puede tener un cuerpo de hasta 160 caracteres (con hasta 2 saltos de l\u00ednea) y debe tener un bot\u00f3n de enlace o botones de respuesta r\u00e1pida, con el mismo tipo y la misma cantidad en todas las tarjetas. Funciona bien para mostrar variantes de un producto. La estructura completa est\u00e1 en la p\u00e1gina de carrusel de la documentaci\u00f3n de Meta; para iniciar la conversaci\u00f3n con tarjetas, consulta la <a href=\"https:\/\/vectalk.com.br\/blog\/es\/plantilla-carrusel-whatsapp\/\">plantilla carrusel de WhatsApp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WhatsApp Flows<\/h2>\n\n\n\n<p>Los Flows son formularios de varias pantallas dentro de WhatsApp: registro, agendamiento, encuestas, simulaci\u00f3n de cr\u00e9dito. El contenido de las pantallas se define en un archivo JSON (Flow JSON), y el resultado te vuelve por el webhook. Para una introducci\u00f3n m\u00e1s amplia, lee <a href=\"https:\/\/vectalk.com.br\/blog\/es\/whatsapp-flows-es\/\">WhatsApp Flows<\/a>.<\/p>\n\n\n\n<p>Meta indica dos requisitos previos: tener la empresa verificada y mantener alta la calidad de los mensajes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Crear, subir el JSON y publicar<\/h3>\n\n\n\n<p>En Vectalk, el ciclo se hace por API con un token de instancia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\"># Crea el Flow como borrador\ncurl -X POST https:\/\/apis.vectalk.com.br\/api\/flows \\\n  -H \"Authorization: Bearer TU_TOKEN_DE_INSTANCIA\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{ \"name\": \"agendamiento_visita\", \"categories\": [\"APPOINTMENT_BOOKING\"] }'\n\n# Sube el flow.json (multipart)\ncurl -X POST https:\/\/apis.vectalk.com.br\/api\/flows\/FLOW_ID\/assets \\\n  -H \"Authorization: Bearer TU_TOKEN_DE_INSTANCIA\" \\\n  -F \"file=@flow.json\" -F \"name=flow.json\" -F \"asset_type=FLOW_JSON\"\n\n# Publica\ncurl -X POST https:\/\/apis.vectalk.com.br\/api\/flows\/FLOW_ID\/publish \\\n  -H \"Authorization: Bearer TU_TOKEN_DE_INSTANCIA\"<\/code><\/pre>\n\n\n\n<p>La respuesta de la subida trae <code>validation_errors<\/code>. Corrige todo antes de publicar: un Flow publicado no se puede eliminar, solo dejar obsoleto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Enviar el Flow dentro de la ventana<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5584999999999\",\n  \"type\": \"interactive\",\n  \"interactive\": {\n    \"type\": \"flow\",\n    \"header\": { \"type\": \"text\", \"text\": \"Agendar visita\" },\n    \"body\": { \"text\": \"Elige fecha, horario y direcci\u00f3n en pocos pasos.\" },\n    \"footer\": { \"text\": \"Toma cerca de 1 minuto\" },\n    \"action\": {\n      \"name\": \"flow\",\n      \"parameters\": {\n        \"flow_message_version\": \"3\",\n        \"flow_id\": \"FLOW_ID\",\n        \"flow_token\": \"ag_5584999999999_20261020\",\n        \"flow_cta\": \"Agendar\",\n        \"flow_action\": \"navigate\",\n        \"flow_action_payload\": { \"screen\": \"INICIO\", \"data\": { \"nombre\": \"Marina\" } }\n      }\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p>El <code>flow_token<\/code> es tuyo: \u00fasalo para identificar la sesi\u00f3n cuando vuelva la respuesta. Meta recomienda un CTA de hasta 30 caracteres, sin emojis. Para iniciar el contacto con un Flow fuera de la ventana, crea una plantilla con un bot\u00f3n de tipo <code>FLOW<\/code>, como explica la gu\u00eda de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/plantillas-api-whatsapp\/\">plantillas de la API de WhatsApp<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Recibir la respuesta<\/h3>\n\n\n\n<p>Cuando el usuario termina, llega un mensaje interactivo de tipo <code>nfm_reply<\/code>. El <code>response_json<\/code> es una cadena con los datos definidos en la acci\u00f3n de cierre del Flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">\"interactive\": {\n  \"type\": \"nfm_reply\",\n  \"nfm_reply\": {\n    \"name\": \"flow\",\n    \"body\": \"Sent\",\n    \"response_json\": \"{\\\"flow_token\\\":\\\"ag_5584999999999_20261020\\\",\\\"fecha\\\":\\\"2026-10-22\\\",\\\"horario\\\":\\\"14:00\\\"}\"\n  }\n}<\/code><\/pre>\n\n\n\n<p>Vigila la salud del Flow. Si el endpoint del Flow se vuelve inestable, Meta cambia el estado a <code>THROTTLED<\/code> (env\u00edo limitado a 10 mensajes por hora) y, si empeora, a <code>BLOCKED<\/code>, cuando no se puede enviar ni abrir. Los cambios llegan por el webhook <code>flows<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Multimedia: imagen, video, documento y audio<\/h2>\n\n\n\n<p>La multimedia va por <code>link<\/code> (URL p\u00fablica) o por <code>id<\/code> (obtenido en la subida). En Vectalk, la subida se hace en <code>\/api\/media<\/code> y devuelve el <code>media_id<\/code>. Hay m\u00e1s ejemplos en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/enviar-multimedia-api-whatsapp\/\">c\u00f3mo enviar multimedia por la API de WhatsApp<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5584999999999\",\n  \"type\": \"document\",\n  \"document\": {\n    \"link\": \"https:\/\/archivos.ejemplo.com\/contratos\/7731.pdf\",\n    \"filename\": \"contrato-7731.pdf\",\n    \"caption\": \"Te enviamos el contrato para firmar.\"\n  }\n}<\/code><\/pre>\n\n\n\n<p>Los IDs de multimedia que devuelve la subida valen por 30 d\u00edas, as\u00ed que puedes reutilizar el mismo <code>id<\/code> en varios env\u00edos en lugar de volver a subir el archivo. En encabezados de botones, Meta recomienda usar el <code>id<\/code> de la multimedia subida en lugar del <code>link<\/code>. Para manejar los archivos que te env\u00edan los clientes, consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/\">c\u00f3mo descargar la multimedia del webhook de WhatsApp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo enrutar las respuestas en el webhook<\/h2>\n\n\n\n<p>Un enrutador simple para los tipos anteriores, aprovechando que Vectalk entrega el payload de Meta sin cambios:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-javascript\">function enrutar(msg) {\n  if (msg.type === \"location\") {\n    return calcularEnvio(msg.from, msg.location.latitude, msg.location.longitude, msg.context?.id);\n  }\n  if (msg.type !== \"interactive\") return manejarTextoLibre(msg);\n\n  const i = msg.interactive;\n  switch (i.type) {\n    case \"button_reply\":\n      if (i.button_reply.id === \"agente\") return transferirAHumano(msg.from);\n      return ejecutarAccion(msg.from, i.button_reply.id);\n    case \"list_reply\":\n      return reservarHorario(msg.from, i.list_reply.id);\n    case \"nfm_reply\": {\n      const datos = JSON.parse(i.nfm_reply.response_json);\n      return guardarAgendamiento(datos.flow_token, datos);\n    }\n    default:\n      return registrarNoManejado(msg);\n  }\n}<\/code><\/pre>\n\n\n\n<p>Las respuestas a botones de plantilla (respuesta r\u00e1pida) llegan con <code>type: \"button\"<\/code>, un formato distinto de <code>button_reply<\/code>; maneja los dos. La gu\u00eda de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/webhooks-api-whatsapp\/\">webhooks de la API de WhatsApp<\/a> muestra el servidor completo con cola y deduplicaci\u00f3n, el tutorial de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/bot-whatsapp-nodejs-express\/\">bot de WhatsApp con Node.js<\/a> arma uno desde cero, y el art\u00edculo sobre <a href=\"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/\">chatbot con IA en WhatsApp<\/a> muestra c\u00f3mo combinar botones y respuestas generadas por IA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo elegir el tipo correcto<\/h2>\n\n\n\n<p>La elecci\u00f3n depende de lo que necesitas recibir de vuelta:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Necesidad<\/th><th>Tipo indicado<\/th><th>Motivo<\/th><\/tr><\/thead><tbody><tr><td>S\u00ed o no, confirmar o reprogramar<\/td><td>Botones de respuesta<\/td><td>Un toque, respuesta estructurada y renovaci\u00f3n de la ventana<\/td><\/tr><tr><td>Elegir entre 4 y 10 opciones<\/td><td>Lista<\/td><td>Cabe en un solo mensaje, con descripci\u00f3n por fila<\/td><\/tr><tr><td>Llevar a pago, seguimiento o portal<\/td><td>Bot\u00f3n de enlace<\/td><td>Esconde la URL y deja el texto limpio<\/td><\/tr><tr><td>Direcci\u00f3n de entrega o visita<\/td><td>Solicitud de ubicaci\u00f3n<\/td><td>Coordenadas exactas, sin escribir<\/td><\/tr><tr><td>Recoger varios campos (nombre, fecha, direcci\u00f3n, preferencias)<\/td><td>Flow<\/td><td>Pantallas con validaci\u00f3n, sin idas y vueltas en el chat<\/td><\/tr><tr><td>Mostrar variantes de producto<\/td><td>Carrusel o <a href=\"https:\/\/vectalk.com.br\/blog\/es\/catalogo-api-whatsapp\/\">mensajes de cat\u00e1logo<\/a><\/td><td>Comparaci\u00f3n visual lado a lado<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Si la conversaci\u00f3n necesita m\u00e1s de dos preguntas seguidas, un Flow suele ser m\u00e1s corto para el usuario que varios botones en secuencia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Buenas pr\u00e1cticas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Etiquetas cortas y con verbo.<\/strong> &#8220;Confirmar&#8221; y &#8220;Reprogramar&#8221; funcionan mejor que frases. El l\u00edmite de 20 caracteres corta el resto.<\/li>\n\n\n<li><strong>Siempre una salida hacia una persona.<\/strong> La Pol\u00edtica de Mensajer\u00eda de WhatsApp Business exige v\u00edas de escalamiento r\u00e1pidas, claras y directas en las experiencias automatizadas, como la transferencia a un agente humano. Un bot\u00f3n &#8220;Hablar con alguien&#8221; lo resuelve.<\/li>\n\n\n<li><strong>IDs estables.<\/strong> Trata el <code>id<\/code> como un contrato con tu backend. Cambiar el texto del bot\u00f3n no deber\u00eda romper el enrutamiento.<\/li>\n\n\n<li><strong>Acepta texto libre.<\/strong> El usuario puede ignorar los botones y escribir. El enrutador tiene que entender &#8220;s\u00ed&#8221;, &#8220;puede ser a las 14 h&#8221; o un audio.<\/li>\n\n\n<li><strong>No cuentes con el orden de entrega.<\/strong> Meta advierte que el orden de entrega de una secuencia de mensajes no est\u00e1 garantizado. Si el orden importa, espera el estado <code>delivered<\/code> del anterior antes de enviar el siguiente.<\/li>\n\n\n<li><strong>Una pregunta por mensaje.<\/strong> Tres mensajes interactivos seguidos confunden y generan respuestas al mensaje equivocado. El <code>context.id<\/code> del webhook muestra a qu\u00e9 mensaje respondi\u00f3 el usuario.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo enviar botones a un cliente que no habl\u00f3 conmigo hoy?<\/h3>\n\n\n\n<p>No como mensaje interactivo. Fuera de la ventana de 24 horas, usa una plantilla con botones de respuesta r\u00e1pida, de enlace o de Flow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfSe pueden poner m\u00e1s de 3 botones de respuesta?<\/h3>\n\n\n\n<p>En el mensaje interactivo, no. Usa una lista (hasta 10 opciones). En plantillas, el l\u00edmite es de hasta 10 botones, con reglas por tipo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfSe cobran los mensajes interactivos?<\/h3>\n\n\n\n<p>Son mensajes de servicio. Desde el 1\/10\/2026, Meta da 1.000 mensajes de servicio entregados gratis por n\u00famero al mes y cobra a partir de ah\u00ed, salvo dentro de la ventana de punto de entrada gratuito abierta por un anuncio. Las tarifas var\u00edan seg\u00fan el pa\u00eds del destinatario; consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/precio-api-whatsapp-por-pais\/\">precio de la API de WhatsApp por pa\u00eds<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfNecesito un endpoint propio para usar Flows?<\/h3>\n\n\n\n<p>No para Flows simples, en los que los datos est\u00e1n en el propio Flow JSON y vuelven en el <code>nfm_reply<\/code>. Los Flows que buscan datos en tiempo real (horarios disponibles, precios) usan la acci\u00f3n <code>data_exchange<\/code> y exigen un endpoint propio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Crea conversaciones interactivas con Vectalk<\/h2>\n\n\n\n<p>En Vectalk, botones, listas, ubicaci\u00f3n, multimedia y Flows usan el mismo payload de la Cloud API, y las respuestas llegan al webhook en el formato de la documentaci\u00f3n de Meta. Un token sirve para todas tus cuentas, la coexistencia con la app WhatsApp Business est\u00e1 disponible y el cobro funciona con una mensualidad m\u00e1s saldo prepago: Vectalk coloca su propia l\u00ednea de cr\u00e9dito en tu n\u00famero y cada mensaje entregado se descuenta del saldo, sin tarjeta registrada en Meta. Crea tu cuenta en <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>, consulta los ejemplos en <a href=\"https:\/\/docs.vectalk.com.br\/\">docs.vectalk.com.br<\/a> o habla con el equipo en el <a href=\"https:\/\/vectalk.com.br\/ajuda.html\">Centro de Ayuda<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fuentes oficiales consultadas el 29\/10\/2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/interactive-reply-buttons-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Mensajes con botones de respuesta<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/interactive-list-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Mensajes de lista<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/interactive-cta-url-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Mensajes CTA URL<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/location-request-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Mensajes de solicitud de ubicaci\u00f3n<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/interactive-media-carousel-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Mensajes de carrusel multimedia<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/flows\/guides\/sendingaflow\" target=\"_blank\" rel=\"noreferrer noopener\">Env\u00edo de Flows<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/flows\/guides\/healthmonitoring\" target=\"_blank\" rel=\"noreferrer noopener\">Salud y monitoreo de Flows<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/business-phone-numbers\/media\" target=\"_blank\" rel=\"noreferrer noopener\">Multimedia<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Payloads, l\u00edmites de caracteres y respuestas en el webhook de cada tipo de mensaje interactivo de la Cloud API, m\u00e1s un enrutador en Node.js para manejarlos todos.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[12],"tags":[],"class_list":["post-696","post","type-post","status-publish","format-standard","hentry","category-uncategorized-es"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mensajes interactivos API WhatsApp: botones, listas y Flows<\/title>\n<meta name=\"description\" content=\"Mensajes interactivos en la API de WhatsApp: botones, listas, enlace, multimedia, ubicaci\u00f3n y Flows, con payloads, l\u00edmites por tipo y respuesta en webhook.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mensajes interactivos API WhatsApp: botones, listas y Flows\" \/>\n<meta property=\"og:description\" content=\"Mensajes interactivos en la API de WhatsApp: botones, listas, enlace, multimedia, ubicaci\u00f3n y Flows, con payloads, l\u00edmites por tipo y respuesta en webhook.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T13:14:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T13:14:44+00:00\" \/>\n<meta name=\"author\" content=\"wanderleyfcunha\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wanderleyfcunha\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Mensajes interactivos en la API de WhatsApp: botones, listas, multimedia, ubicaci\u00f3n y Flows\",\"datePublished\":\"2026-10-29T13:14:25+00:00\",\"dateModified\":\"2026-10-29T13:14:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/\"},\"wordCount\":1799,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/\",\"name\":\"Mensajes interactivos API WhatsApp: botones, listas y Flows\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-29T13:14:25+00:00\",\"dateModified\":\"2026-10-29T13:14:44+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Mensajes interactivos en la API de WhatsApp: botones, listas, enlace, multimedia, ubicaci\u00f3n y Flows, con payloads, l\u00edmites por tipo y respuesta en webhook.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/mensajes-interactivos-api-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mensajes interactivos en la API de WhatsApp: botones, listas, multimedia, ubicaci\u00f3n y Flows\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\",\"name\":\"Blog Vectalk\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\",\"name\":\"wanderleyfcunha\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"caption\":\"wanderleyfcunha\"},\"sameAs\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mensajes interactivos API WhatsApp: botones, listas y Flows","description":"Mensajes interactivos en la API de WhatsApp: botones, listas, enlace, multimedia, ubicaci\u00f3n y Flows, con payloads, l\u00edmites por tipo y respuesta en webhook.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Mensajes interactivos API WhatsApp: botones, listas y Flows","og_description":"Mensajes interactivos en la API de WhatsApp: botones, listas, enlace, multimedia, ubicaci\u00f3n y Flows, con payloads, l\u00edmites por tipo y respuesta en webhook.","og_url":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-29T13:14:25+00:00","article_modified_time":"2026-10-29T13:14:44+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Mensajes interactivos en la API de WhatsApp: botones, listas, multimedia, ubicaci\u00f3n y Flows","datePublished":"2026-10-29T13:14:25+00:00","dateModified":"2026-10-29T13:14:44+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/"},"wordCount":1799,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/","name":"Mensajes interactivos API WhatsApp: botones, listas y Flows","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-29T13:14:25+00:00","dateModified":"2026-10-29T13:14:44+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Mensajes interactivos en la API de WhatsApp: botones, listas, enlace, multimedia, ubicaci\u00f3n y Flows, con payloads, l\u00edmites por tipo y respuesta en webhook.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Mensajes interactivos en la API de WhatsApp: botones, listas, multimedia, ubicaci\u00f3n y Flows"}]},{"@type":"WebSite","@id":"https:\/\/vectalk.com.br\/blog\/#website","url":"https:\/\/vectalk.com.br\/blog\/","name":"Blog Vectalk","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vectalk.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b","name":"wanderleyfcunha","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","caption":"wanderleyfcunha"},"sameAs":["https:\/\/vectalk.com.br\/blog"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/696","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/comments?post=696"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/696\/revisions"}],"predecessor-version":[{"id":698,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/696\/revisions\/698"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}