{"id":711,"date":"2026-10-29T13:16:48","date_gmt":"2026-10-29T13:16:48","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/chatbot-ia-api-whatsapp\/"},"modified":"2026-10-29T13:17:07","modified_gmt":"2026-10-29T13:17:07","slug":"chatbot-ia-api-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/","title":{"rendered":"Chatbot con IA en la API oficial de WhatsApp: arquitectura y c\u00f3digo"},"content":{"rendered":"\n<p><em>Actualizado el 29\/10\/2026<\/em><\/p>\n\n\n\n<p>Para conectar un chatbot o agente de IA a WhatsApp por la API oficial, recibes cada mensaje por webhook, respondes 200 de inmediato, pones el evento en una cola y dejas que un worker arme el contexto, llame al modelo de lenguaje y env\u00ede la respuesta por la API. La respuesta libre del bot solo puede salir dentro de la ventana de 24 horas que abri\u00f3 el cliente, y la pol\u00edtica de Meta exige un camino claro hacia la atenci\u00f3n humana. Los t\u00e9rminos de Meta tambi\u00e9n proh\u00edben usar la plataforma para ofrecer asistentes de IA de uso general como producto principal, con excepciones en algunos pa\u00edses, entre ellos Brasil.<\/p>\n\n\n\n<p>Esta gu\u00eda muestra la arquitectura, las reglas que afectan al bot y un ejemplo funcional en Node.js con Vectalk, que transmite los mismos payloads y webhooks de Meta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Arquitectura: webhook, cola, LLM y respuesta<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-text\">Cliente en WhatsApp\n      \u2502\n      \u25bc\nMeta \u2500\u2500POST\u2500\u2500\u25b6 Vectalk \u2500\u2500POST\u2500\u2500\u25b6 \/webhook (responde 200 y encola)\n                                     \u2502\n                                     \u25bc\n                                   Cola\n                                     \u2502\n                                     \u25bc\n                Worker: deduplica \u25b6 carga historial \u25b6 decide (bot o humano)\n                                     \u2502\n                         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                         \u25bc                       \u25bc\n                   LLM genera respuesta     Agente humano\n                         \u2502\n                         \u25bc\n             POST \/api\/messages (Vectalk) \u2500\u2500\u25b6 Meta \u2500\u2500\u25b6 Cliente<\/code><\/pre>\n\n\n\n<p>Cada pieza tiene una funci\u00f3n clara:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Componente<\/th><th>Responsabilidad<\/th><th>Cuidado principal<\/th><\/tr><\/thead><tbody><tr><td>Webhook<\/td><td>Recibir el evento, validarlo y responder 200<\/td><td>No llamar al LLM dentro de la solicitud<\/td><\/tr><tr><td>Cola<\/td><td>Desacoplar la recepci\u00f3n del procesamiento<\/td><td>Garantizar un reintento si el worker se cae<\/td><\/tr><tr><td>Deduplicaci\u00f3n<\/td><td>Ignorar eventos repetidos por su ID <code>wamid<\/code><\/td><td>Guardar los IDs procesados durante algunos d\u00edas<\/td><\/tr><tr><td>Historial<\/td><td>Armar el contexto de la conversaci\u00f3n por <code>wa_id<\/code><\/td><td>Limitar el tama\u00f1o para controlar costo y latencia<\/td><\/tr><tr><td>Enrutador<\/td><td>Decidir si responde el bot o si la conversaci\u00f3n est\u00e1 con un humano<\/td><td>Respetar el estado de derivaci\u00f3n<\/td><\/tr><tr><td>LLM<\/td><td>Generar la respuesta dentro del alcance del negocio<\/td><td>Prompt con l\u00edmites claros y tiempo m\u00e1ximo de respuesta<\/td><\/tr><tr><td>Env\u00edo<\/td><td>Llamar a la API y guardar el ID del mensaje enviado<\/td><td>Manejar errores y revisar la ventana de 24 horas<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Por qu\u00e9 la cola es obligatoria<\/h3>\n\n\n\n<p>Un modelo de lenguaje puede tardar varios segundos en responder. Vectalk espera HTTP 200 en menos de 20 segundos y reenv\u00eda el evento si no lo recibe, seg\u00fan su <a href=\"https:\/\/docs.vectalk.com.br\/concepts\/webhooks\">documentaci\u00f3n de webhooks<\/a>. Si el endpoint espera al LLM, un pico de mensajes provoca reenv\u00edos, respuestas duplicadas y el doble de costo. Con la cola, el webhook solo guarda el evento y responde.<\/p>\n\n\n\n<p>El art\u00edculo sobre <a href=\"https:\/\/vectalk.com.br\/blog\/es\/webhooks-api-whatsapp\/\">webhooks de la API de WhatsApp<\/a> cubre el formato de los eventos, la deduplicaci\u00f3n y el manejo de estados, y <a href=\"https:\/\/vectalk.com.br\/blog\/es\/validar-firma-webhook-whatsapp\/\">validar la firma del webhook<\/a> muestra c\u00f3mo revisar <code>X-Hub-Signature-256<\/code> antes de encolar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Marcar como le\u00eddo y mostrar &#8220;escribiendo&#8221;<\/h3>\n\n\n\n<p>La Cloud API permite marcar el mensaje recibido como le\u00eddo y mostrar el indicador de escritura en la misma llamada. Seg\u00fan la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/typing-indicators\" target=\"_blank\" rel=\"noreferrer noopener\">documentaci\u00f3n de indicadores de escritura<\/a>, el indicador desaparece cuando respondes o despu\u00e9s de 25 segundos, lo que ocurra primero. Meta recomienda mostrarlo solo si realmente vas a responder.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"status\": \"read\",\n  \"message_id\": \"wamid.HBgLNTUx...\",\n  \"typing_indicator\": { \"type\": \"text\" }\n}<\/code><\/pre>\n\n\n\n<p>En Vectalk, esta llamada va a <code>POST \/api\/messages<\/code>, el mismo endpoint documentado para marcar como le\u00eddo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La ventana de 24 horas define lo que el bot puede enviar<\/h2>\n\n\n\n<p>Cuando el cliente env\u00eda un mensaje, se abre una ventana de atenci\u00f3n de 24 horas que se renueva con cada nuevo mensaje suyo. Dentro de ella, el bot puede responder con texto libre, multimedia y mensajes interactivos. Fuera de ella, solo con plantillas aprobadas (consulta la p\u00e1gina de Meta sobre <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\" target=\"_blank\" rel=\"noreferrer noopener\">mensajes de servicio y la ventana de atenci\u00f3n<\/a>).<\/p>\n\n\n\n<p>En la pr\u00e1ctica, eso cambia el dise\u00f1o del agente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>El bot es reactivo.<\/strong> Responde a lo que el cliente pregunt\u00f3. Para retomar el contacto despu\u00e9s de 24 horas, el sistema necesita una plantilla, no texto generado por el LLM.<\/li>\n\n\n<li><strong>Las respuestas lentas pueden perder la ventana.<\/strong> Si el bot depende de un proceso lento (an\u00e1lisis de un documento, consulta a otro sistema), registra la hora del \u00faltimo mensaje del cliente y rev\u00edsala antes de enviar.<\/li>\n\n\n<li><strong>Los botones y las listas ayudan al LLM.<\/strong> En lugar de pedir que el cliente escriba &#8220;1&#8221; o &#8220;2&#8221;, el bot puede enviar opciones para tocar. Mira <a href=\"https:\/\/vectalk.com.br\/blog\/es\/mensajes-interactivos-api-whatsapp\/\">mensajes interactivos en la API de WhatsApp<\/a>.<\/li>\n\n<\/ul>\n\n\n\n<p>El art\u00edculo sobre la <a href=\"https:\/\/vectalk.com.br\/blog\/es\/ventana-24-horas-whatsapp\/\">ventana de 24 horas de WhatsApp<\/a> detalla las reglas de apertura y renovaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1nto cuesta cada respuesta del bot<\/h3>\n\n\n\n<p>Las respuestas libres dentro de la ventana son mensajes de servicio. Desde el 1\/10\/2026, cada n\u00famero comercial tiene 1.000 mensajes de servicio gratuitos por mes, y Meta cobra a partir del 1.001, seg\u00fan la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">p\u00e1gina de precios<\/a>. Para destinatarios en Brasil, la tarifa de servicio es de R$ 0,0350 (reales brasile\u00f1os) por mensaje entregado; las tarifas de otros mercados est\u00e1n en el <a href=\"https:\/\/vectalk.com.br\/blog\/es\/precio-api-whatsapp-por-pais\/\">precio de la API de WhatsApp por pa\u00eds<\/a>. Un bot que responde en tres mensajes cortos cuesta tres veces m\u00e1s que uno que responde en uno solo, as\u00ed que conviene juntar la respuesta.<\/p>\n\n\n\n<p>A ese valor se suma el costo del propio modelo de lenguaje, que depende del proveedor y del tama\u00f1o del contexto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Derivaci\u00f3n a un humano<\/h2>\n\n\n\n<p>La <a href=\"https:\/\/business.whatsapp.com\/policy\" target=\"_blank\" rel=\"noreferrer noopener\">Pol\u00edtica de Mensajes de WhatsApp Business<\/a> permite la automatizaci\u00f3n dentro de la ventana de 24 horas, pero exige caminos de escalamiento r\u00e1pidos, claros y directos. Las opciones que enumera incluyen la transferencia a un agente humano en la conversaci\u00f3n, un n\u00famero de tel\u00e9fono, correo, soporte en el sitio web, una visita a la tienda o un formulario de soporte.<\/p>\n\n\n\n<p>Un bot de atenci\u00f3n necesita, como m\u00ednimo, tres disparadores de derivaci\u00f3n:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Pedido expl\u00edcito.<\/strong> El cliente escribe &#8220;agente&#8221;, &#8220;hablar con una persona&#8221; o toca un bot\u00f3n de ayuda humana.<\/li>\n\n\n<li><strong>Baja confianza.<\/strong> El LLM indica que no sabe responder o que el tema est\u00e1 fuera del alcance definido.<\/li>\n\n\n<li><strong>Tema sensible.<\/strong> Un reclamo, una cancelaci\u00f3n, un cobro impugnado o cualquier tema que la empresa decida tratar solo con personas.<\/li>\n\n<\/ol>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Estado de la conversaci\u00f3n<\/th><th>Qui\u00e9n responde<\/th><th>C\u00f3mo sale del estado<\/th><\/tr><\/thead><tbody><tr><td><code>bot<\/code><\/td><td>Agente de IA<\/td><td>Disparador de derivaci\u00f3n<\/td><\/tr><tr><td><code>esperando_humano<\/code><\/td><td>Nadie responde autom\u00e1ticamente; el bot avisa el tiempo de espera una sola vez<\/td><td>Un agente toma la conversaci\u00f3n<\/td><\/tr><tr><td><code>humano<\/code><\/td><td>Agente, desde la herramienta de atenci\u00f3n<\/td><td>El agente la cierra o la conversaci\u00f3n queda inactiva<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Si el n\u00famero usa <a href=\"https:\/\/vectalk.com.br\/blog\/es\/coexistencia-api-whatsapp\/\">coexistencia<\/a>, el agente puede responder desde la app WhatsApp Business en el celular. Los mensajes enviados desde la app llegan a tu sistema como eventos de eco, y el enrutador puede usarlos para pasar la conversaci\u00f3n a <code>humano<\/code> autom\u00e1ticamente, sin que el bot responda encima. Para varios agentes en el mismo n\u00famero, mira <a href=\"https:\/\/vectalk.com.br\/blog\/es\/multiagente-whatsapp-api\/\">multiagente en WhatsApp con la API<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lo que Meta permite para chatbots de IA<\/h2>\n\n\n\n<p>Los <a href=\"https:\/\/www.facebook.com\/legal\/Meta-Terms-for-WhatsApp-Business-Platform\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e9rminos de Meta para la Plataforma de WhatsApp Business<\/a>, en la cl\u00e1usula 4.7, tratan sobre los &#8220;Proveedores de IA&#8221;: proveedores y desarrolladores de tecnolog\u00edas de inteligencia artificial o aprendizaje autom\u00e1tico, como grandes modelos de lenguaje, plataformas de IA generativa y asistentes de IA de uso general, seg\u00fan lo determine Meta. Tienen prohibido usar la plataforma para ofrecer esas tecnolog\u00edas cuando son la funcionalidad principal y no algo incidental o auxiliar.<\/p>\n\n\n\n<p>Qu\u00e9 significa esto para quien construye bots:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bot de atenci\u00f3n de la propia empresa.<\/strong> Un agente que responde dudas sobre pedidos, agenda turnos o explica los productos de la empresa usa la IA como herramienta de atenci\u00f3n. Meta decide cada caso, pero ese no es el uso al que apuntan los t\u00e9rminos.<\/li>\n\n\n<li><strong>Asistente de uso general como producto.<\/strong> Ofrecer un &#8220;ChatGPT en WhatsApp&#8221; al p\u00fablico, donde conversar con la IA es el servicio en s\u00ed, es el caso prohibido, salvo en los pa\u00edses donde Meta est\u00e1 legalmente obligada a permitirlo.<\/li>\n\n\n<li><strong>Brasil.<\/strong> La <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\/ai-providers\" target=\"_blank\" rel=\"noreferrer noopener\">p\u00e1gina de precios para Proveedores de IA<\/a> incluye a Brasil (+55) entre los mercados donde los Proveedores de IA pueden enviar mensajes de servicio desde el 11\/03\/2026, y Meta se los cobra seg\u00fan las tarifas publicadas. Entre los dem\u00e1s mercados listados est\u00e1n Italia y 29 mercados europeos, adem\u00e1s de Turqu\u00eda desde el 15\/10\/2026. En esos env\u00edos, el webhook de estado trae la categor\u00eda de precio <code>general_purpose_ai<\/code>. Esta regla vale solo para Proveedores de IA; el precio para las dem\u00e1s empresas no cambia.<\/li>\n\n\n<li><strong>Datos para entrenamiento.<\/strong> Los t\u00e9rminos proh\u00edben usar datos de la plataforma para crear, desarrollar, entrenar o mejorar modelos de IA. Permiten usarlos para ajustar un modelo de uso exclusivo de la empresa, siempre que no sirvan para otros modelos. Revisa los t\u00e9rminos de tu proveedor de LLM sobre retenci\u00f3n y entrenamiento.<\/li>\n\n<\/ul>\n\n\n\n<p>Los t\u00e9rminos se actualizaron por \u00faltima vez el 23\/09\/2026. Vuelve a leer la cl\u00e1usula antes de lanzar un producto en el que la IA sea el centro de la oferta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo en Node.js<\/h2>\n\n\n\n<p>El ejemplo usa Express, una cola en memoria y la API de Vectalk. En producci\u00f3n, reemplaza la cola por un servicio persistente (Redis, SQS, RabbitMQ) y el <code>Map<\/code> por una base de datos. La funci\u00f3n <code>generarRespuesta<\/code> es donde entra el SDK de tu proveedor de LLM. Para una versi\u00f3n paso a paso con la llamada real a un modelo, mira <a href=\"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/\">c\u00f3mo conectar ChatGPT a la API oficial de WhatsApp<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">import express from 'express';\n\nconst VECTALK = 'https:\/\/apis.vectalk.com.br\/api\/messages';\nconst TOKEN = process.env.VECTALK_TOKEN; \/\/ token de instancia\nconst VENTANA_MS = 24 * 60 * 60 * 1000;\nconst DISPARADORES_HUMANO = \/\\b(agente|humano|persona|reclamo|cancelar)\\b\/i;\n\nconst app = express();\napp.use(express.json());\n\nconst cola = [];\nconst procesados = new Set();       \/\/ IDs wamid ya tratados\nconst conversaciones = new Map();   \/\/ wa_id -&gt; { estado, historial, ultimaEntrada }\n\n\/\/ 1. Webhook: valida, encola y responde 200\napp.post('\/webhook', (req, res) =&gt; {\n  for (const entry of req.body.entry ?? []) {\n    for (const change of entry.changes ?? []) {\n      for (const msg of change.value?.messages ?? []) cola.push(msg);\n    }\n  }\n  res.sendStatus(200);\n});\n\n\/\/ 2. Env\u00edo por Vectalk (mismo payload de Meta)\nasync function enviar(payload) {\n  const r = await fetch(VECTALK, {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application\/json' },\n    body: JSON.stringify({ messaging_product: 'whatsapp', ...payload }),\n  });\n  if (!r.ok) throw new Error(`Falla en el env\u00edo: ${r.status} ${await r.text()}`);\n  return r.json();\n}\n\n\/\/ 3. Punto de integraci\u00f3n con el LLM\nasync function generarRespuesta(historial) {\n  \/\/ Llama aqu\u00ed al SDK de tu proveedor, con un prompt de sistema que limite\n  \/\/ el alcance a tu negocio y le pida responder \"HANDOFF\" cuando no sepa.\n  throw new Error('Implementa la llamada al LLM');\n}\n\n\/\/ 4. Worker\nasync function procesar(msg) {\n  if (procesados.has(msg.id)) return;\n  procesados.add(msg.id);\n\n  const c = conversaciones.get(msg.from) ?? { estado: 'bot', historial: [], ultimaEntrada: 0 };\n  c.ultimaEntrada = Number(msg.timestamp) * 1000;\n  conversaciones.set(msg.from, c);\n\n  if (c.estado !== 'bot') return; \/\/ conversaci\u00f3n con un humano: el bot se queda en silencio\n\n  if (msg.type !== 'text') {\n    await enviar({ to: msg.from, type: 'text', text: { body: 'Por ahora solo entiendo texto. \u00bfPuedes escribir tu consulta?' } });\n    return;\n  }\n\n  const texto = msg.text.body;\n  c.historial.push({ role: 'user', content: texto });\n  c.historial = c.historial.slice(-20); \/\/ limita el contexto\n\n  if (DISPARADORES_HUMANO.test(texto)) return derivar(msg.from, c);\n\n  await enviar({ status: 'read', message_id: msg.id, typing_indicator: { type: 'text' } });\n\n  const respuesta = await generarRespuesta(c.historial);\n  if (respuesta.trim() === 'HANDOFF') return derivar(msg.from, c);\n\n  if (Date.now() - c.ultimaEntrada &gt; VENTANA_MS) return; \/\/ la ventana cerr\u00f3: hace falta una plantilla\n\n  await enviar({ to: msg.from, type: 'text', text: { body: respuesta } });\n  c.historial.push({ role: 'assistant', content: respuesta });\n}\n\nasync function derivar(waId, c) {\n  c.estado = 'esperando_humano';\n  await enviar({ to: waId, type: 'text', text: { body: 'Voy a llamar a una persona del equipo. En unos instantes alguien sigue por aqu\u00ed.' } });\n  \/\/ Notifica a tu herramienta de atenci\u00f3n (cola de tickets, Slack, CRM).\n}\n\nsetInterval(async () =&gt; {\n  const msg = cola.shift();\n  if (!msg) return;\n  try { await procesar(msg); } catch (e) { console.error(e); }\n}, 50);\n\napp.listen(3000);<\/code><\/pre>\n\n\n\n<p>Lo que el ejemplo ya resuelve y lo que falta para producci\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Resuelve:<\/strong> respuesta inmediata al webhook, deduplicaci\u00f3n por <code>wamid<\/code>, estado de derivaci\u00f3n, l\u00edmite de contexto, revisi\u00f3n de la ventana e indicador de escritura.<\/li>\n\n\n<li><strong>Falta:<\/strong> cola persistente con reintentos, base de datos para historial y estado, tiempo m\u00e1ximo en la llamada al LLM, registro de costos a partir del webhook de estado y un panel para que el agente tome la conversaci\u00f3n y se la devuelva al bot. Vectalk no ofrece una bandeja de atenci\u00f3n, as\u00ed que ese panel es una herramienta propia o un CRM integrado con los webhooks.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Buenas pr\u00e1cticas para el agente<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Alcance cerrado.<\/strong> El prompt de sistema debe decir qu\u00e9 hace el bot y qu\u00e9 no. Precios, plazos y pol\u00edticas deben venir de los datos de tu sistema, no de la memoria del modelo.<\/li>\n\n\n<li><strong>Respuestas cortas.<\/strong> En WhatsApp, un mensaje de tres l\u00edneas funciona mejor que un texto largo. Eso tambi\u00e9n reduce la cantidad de mensajes cobrados.<\/li>\n\n\n<li><strong>Identifica al bot.<\/strong> Deja claro que el cliente est\u00e1 hablando con un asistente virtual y c\u00f3mo llegar a una persona.<\/li>\n\n\n<li><strong>Registra todo.<\/strong> Guarda la pregunta, la respuesta, el modelo usado y el tiempo de respuesta. Sin eso no se puede auditar una respuesta equivocada.<\/li>\n\n\n<li><strong>Prueba con mensajes reales.<\/strong> Audios, fotos de comprobantes y stickers llegan todos los d\u00edas. Decide qu\u00e9 hace el bot con cada tipo antes de pasar a producci\u00f3n.<\/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 usar cualquier LLM con la API oficial?<\/h3>\n\n\n\n<p>La API de WhatsApp no restringe el modelo que usas en tu servidor. Lo que regulan los t\u00e9rminos de Meta es el uso: la IA como apoyo a la atenci\u00f3n de la empresa es distinto de ofrecer un asistente de uso general como producto principal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEl bot puede enviar el primer mensaje al cliente?<\/h3>\n\n\n\n<p>No con texto libre. Para iniciar el contacto o retomarlo despu\u00e9s de 24 horas, hace falta una plantilla aprobada. Mira <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\">\u00bfC\u00f3mo evito que el bot responda dos veces el mismo mensaje?<\/h3>\n\n\n\n<p>Guarda el ID <code>wamid<\/code> de cada mensaje procesado e ignora las repeticiones. Los reenv\u00edos de webhook ocurren cada vez que el endpoint tarda o falla.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEl bot puede responder audios?<\/h3>\n\n\n\n<p>El webhook entrega el ID del archivo multimedia, que descargas por la API de multimedia y transcribes con el servicio que prefieras. La transcripci\u00f3n y su costo corren por tu cuenta. <a href=\"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/\">Descargar multimedia del webhook<\/a> muestra el paso de descarga.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfNecesito alg\u00fan registro especial en Meta para usar IA?<\/h3>\n\n\n\n<p>Para un bot de atenci\u00f3n de la propia empresa, la documentaci\u00f3n consultada no describe un registro adicional. Si tu producto es un asistente de IA de uso general, lee la cl\u00e1usula 4.7 de los t\u00e9rminos y la p\u00e1gina de Proveedores de IA antes de empezar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Empieza con Vectalk<\/h2>\n\n\n\n<p>Con Vectalk, tu bot recibe los mismos webhooks de Meta y env\u00eda con los mismos payloads, usando un token para todas las cuentas. No registras tarjeta en Meta: pagas una mensualidad y mantienes un saldo prepago, y cada mensaje entregado se descuenta de ese saldo. La coexistencia permite que el equipo humano siga usando la app. Crea tu cuenta en <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a> y consulta la <a href=\"https:\/\/docs.vectalk.com.br\/\">documentaci\u00f3n<\/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:\/\/www.facebook.com\/legal\/Meta-Terms-for-WhatsApp-Business-Platform\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e9rminos de Meta para la Plataforma de WhatsApp Business<\/a> (actualizados el 23\/09\/2026), <a href=\"https:\/\/business.whatsapp.com\/policy\" target=\"_blank\" rel=\"noreferrer noopener\">Pol\u00edtica de Mensajes de WhatsApp Business<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\/ai-providers\" target=\"_blank\" rel=\"noreferrer noopener\">Precios para Proveedores de IA<\/a> (actualizada el 15\/10\/2026), <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">Precios de la plataforma de WhatsApp Business<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Mensajes de servicio y ventana de atenci\u00f3n<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/typing-indicators\" target=\"_blank\" rel=\"noreferrer noopener\">Indicadores de escritura<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/concepts\/webhooks\">Webhooks en la documentaci\u00f3n de Vectalk<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo conectar un chatbot o agente de IA a la API oficial de WhatsApp: arquitectura, ventana de 24 horas, derivaci\u00f3n a humano, reglas de Meta para IA y c\u00f3digo en Node.js.<\/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-711","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>Chatbot con IA en la API de WhatsApp: Node.js | Vectalk<\/title>\n<meta name=\"description\" content=\"Chatbot con IA en la API de WhatsApp: arquitectura con webhook, cola y LLM, ventana de 24 horas, derivaci\u00f3n a humano, reglas de Meta y ejemplo en Node.js.\" \/>\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\/chatbot-ia-api-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chatbot con IA en la API de WhatsApp: Node.js | Vectalk\" \/>\n<meta property=\"og:description\" content=\"Chatbot con IA en la API de WhatsApp: arquitectura con webhook, cola y LLM, ventana de 24 horas, derivaci\u00f3n a humano, reglas de Meta y ejemplo en Node.js.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T13:16:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T13:17:07+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=\"13 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\\\/chatbot-ia-api-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatbot-ia-api-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Chatbot con IA en la API oficial de WhatsApp: arquitectura y c\u00f3digo\",\"datePublished\":\"2026-10-29T13:16:48+00:00\",\"dateModified\":\"2026-10-29T13:17:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatbot-ia-api-whatsapp\\\/\"},\"wordCount\":2114,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatbot-ia-api-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatbot-ia-api-whatsapp\\\/\",\"name\":\"Chatbot con IA en la API de WhatsApp: Node.js | Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-29T13:16:48+00:00\",\"dateModified\":\"2026-10-29T13:17:07+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Chatbot con IA en la API de WhatsApp: arquitectura con webhook, cola y LLM, ventana de 24 horas, derivaci\u00f3n a humano, reglas de Meta y ejemplo en Node.js.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatbot-ia-api-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatbot-ia-api-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatbot-ia-api-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chatbot con IA en la API oficial de WhatsApp: arquitectura y c\u00f3digo\"}]},{\"@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":"Chatbot con IA en la API de WhatsApp: Node.js | Vectalk","description":"Chatbot con IA en la API de WhatsApp: arquitectura con webhook, cola y LLM, ventana de 24 horas, derivaci\u00f3n a humano, reglas de Meta y ejemplo en Node.js.","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\/chatbot-ia-api-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Chatbot con IA en la API de WhatsApp: Node.js | Vectalk","og_description":"Chatbot con IA en la API de WhatsApp: arquitectura con webhook, cola y LLM, ventana de 24 horas, derivaci\u00f3n a humano, reglas de Meta y ejemplo en Node.js.","og_url":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-29T13:16:48+00:00","article_modified_time":"2026-10-29T13:17:07+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Chatbot con IA en la API oficial de WhatsApp: arquitectura y c\u00f3digo","datePublished":"2026-10-29T13:16:48+00:00","dateModified":"2026-10-29T13:17:07+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/"},"wordCount":2114,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/","name":"Chatbot con IA en la API de WhatsApp: Node.js | Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-29T13:16:48+00:00","dateModified":"2026-10-29T13:17:07+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Chatbot con IA en la API de WhatsApp: arquitectura con webhook, cola y LLM, ventana de 24 horas, derivaci\u00f3n a humano, reglas de Meta y ejemplo en Node.js.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/es\/chatbot-ia-api-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Chatbot con IA en la API oficial de WhatsApp: arquitectura y c\u00f3digo"}]},{"@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\/711","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=711"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/711\/revisions"}],"predecessor-version":[{"id":713,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/711\/revisions\/713"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=711"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=711"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}