# Cómo enviar datos de un Chat Funnel a Google Sheets sin Make, N8n ni Zapier

Si usas Chat Funnels y quieres guardar las respuestas de tus usuarios en una hoja de Google directamente, sin pagar por herramientas intermedias como Make o Zapier, esto es para ti.

Con **Google Apps Script** puedes publicar un endpoint que recibe el webhook de Chat Funnels y escribe los datos en tu spreadsheet automáticamente. **Gratis, sin intermediarios y en menos de 15 minutos**.

---

## Lo que vas a conseguir

```
Chat Funnels →  Google Sheets ✅
```

Cada vez que un usuario complete tu funnel, sus respuestas aparecerán automáticamente como una nueva fila en tu hoja de cálculo.

---

## Paso 1 — Prepara tu Google Spreadsheet

1. Ve a [sheets.google.com](https://sheets.google.com) y crea una hoja nueva
2. En la primera fila escribe los encabezados de tus columnas según los datos que quieras guardar. Por ejemplo:

```
A1: Nombre  |  B1: Respuesta  |  C1: Fecha y hora  |  D1: IdiomaLenguaje del código: HTTP (http)
```

---

## Paso 2 — Abre Google Apps Script

1. En el menú superior de tu hoja ve a **Extensiones → Apps Script**
2. Se abrirá el editor de código en una nueva pestaña

---

## Paso 3 — Escribe el script

Borra todo el contenido del editor y pega este código:

```
function doPost(e) {
  try {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja 1');
    const data = JSON.parse(e.postData.contents);

    sheet.appendRow([
      data.name,
      data.question,
      data.date + ' ' + data.time,
      data.lang
    ]);

    return ContentService
      .createTextOutput(JSON.stringify({ status: 'ok' }))
      .setMimeType(ContentService.MimeType.JSON);

  } catch (error) {
    return ContentService
      .createTextOutput(JSON.stringify({ status: 'error', mensaje: error.toString() }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}
```

```
function doPost(e) {
  try {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hoja 1');
    const data = JSON.parse(e.postData.contents);

    sheet.appendRow([
      data.name,
      data.question,
      data.date + ' ' + data.time,
      data.lang
    ]);

    return ContentService
      .createTextOutput(JSON.stringify({ status: 'ok' }))
      .setMimeType(ContentService.MimeType.JSON);

  } catch (error) {
    return ContentService
      .createTextOutput(JSON.stringify({ status: 'error', mensaje: error.toString() }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}
```

> **Nota:** Los campos `<strong>payload.data.name</strong>`, `<strong>payload.data.question</strong>`, etc. corresponden a la estructura del payload que envía Chat Funnels. Ajusta los nombres según los campos de tu propio funnel.
> 
> ![CleanShot 2026 03 06 at 18.11.59](https://docs.join.chat/app/uploads/2026/03/cleanshot-2026-03-06-at-18.11.59.png)

Guarda el proyecto con **Ctrl+S** y ponle un nombre, por ejemplo: `Webhook Receptor`.

---

## Paso 4 — Publica el script como Web App

Este es el paso más importante: conviertes tu script en un endpoint HTTP público al que Chat Funnels podrá llamar.

![CleanShot 2026 03 06 at 18.03.29](https://docs.join.chat/app/uploads/2026/03/cleanshot-2026-03-06-at-18.03.29-1024x566.png)1. Haz clic en **Implementar → Nueva implementación**
2. Haz clic en el engranaje ⚙️ y selecciona **Aplicación web**
    ![CleanShot 2026 03 06 at 18.04.31](https://docs.join.chat/app/uploads/2026/03/cleanshot-2026-03-06-at-18.04.31.png)
3. Configura así:

- **Descripción:** Por ejemplo V1
- **Ejecutar como:** Tu cuenta de Google
- **Quién tiene acceso:** Cualquier usuario

![CleanShot 2026 03 06 at 18.07.46](https://docs.join.chat/app/uploads/2026/03/cleanshot-2026-03-06-at-18.07.46.png)1. Haz clic en **Implementar**
2. Autoriza los permisos que te solicite Google

> Si aparece la advertencia "Google no ha verificado esta app", haz clic en **Configuración avanzada** y luego en "Ir a \[nombre del proyecto\]". Es tu propio script, es seguro.

Al finalizar obtendrás una URL con este formato:

```
https://script.google.com/macros/s/XXXXXXXXXXXXXXX/execLenguaje del código: JavaScript (javascript)
```

**Copia esa URL — es tu endpoint de webhook.**

---

## Paso 5 — Configura el webhook en Chat Funnels

En el paso del funnel donde quieres capturar los datos, añade un bloque de tipo **Webhook** y configúralo así:

- **URL del endpoint:** la URL que copiaste en el paso anterior
- **Método:** POST
- **Formato:** JSON
- **Cliente:** Sevidor
- **Datos enviados:** selecciona los campos de tu funnel que quieras guardar

![CleanShot 2026 03 06 at 17.51.42](https://docs.join.chat/app/uploads/2026/03/cleanshot-2026-03-06-at-17.51.42.png)En el ejemplo de la captura: `{{name}}` y `{{question}}` son variables del funnel, y además se añaden la fecha `{{date}}`, hora `{{time}}` e idioma del usuario `{{lang}}` como campos del sistema.

---

## ⚠️ Cosas importantes a recordar

**Cada vez que modifiques el script** debes publicar una nueva versión, si no los cambios no tendrán efecto:

> Implementar → Gestionar implementaciones → ✏️ editar → Nueva versión → Implementar

**El error 400 en el log de Chat Funnels es normal.** Google redirige la respuesta del endpoint y Chat Funnels puede interpretarlo como error, pero los datos se escriben correctamente en la hoja. No afecta al funcionamiento.

---

## Resultado final

Cada vez que un usuario complete el funnel, aparecerá automáticamente una nueva fila en tu Google Sheets con todos sus datos, sin pasar por ninguna herramienta de automatización externa.

**Gratis. Sin límites de ejecuciones. Sin configuración adicional.**