{"id":548,"date":"2026-10-28T16:07:36","date_gmt":"2026-10-28T16:07:36","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/chatgpt-api-oficial-whatsapp-es\/"},"modified":"2026-10-28T16:07:46","modified_gmt":"2026-10-28T16:07:46","slug":"chatgpt-api-oficial-whatsapp-es","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/","title":{"rendered":"C\u00f3mo conectar ChatGPT a la API oficial de WhatsApp (tutorial con c\u00f3digo)"},"content":{"rendered":"\n<p><em>Actualizado el 28\/10\/2026<\/em><\/p>\n\n\n\n<p>Para conectar ChatGPT a la API oficial de WhatsApp, recibes el mensaje del cliente por el webhook, env\u00edas el historial de esa conversaci\u00f3n a la Responses API de OpenAI (<code>POST https:\/\/api.openai.com\/v1\/responses<\/code>) y devuelves el texto generado con una llamada de env\u00edo de la Cloud API. La respuesta libre solo puede salir dentro de la ventana de 24 horas que abre el cliente, y la pol\u00edtica de Meta exige una v\u00eda clara hacia un agente humano. Usar la IA como apoyo a la atenci\u00f3n de tu propia empresa est\u00e1 permitido; ofrecer un &#8220;ChatGPT de uso general&#8221; como producto en WhatsApp tiene reglas propias en los t\u00e9rminos de Meta.<\/p>\n\n\n\n<p>Este tutorial es la parte pr\u00e1ctica: c\u00f3digo Node.js completo, historial por contacto, control de la ventana, traspaso a humano y costos. La arquitectura general est\u00e1 en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/whatsapp-cloud-api-es\/\">WhatsApp Cloud API: qu\u00e9 es, c\u00f3mo funciona y cu\u00e1nto cuesta<\/a> y en los tutoriales de bot enlazados m\u00e1s abajo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 necesitas antes de empezar<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un n\u00famero conectado a la API oficial, con el webhook configurado. Si a\u00fan no lo tienes, empieza por la gu\u00eda de la Cloud API enlazada arriba.<\/li>\n\n\n<li>Una clave de la API de OpenAI (<code>OPENAI_API_KEY<\/code>), creada en el panel de OpenAI.<\/li>\n\n\n<li>Node.js 18 o superior (el ejemplo usa <code>fetch<\/code> nativo y el SDK oficial <code>openai<\/code>).<\/li>\n\n\n<li>Una base de datos para guardar historial y estado de la conversaci\u00f3n. En el ejemplo usamos memoria para simplificar.<\/li>\n\n<\/ul>\n\n\n\n<p>En WhatsApp no cambia nada por usar ChatGPT: la Cloud API no sabe qu\u00e9 modelo genera el texto. Lo que regula el caso de uso son los t\u00e9rminos de Meta, que vemos m\u00e1s adelante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El flujo en 5 pasos<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Paso<\/th><th>Qu\u00e9 pasa<\/th><th>D\u00f3nde<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>El cliente escribe y Meta dispara el webhook<\/td><td>Meta \u2192 tu servidor (directo o v\u00eda proveedor)<\/td><\/tr><tr><td>2<\/td><td>Tu servidor responde 200 al instante y encola el evento<\/td><td>Webhook<\/td><\/tr><tr><td>3<\/td><td>El worker carga el historial de ese <code>wa_id<\/code> y decide si responde el bot<\/td><td>Base de datos + enrutador<\/td><\/tr><tr><td>4<\/td><td>El worker llama a la Responses API con instrucciones e historial<\/td><td>OpenAI<\/td><\/tr><tr><td>5<\/td><td>El texto vuelve al cliente por <code>POST \/messages<\/code><\/td><td>Cloud API<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El paso 2 es donde fallan las integraciones hechas con prisa. El modelo puede tardar varios segundos en responder, y el webhook no puede esperar. En Vectalk, por ejemplo, el endpoint debe devolver HTTP 200 en un m\u00e1ximo de 20 segundos o el evento se reenv\u00eda, seg\u00fan la <a href=\"https:\/\/docs.vectalk.com.br\/concepts\/webhooks\">documentaci\u00f3n de webhooks<\/a>. Reenv\u00edos sin deduplicaci\u00f3n se convierten en respuestas duplicadas y costo doble.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfResponses API o Chat Completions?<\/h2>\n\n\n\n<p>OpenAI tiene dos APIs para generar texto. La <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/text\" target=\"_blank\" rel=\"noreferrer noopener\">gu\u00eda de generaci\u00f3n de texto<\/a> recomienda la <strong>Responses API<\/strong> para aplicaciones nuevas, y es la que usamos aqu\u00ed. La llamada m\u00ednima es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl https:\/\/api.openai.com\/v1\/responses \\\n  -H \"Authorization: Bearer $OPENAI_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"model\": \"TU_MODELO\",\n    \"instructions\": \"Eres el asistente de Tienda Ejemplo. Responde en hasta 3 frases.\",\n    \"input\": \"\u00bfCu\u00e1nto tarda el env\u00edo a Guadalajara?\"\n  }'<\/code><\/pre>\n\n\n\n<p>Tres par\u00e1metros importan para un bot de WhatsApp:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>instructions<\/code><\/strong>: el comportamiento del bot (tono, alcance, lo que no hace). Vale solo para la solicitud actual, as\u00ed que env\u00edalo siempre.<\/li>\n\n\n<li><strong><code>input<\/code><\/strong>: la pregunta, o una lista de mensajes <code>user<\/code> y <code>assistant<\/code> con el historial.<\/li>\n\n\n<li><strong><code>model<\/code><\/strong>: el\u00edgelo en la p\u00e1gina de modelos de OpenAI. D\u00e9jalo en una variable de entorno para cambiarlo sin tocar el c\u00f3digo.<\/li>\n\n<\/ul>\n\n\n\n<p>En los SDKs oficiales, el texto final est\u00e1 en <code>response.output_text<\/code>. No leas <code>output[0]<\/code> directamente: la salida puede traer otros elementos antes del texto, como llamadas a herramientas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Historial por contacto: tres formas<\/h2>\n\n\n\n<p>ChatGPT no recuerda la conversaci\u00f3n por s\u00ed solo. En cada mensaje tienes que darle el contexto. La <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/conversation-state\" target=\"_blank\" rel=\"noreferrer noopener\">gu\u00eda de estado de la conversaci\u00f3n<\/a> de OpenAI describe tres opciones:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Opci\u00f3n<\/th><th>C\u00f3mo funciona<\/th><th>D\u00f3nde queda el historial<\/th><th>Cu\u00e1ndo usarla<\/th><\/tr><\/thead><tbody><tr><td>Historial manual<\/td><td>Env\u00edas los \u00faltimos mensajes en <code>input<\/code><\/td><td>En tu base de datos<\/td><td>Opci\u00f3n recomendada para atenci\u00f3n: controlas tama\u00f1o, retenci\u00f3n y auditor\u00eda<\/td><\/tr><tr><td><code>previous_response_id<\/code><\/td><td>Env\u00edas solo el mensaje nuevo y el ID de la respuesta anterior<\/td><td>En OpenAI (los objetos de respuesta se guardan 30 d\u00edas por defecto)<\/td><td>Prototipos; los tokens de respuestas anteriores se siguen cobrando como entrada<\/td><\/tr><tr><td>Conversations API<\/td><td>Creas una conversaci\u00f3n y pasas su ID en <code>conversation<\/code><\/td><td>En OpenAI, sin el l\u00edmite de 30 d\u00edas<\/td><td>Cuando quieres un estado duradero del lado de OpenAI<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Para atenci\u00f3n al cliente, el historial manual suele ser la opci\u00f3n m\u00e1s f\u00e1cil de justificar: los datos quedan en tu base, decides cu\u00e1nto tiempo guardarlos y puedes usar <code>store: false<\/code> para que OpenAI no guarde la respuesta. La clave del historial es el <code>wa_id<\/code> del cliente (el campo <code>from<\/code> del mensaje recibido).<\/p>\n\n\n\n<p>Si la conversaci\u00f3n incluye datos personales, la ley de protecci\u00f3n de datos de tu pa\u00eds se aplica a lo que env\u00edas al proveedor de IA. En Brasil es la LGPD (Ley General de Protecci\u00f3n de Datos); consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/lgpd-whatsapp-es\/\">LGPD y WhatsApp<\/a>. Este art\u00edculo no sustituye asesor\u00eda legal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo completo en Node.js<\/h2>\n\n\n\n<p>El ejemplo usa Express, el SDK <code>openai<\/code> y el env\u00edo por Vectalk, que acepta el mismo payload de la Cloud API. Con token de instancia, el n\u00famero de origen se resuelve autom\u00e1ticamente; con token de organizaci\u00f3n, incluye <code>phone_number_id<\/code> en el cuerpo, seg\u00fan la <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send\">referencia de env\u00edo<\/a>. Si integras directo con Meta, cambia la URL por <code>https:\/\/graph.facebook.com\/&lt;versi\u00f3n&gt;\/&lt;PHONE_NUMBER_ID&gt;\/messages<\/code> y usa tu token de Meta.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">npm install express openai<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">import express from 'express';\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI(); \/\/ lee OPENAI_API_KEY del entorno\nconst MODELO = process.env.OPENAI_MODEL;\nconst URL_ENVIO = 'https:\/\/apis.vectalk.com.br\/api\/messages';\nconst TOKEN = process.env.VECTALK_TOKEN; \/\/ token de instancia\nconst VENTANA_MS = 24 * 60 * 60 * 1000;\nconst MAX_TURNOS = 20;\n\nconst INSTRUCCIONES = `Eres el asistente virtual de Tienda Ejemplo en WhatsApp.\n- Responde en espa\u00f1ol, en un m\u00e1ximo de 3 frases cortas.\n- Habla solo de pedidos, env\u00edos, cambios y productos de la tienda.\n- No inventes precios, plazos ni pol\u00edticas: usa solo los datos proporcionados.\n- Si no sabes, si el cliente pide una persona o el tema es un reclamo,\n  una cancelaci\u00f3n o un cobro en disputa, responde exactamente: HANDOFF`;\n\nconst app = express();\napp.use(express.json());\n\nconst cola = [];\nconst procesados = new Set();  \/\/ wamid ya tratados (usa Redis\/base de datos en producci\u00f3n)\nconst chats = new Map();       \/\/ wa_id -&gt; { estado, historial, ultimaEntrada }\n\n\/\/ 1. Webhook: encola y responde 200 de inmediato\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 a WhatsApp\nasync function enviar(cuerpo) {\n  const r = await fetch(URL_ENVIO, {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application\/json' },\n    body: JSON.stringify({ messaging_product: 'whatsapp', ...cuerpo }),\n  });\n  if (!r.ok) throw new Error(`Fall\u00f3 el env\u00edo: ${r.status} ${await r.text()}`);\n  return r.json();\n}\n\n\/\/ 3. Llamada a OpenAI (Responses API)\nasync function preguntarAlModelo(historial) {\n  const respuesta = await openai.responses.create(\n    {\n      model: MODELO,\n      instructions: INSTRUCCIONES,\n      input: historial,         \/\/ [{ role: 'user' | 'assistant', content: '...' }]\n      max_output_tokens: 300,   \/\/ respuestas cortas cuestan menos\n      store: false,             \/\/ no guardar la respuesta en OpenAI\n    },\n    { timeout: 15000 },\n  );\n  return respuesta.output_text.trim();\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 = chats.get(msg.from) ?? { estado: 'bot', historial: [], ultimaEntrada: 0 };\n  c.ultimaEntrada = Number(msg.timestamp) * 1000;\n  chats.set(msg.from, c);\n\n  if (c.estado !== 'bot') return; \/\/ un humano tom\u00f3 la conversaci\u00f3n: el bot calla\n\n  if (msg.type !== 'text') {\n    await enviar({ to: msg.from, type: 'text', text: { body: 'Por aqu\u00ed solo entiendo texto. \u00bfPuedes escribir tu pregunta?' } });\n    return;\n  }\n\n  await enviar({ status: 'read', message_id: msg.id }); \/\/ marcar como le\u00eddo\n\n  c.historial.push({ role: 'user', content: msg.text.body });\n  c.historial = c.historial.slice(-MAX_TURNOS);\n\n  let texto;\n  try {\n    texto = await preguntarAlModelo(c.historial);\n  } catch (e) {\n    console.error('Fall\u00f3 OpenAI', e);\n    texto = 'HANDOFF'; \/\/ ante la duda, pasa a una persona\n  }\n\n  if (texto === 'HANDOFF') return transferir(msg.from, c);\n  if (Date.now() - c.ultimaEntrada &gt; VENTANA_MS) return; \/\/ ventana cerrada: solo plantilla\n\n  await enviar({ to: msg.from, type: 'text', text: { body: texto } });\n  c.historial.push({ role: 'assistant', content: texto });\n}\n\nasync function transferir(waId, c) {\n  c.estado = 'humano';\n  await enviar({ to: waId, type: 'text', text: { body: 'Voy a llamar a una persona de nuestro equipo. En un momento sigue la conversaci\u00f3n por aqu\u00ed.' } });\n  \/\/ Avisa a tu herramienta de atenci\u00f3n (cola de tickets, CRM, Slack).\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, () =&gt; console.log('Bot activo en el puerto 3000'));<\/code><\/pre>\n\n\n\n<p>Para ejecutarlo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">export OPENAI_API_KEY=\"sk-...\"\nexport OPENAI_MODEL=\"modelo-elegido-en-la-pagina-de-modelos\"\nexport VECTALK_TOKEN=\"tu-token-de-instancia\"\nnode bot.mjs<\/code><\/pre>\n\n\n\n<p>Para probar en local, exp\u00f3n el puerto 3000 con un t\u00fanel y registra la URL como webhook; el paso a paso est\u00e1 en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/probar-webhook-whatsapp-localmente\/\">c\u00f3mo probar el webhook de WhatsApp en local<\/a>. Si tu webhook recibe directo de Meta, valida la firma de cada solicitud antes de procesarla: consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/validar-firma-webhook-whatsapp\/\">c\u00f3mo validar X-Hub-Signature-256<\/a>.<\/p>\n\n\n\n<p>Mientras el modelo piensa, la Cloud API permite mostrar &#8220;escribiendo&#8230;&#8221; en la misma llamada que marca el mensaje como le\u00eddo, agregando <code>\"typing_indicator\": { \"type\": \"text\" }<\/code>. 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>, desaparece cuando respondes o a los 25 segundos, lo que ocurra primero, y Meta recomienda usarlo solo si realmente vas a responder.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 resuelve el ejemplo y qu\u00e9 falta<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Resuelve:<\/strong> respuesta inmediata al webhook, deduplicaci\u00f3n por <code>wamid<\/code>, historial por contacto con l\u00edmite de tama\u00f1o, timeout en OpenAI, verificaci\u00f3n de la ventana y estado de traspaso.<\/li>\n\n\n<li><strong>Falta para producci\u00f3n:<\/strong> cola persistente con reintentos, base de datos para historial y estado, control del ritmo de env\u00edo (throughput), registro de costo por conversaci\u00f3n y un panel para que el agente devuelva la conversaci\u00f3n al bot.<\/li>\n\n<\/ul>\n\n\n\n<p>Bots completos sin la parte de IA est\u00e1n en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/bot-whatsapp-nodejs-express\/\">bot de WhatsApp con Node.js<\/a> y <a href=\"https:\/\/vectalk.com.br\/blog\/es\/bot-whatsapp-python-fastapi\/\">bot de WhatsApp con Python<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ventana de 24 horas: ChatGPT no inicia conversaciones<\/h2>\n\n\n\n<p>La respuesta del modelo es un mensaje libre. La <a href=\"https:\/\/business.whatsapp.com\/policy\" target=\"_blank\" rel=\"noreferrer noopener\">Pol\u00edtica de Mensajer\u00eda de WhatsApp Business<\/a> permite responder sin plantilla solo dentro de la ventana de atenci\u00f3n de 24 horas, que se abre y se renueva con cada mensaje del cliente. Fuera de ella, solo plantillas aprobadas.<\/p>\n\n\n\n<p>En la pr\u00e1ctica:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>El bot es reactivo.<\/strong> No puede enviar &#8220;Hola, \u00bfsigues interesado?&#8221; dos d\u00edas despu\u00e9s con texto generado por ChatGPT. Para eso existen las plantillas.<\/li>\n\n\n<li><strong>Verifica la ventana justo antes de enviar<\/strong>, no solo cuando llega el mensaje. Si el modelo se trab\u00f3, la cola se atras\u00f3 o el worker se cay\u00f3, la ventana puede cerrarse en el camino.<\/li>\n\n\n<li><strong>No uses el modelo para &#8220;rellenar&#8221; una plantilla.<\/strong> Las plantillas tienen texto aprobado y variables; el contenido de las variables debe venir de los datos de tu sistema.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Traspaso a un humano<\/h2>\n\n\n\n<p>La pol\u00edtica de Meta permite automatizar dentro de la ventana, pero exige v\u00edas de escalamiento claras, como el traspaso a un agente humano en la conversaci\u00f3n, tel\u00e9fono, correo, soporte web o formulario. En el c\u00f3digo de arriba, tres situaciones llevan al traspaso:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El modelo responde <code>HANDOFF<\/code> porque no sabe, el cliente pidi\u00f3 una persona o el tema es sensible (as\u00ed lo dicen las instrucciones).<\/li>\n\n\n<li>La llamada a OpenAI falla o excede el tiempo.<\/li>\n\n\n<li>Puedes sumar disparadores propios, como palabras clave o un bot\u00f3n &#8220;Hablar con un agente&#8221;.<\/li>\n\n<\/ol>\n\n\n\n<p>Tras el traspaso, el estado pasa a <code>humano<\/code> y el bot calla hasta que el agente devuelva la conversaci\u00f3n. Si el n\u00famero usa coexistencia, el agente puede responder desde la app WhatsApp Business, y los mensajes enviados desde la app llegan a tu sistema como eventos de eco; puedes usarlos para marcar la conversaci\u00f3n como <code>humano<\/code> autom\u00e1ticamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cu\u00e1nto cuesta: Meta + OpenAI<\/h2>\n\n\n\n<p>Son dos cuentas separadas.<\/p>\n\n\n\n<p><strong>WhatsApp (Meta).<\/strong> Las respuestas del bot dentro de la ventana son mensajes de servicio. Desde el 1 de octubre de 2026, cada n\u00famero tiene 1.000 mensajes de servicio gratis al mes, y el cobro empieza en el 1.001. Para destinatarios en Brasil, la tarifa de servicio es de R$ 0,0350 (reales) por mensaje entregado, seg\u00fan la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">p\u00e1gina de precios de Meta<\/a>; los dem\u00e1s pa\u00edses tienen sus tarifas en la misma p\u00e1gina. Las plantillas se cobran seg\u00fan la tarifa de su categor\u00eda, dentro o fuera de la ventana (en Brasil, marketing R$ 0,3217; utilidad y autenticaci\u00f3n R$ 0,0350); desde el 1 de octubre de 2026, eso incluye las plantillas de utilidad enviadas dentro de la ventana.<\/p>\n\n\n\n<p><strong>OpenAI.<\/strong> Se cobra por tokens de entrada y de salida, con un precio que depende del modelo. Consulta la p\u00e1gina de precios de OpenAI antes de estimar.<\/p>\n\n\n\n<p>Tres ajustes bajan las dos cuentas a la vez:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Una respuesta por pregunta.<\/strong> Tres mensajes cortos cuentan como tres mensajes de servicio despu\u00e9s de la franquicia. Pide al modelo una sola respuesta.<\/li>\n\n\n<li><strong>Historial corto.<\/strong> Cada mensaje antiguo enviado en <code>input<\/code> se cobra otra vez como token de entrada. Mant\u00e9n los \u00faltimos turnos y, si hace falta, un resumen.<\/li>\n\n\n<li><strong><code>max_output_tokens<\/code>.<\/strong> Limita el largo de la respuesta y evita textos largos que nadie lee en el celular.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 permite Meta: un &#8220;ChatGPT de uso general&#8221; es otro caso<\/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>, actualizados el 23\/09\/2026, tratan de los &#8220;Proveedores de IA&#8221; en la secci\u00f3n 4.7: proveedores y desarrolladores de tecnolog\u00edas de IA o aprendizaje autom\u00e1tico, como grandes modelos de lenguaje, plataformas de IA generativa y asistentes de IA de uso general. Tienen prohibido usar la plataforma para ofrecer esas tecnolog\u00edas cuando son la funcionalidad principal, y no incidental o auxiliar, a criterio de Meta. Los t\u00e9rminos prev\u00e9n excepciones para determinados pa\u00edses.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Escenario<\/th><th>Lectura de los t\u00e9rminos<\/th><\/tr><\/thead><tbody><tr><td>Una tienda usa un modelo de OpenAI para responder dudas sobre pedidos<\/td><td>IA como apoyo a la atenci\u00f3n de la empresa; no es el caso al que apunta la cl\u00e1usula<\/td><\/tr><tr><td>Una cl\u00ednica usa IA para agendar y confirmar citas<\/td><td>Igual: la IA es herramienta del servicio, no el producto<\/td><\/tr><tr><td>Una empresa ofrece &#8220;conversa con una IA sobre cualquier tema&#8221; en WhatsApp<\/td><td>Es el caso de Proveedor de IA; depende de las reglas por pa\u00eds<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Brasil es uno de esos pa\u00edses. 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>, actualizada el 15\/10\/2026, indica que desde el 11\/03\/2026 los Proveedores de IA pueden enviar mensajes de servicio a usuarios con n\u00famero +55, con tarifa propia, siempre en respuesta al usuario (la ventana de atenci\u00f3n sigue vigente). En esos mensajes, el webhook de estado trae la categor\u00eda <code>general_purpose_ai<\/code>. La misma p\u00e1gina lista otros mercados y fechas. La regla aplica solo a Proveedores de IA; el precio para las dem\u00e1s empresas no cambia.<\/p>\n\n\n\n<p>Los t\u00e9rminos tambi\u00e9n proh\u00edben usar datos de la plataforma para crear, entrenar o mejorar modelos de IA, con una excepci\u00f3n para ajustar un modelo de uso exclusivo de la empresa que no sirva para otros modelos. En la pr\u00e1ctica: revisa c\u00f3mo tu proveedor de IA trata la retenci\u00f3n y el entrenamiento, y no reutilices conversaciones de WhatsApp para entrenar modelos de terceros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo hacerlo con Vectalk<\/h2>\n\n\n\n<p>Vectalk es un proxy de la Cloud API oficial: tu bot recibe los mismos webhooks de Meta y env\u00eda con los mismos payloads, cambiando solo la URL base y el token. En el c\u00f3digo de arriba, eso es la constante <code>URL_ENVIO<\/code> y el <code>VECTALK_TOKEN<\/code>. Registras la URL del bot con <code>POST \/api\/webhooks<\/code> y puedes dar de alta m\u00e1s de una URL por instancia, por ejemplo una para el bot y otra para tu sistema de atenci\u00f3n. No registras tarjeta en Meta: cada mensaje entregado se descuenta del saldo prepago de tu cuenta Vectalk, y la coexistencia deja que tu equipo responda desde la app cuando el bot traspasa la conversaci\u00f3n. Empieza 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\/quickstart\">gu\u00eda r\u00e1pida<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfNecesito autorizaci\u00f3n de Meta para usar ChatGPT en WhatsApp?<\/h3>\n\n\n\n<p>Para un bot de atenci\u00f3n de tu propia empresa, la documentaci\u00f3n consultada no describe un registro adicional: usas la API oficial normalmente. Si tu producto es un asistente de IA de uso general, lee la secci\u00f3n 4.7 de los t\u00e9rminos y la p\u00e1gina de Proveedores de IA antes de lanzar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo usar la app de ChatGPT o un &#8220;ChatGPT para WhatsApp&#8221; listo?<\/h3>\n\n\n\n<p>Este tutorial usa la API de OpenAI en tu servidor, conectada a la API oficial de WhatsApp. Las herramientas que conectan WhatsApp escaneando un c\u00f3digo QR usan canales no oficiales, con riesgo de bloqueo; consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/api-oficial-vs-api-no-oficial-whatsapp\/\">API oficial vs. API no oficial de WhatsApp<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEl bot puede enviar el primer mensaje?<\/h3>\n\n\n\n<p>No con texto generado por el modelo. Para iniciar o retomar el contacto fuera de la ventana de 24 horas, necesitas una plantilla aprobada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo hago que ChatGPT responda audios?<\/h3>\n\n\n\n<p>El webhook entrega el ID del archivo multimedia. Lo descargas con la API de medios, lo transcribes con el servicio que prefieras y env\u00edas el texto al modelo. La descarga est\u00e1 en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/\">c\u00f3mo descargar los archivos que env\u00eda el cliente<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfResponses API o Chat Completions?<\/h3>\n\n\n\n<p>Las dos funcionan con WhatsApp, porque la integraci\u00f3n es solo HTTP. OpenAI recomienda la Responses API para aplicaciones nuevas, y es la que usa el ejemplo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fuentes oficiales consultadas el 28\/10\/2026:<\/strong> <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/text\" target=\"_blank\" rel=\"noreferrer noopener\">OpenAI: generaci\u00f3n de texto<\/a>, <a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/conversation-state\" target=\"_blank\" rel=\"noreferrer noopener\">OpenAI: estado de la conversaci\u00f3n<\/a>, <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 Mensajer\u00eda de WhatsApp Business<\/a> (actualizada el 23\/09\/2026), <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\/typing-indicators\" target=\"_blank\" rel=\"noreferrer noopener\">Indicadores de escritura<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/concepts\/webhooks\">Vectalk: webhooks<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send\">Vectalk: env\u00edo de mensajes<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tutorial en Node.js para unir el webhook de la API oficial de WhatsApp con la Responses API de OpenAI, con historial por contacto, ventana de 24 h y traspaso.<\/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-548","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>ChatGPT en la API oficial de WhatsApp: tutorial | Vectalk<\/title>\n<meta name=\"description\" content=\"Conecta ChatGPT a la API de WhatsApp oficial: webhook, Responses API de OpenAI, historial por contacto, ventana de 24 h, traspaso humano y reglas de Meta.\" \/>\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\/chatgpt-api-oficial-whatsapp-es\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ChatGPT en la API oficial de WhatsApp: tutorial | Vectalk\" \/>\n<meta property=\"og:description\" content=\"Conecta ChatGPT a la API de WhatsApp oficial: webhook, Responses API de OpenAI, historial por contacto, ventana de 24 h, traspaso humano y reglas de Meta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-28T16:07:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-28T16:07:46+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=\"15 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\\\/chatgpt-api-oficial-whatsapp-es\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatgpt-api-oficial-whatsapp-es\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"C\u00f3mo conectar ChatGPT a la API oficial de WhatsApp (tutorial con c\u00f3digo)\",\"datePublished\":\"2026-10-28T16:07:36+00:00\",\"dateModified\":\"2026-10-28T16:07:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatgpt-api-oficial-whatsapp-es\\\/\"},\"wordCount\":2373,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatgpt-api-oficial-whatsapp-es\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatgpt-api-oficial-whatsapp-es\\\/\",\"name\":\"ChatGPT en la API oficial de WhatsApp: tutorial | Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-28T16:07:36+00:00\",\"dateModified\":\"2026-10-28T16:07:46+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Conecta ChatGPT a la API de WhatsApp oficial: webhook, Responses API de OpenAI, historial por contacto, ventana de 24 h, traspaso humano y reglas de Meta.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatgpt-api-oficial-whatsapp-es\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatgpt-api-oficial-whatsapp-es\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/chatgpt-api-oficial-whatsapp-es\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo conectar ChatGPT a la API oficial de WhatsApp (tutorial con 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":"ChatGPT en la API oficial de WhatsApp: tutorial | Vectalk","description":"Conecta ChatGPT a la API de WhatsApp oficial: webhook, Responses API de OpenAI, historial por contacto, ventana de 24 h, traspaso humano y reglas de Meta.","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\/chatgpt-api-oficial-whatsapp-es\/","og_locale":"en_US","og_type":"article","og_title":"ChatGPT en la API oficial de WhatsApp: tutorial | Vectalk","og_description":"Conecta ChatGPT a la API de WhatsApp oficial: webhook, Responses API de OpenAI, historial por contacto, ventana de 24 h, traspaso humano y reglas de Meta.","og_url":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-28T16:07:36+00:00","article_modified_time":"2026-10-28T16:07:46+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"C\u00f3mo conectar ChatGPT a la API oficial de WhatsApp (tutorial con c\u00f3digo)","datePublished":"2026-10-28T16:07:36+00:00","dateModified":"2026-10-28T16:07:46+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/"},"wordCount":2373,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/","url":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/","name":"ChatGPT en la API oficial de WhatsApp: tutorial | Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-28T16:07:36+00:00","dateModified":"2026-10-28T16:07:46+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Conecta ChatGPT a la API de WhatsApp oficial: webhook, Responses API de OpenAI, historial por contacto, ventana de 24 h, traspaso humano y reglas de Meta.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/es\/chatgpt-api-oficial-whatsapp-es\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo conectar ChatGPT a la API oficial de WhatsApp (tutorial con 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\/548","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=548"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/548\/revisions"}],"predecessor-version":[{"id":551,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/548\/revisions\/551"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}