Cómo conectar n8n con ChatGPT y Google Sheets paso a paso

Tienes una hoja de cálculo con cientos de comentarios de clientes y ninguna hora libre para leerlos uno por uno. En esta guía vas a conectar n8n con ChatGPT y Google Sheets para que cada fila nueva se clasifique sola y el resultado aparezca en las columnas de al lado, sin copiar y pegar nada.
El resultado es un workflow de cuatro nodos que lee una fila, le pide a un modelo de OpenAI que la analice y escribe la respuesta en la misma hoja. Es un patrón básico de AI Automation y sirve de base para traducir textos, limpiar datos o generar descripciones. Vamos a recorrer el proceso completo: credenciales, configuración de cada nodo, pruebas y errores frecuentes.
Qué necesitas para conectar n8n con ChatGPT y Google Sheets
El caso que vamos a construir es un análisis de feedback. Cada vez que alguien agrega una fila con un comentario, el workflow lo envía a un modelo de OpenAI, recibe el sentimiento, la categoría y un resumen breve, y completa esas tres columnas en la misma fila. El flujo siempre es el mismo: Google Sheets Trigger, nodo de OpenAI, nodo Edit Fields y un nodo de Google Sheets que actualiza la fila.
Antes de empezar necesitas tres cosas. La primera es una cuenta de n8n, ya sea n8n Cloud o una instancia propia: el nodo de OpenAI que usamos aquí es la versión 2, disponible desde n8n 1.117.0 según la documentación oficial. La segunda es una cuenta de Google con acceso a Google Sheets. La tercera es una API key de OpenAI. La API se factura por uso y es independiente de tu suscripción a ChatGPT, así que tendrás que agregar un método de pago o saldo en la plataforma de desarrolladores.
Crea una hoja con estas columnas en la primera fila, que n8n trata como encabezado:
|
Columna |
Quién la completa |
Ejemplo |
|
id |
Tú, con un valor único por fila |
101 |
|
cliente |
Tú |
Camila |
|
comentario |
Tú |
El producto es bueno, pero tardó 12 días en llegar. |
|
sentimiento |
El workflow |
negativo |
|
categoria |
El workflow |
envio |
|
resumen |
El workflow |
Entrega demorada de 12 días |
La columna id es clave: más adelante n8n la usará para saber qué fila actualizar. Si dos filas comparten el mismo id, el resultado puede terminar escrito en la fila equivocada, así que conviene que cada valor sea único.
Paso 1: crea las credenciales de Google Sheets y OpenAI
Las credenciales se crean una sola vez desde n8n y después se reutilizan en cualquier workflow.
Credencial de Google Sheets
Agrega un nodo de Google Sheets, abre el campo Credential to connect with y elige Create new credential. En n8n Cloud, la documentación indica que puedes autenticarte directamente con el botón Sign in with Google. Si usas una instancia propia, necesitas tu propia app de OAuth: crea un proyecto en Google Cloud Console, habilita Google Sheets API (conviene habilitar también Google Drive API para listar tus documentos), configura la pantalla de consentimiento y crea un OAuth client ID. Luego copia la OAuth Redirect URL que muestra n8n en el campo Authorized redirect URIs de Google, pega el Client ID y el Client Secret en n8n y pulsa Sign in with Google.
Credencial de OpenAI
En la plataforma de desarrolladores de OpenAI crea una API key desde la sección API keys. En n8n entra a Credentials, elige New, busca OpenAI y pega la clave en el campo API Key. Trata esa clave como una contraseña: no la pegues en una celda de la hoja ni en un chat, y si se filtra, bórrala y genera otra. Si usas n8n Cloud, la documentación del nodo menciona además la opción Use Gateway credits, que permite ejecutar el nodo sin una cuenta propia de OpenAI.
Paso 2: configura el Google Sheets Trigger y el nodo de OpenAI
Crea un workflow nuevo y agrega Google Sheets Trigger como primer nodo. Selecciona tu credencial, define en Poll Times cada cuánto revisará n8n la hoja (Every Minute es útil mientras pruebas), elige Row Added en Trigger On y selecciona tu documento y la pestaña de feedback. El trigger funciona por polling: no avisa al instante, sino que consulta la hoja cada cierto tiempo. Pulsa Fetch Test Event para traer una fila de ejemplo.
Evita las opciones Row Updated y Row Added or Updated. Al final del flujo el propio workflow modifica la fila, y con esos eventos se volvería a disparar en bucle.
Ahora conecta un nodo OpenAI. Selecciona Text como Resource y Generate a Model Response como Operation. Desde la versión 1.117.0, esta operación usa la Responses API de OpenAI, y la operación que antes se llamaba Message a Model pasó a llamarse Generate a Chat Completion; si tu versión es anterior, verás el nombre antiguo. Elige un modelo pequeño y económico de la lista (para clasificar texto no necesitas el más grande), baja el Temperature para obtener respuestas consistentes y en Output Format selecciona JSON Object. Después crea dos mensajes: uno con rol System que define la tarea, y otro con rol User que contiene el comentario. Este es el mensaje System:
|
text Eres un analista de experiencia del cliente. Lee el comentario que te envío y responde SOLO con un objeto JSON con estas claves: - "sentimiento": "positivo", "neutro" o "negativo" - "categoria": una de "envio", "atencion", "producto", "precio" u "otro" - "resumen": el problema o el elogio principal, en máximo 12 palabras No agregues explicaciones ni texto fuera del JSON. |
Y este el mensaje User, que usa una expresión para insertar el comentario de cada fila:
|
text {{ $json.comentario }} |
Pulsa Execute step y revisa la pestaña Output. Deberías ver una respuesta como esta:
|
json { "sentimiento": "negativo", "categoria": "envio", "resumen": "El pedido llegó con 12 días de retraso" } |
Paso 3: escribe la respuesta de ChatGPT en tu hoja de cálculo
El nodo de OpenAI devuelve la respuesta del modelo, pero Google Sheets necesita un valor por columna. Agrega un nodo Edit Fields y crea cuatro campos: id, sentimiento, categoria y resumen. El id no sale del modelo: se recupera del trigger con una expresión, para que el resultado se asocie a la fila correcta. Los otros tres salen de la respuesta del modelo.
|
javascript // id: viene del trigger, para saber qué fila actualizar {{ $('Google Sheets Trigger').item.json.id }}
// sentimiento: ruta de ejemplo, confírmala en la pestaña Output {{ JSON.parse($json.output[0].content[0].text).sentimiento }}
// categoria y resumen: misma ruta, cambia solo la clave final {{ JSON.parse($json.output[0].content[0].text).categoria }} {{ JSON.parse($json.output[0].content[0].text).resumen }} |
La ruta que lleva al texto de la respuesta cambia según la versión del nodo y la operación elegida, así que no la copies a ciegas: arrastra el campo desde la pestaña Output al editor de expresiones y n8n escribirá la ruta correcta. Si el campo llega como texto, envuélvelo con JSON.parse(); si llega ya como objeto, usa directamente sus claves.
Cierra con un segundo nodo de Google Sheets. Elige Update Row como Operation, selecciona el mismo documento y la misma pestaña, y usa Map Each Column Manually. En Column to Match On elige id: n8n buscará la fila con ese valor y actualizará solo las columnas que mapees. Completa sentimiento, categoria y resumen con los campos de Edit Fields. Si dejas vacío Column to Match On, n8n muestra un error indicando que ese parámetro es obligatorio.
Cómo probar, publicar y resolver los errores más comunes
Agrega una fila de prueba con un id único y un comentario, ejecuta el workflow completo con Execute workflow y confirma que las tres columnas se completan. Cuando funcione, pulsa Publish para ponerlo en producción: en n8n 2.0, el antiguo interruptor Activate dio paso al botón Publish, y mientras no lo publiques el workflow no se ejecuta solo. Ya publicado, cada fila que agregues se procesará en el siguiente ciclo de polling.
Cuando agregues muchas filas a la vez, n8n ejecuta el nodo de OpenAI una vez por cada fila, y OpenAI aplica límites de uso por minuto. Si aparecen errores de límite, activa Retry On Fail en la pestaña Settings del nodo, o procesa las filas por lotes con Loop Over Items y un nodo Wait, como propone la guía de n8n sobre límites de tasa. Estos son los errores que más aparecen:
|
Error |
Causa probable |
Cómo resolverlo |
|
Error 429 de OpenAI (insufficient_quota o límite de uso) |
La cuenta de API no tiene saldo o superaste el límite de uso |
Revisa el saldo y los límites en la plataforma de OpenAI y reduce el ritmo con lotes y Wait |
|
redirect_uri_mismatch o app no autorizada en Google |
La Redirect URI de n8n no coincide con la registrada en Google Cloud |
Copia la URL exacta desde la credencial de n8n a Authorized redirect URIs y reconecta la cuenta |
|
The 'Column to Match On' parameter is required |
El nodo Update Row no sabe con qué columna buscar la fila |
Selecciona id en Column to Match On |
|
Campos vacíos o undefined en Edit Fields |
La ruta de la expresión no coincide con la salida del nodo de OpenAI |
Arrastra el campo desde la pestaña Output y revisa si necesita JSON.parse() |
|
Se actualiza la fila equivocada |
Hay valores de id repetidos en la hoja |
Usa un identificador único por fila |
Qué puedes automatizar a partir de este patrón
Cambia el prompt y el mismo workflow sirve para traducir textos, estandarizar nombres y direcciones, extraer datos de un mensaje o redactar descripciones de producto a partir de sus especificaciones. Lo que cambia es la instrucción y las columnas de salida; la estructura de trigger, modelo y escritura se mantiene.
Antes de enviar datos reales de clientes o de tu empresa, revisa qué información sale de tu hoja. OpenAI indica que, por defecto, los datos enviados a su API no se usan para entrenar sus modelos, aunque pueden conservarse hasta 30 días para monitoreo de abuso; consulta además la política de tu empresa. Y revisa una muestra de las clasificaciones: la AI acelera el trabajo, pero el criterio sobre qué categorías usar y qué errores son aceptables sigue siendo tuyo.
Armar workflows como este, con n8n, integraciones y AI aplicada a casos reales, es parte del trabajo en AI Automation, y un proyecto propio como este puede ser una buena pieza para tu portafolio. Si quieres dominar la automatización de procesos con AI aplicada al mercado actual, conoce nuestra Carrera de AI Automation.