> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://ajuda.greatsoftwares.com.br/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Cómo INTEGRAR VÍA WEBHOOK con Google Sheets

| IMPORTANTE: Google está limitando algunas funciones dentro de las cuentas básicas de Google. Para integrar con Google Sheets, necesitas tener una cuenta GSuite.

1. Accede a la página inicial de **Google Sheets** y crea una nueva hoja de cálculo en blanco:

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/capturarpng_ud072e.png)

2. En la primera pestaña, ingresa los nombres de cada campo que se completará en el formulario de tu landing page, uno por columna (como en el ejemplo de abajo):

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/capturar2png_1157ghe.png)

3. Después de eso, accede al menú **"Tools > Script Editor"** (o **"Herramientas > Editor de secuencias de comandos"**, si el idioma está en español).

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/capturar3png_1ib3q2w.png)

4. Después de acceder al área de scripts, verás una pantalla como la de la imagen de abajo. Ahí, ponle un nombre a tu proyecto donde dice **"Untitled project"** o **"Proyecto sin título"**. Puedes llamarlo **"API GreatPages"**.

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/projetopng_3m2cvs.png)

5. Enseguida, selecciona todo el contenido y reemplázalo por el código de abajo:

```
// Link de compartilhamento do Google Sheets
var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/';

function doPost(e) {
  var values = getValues(e);

  if (SPREADSHEET_URL) {
    handleSpreadsheet(values, SPREADSHEET_URL);
  }

  return ContentService.createTextOutput('OK');
}

function getValues(e) {
  var values = JSON.parse(e.postData.contents);
  var answers = values["answers"];
  if (typeof answers === "object") {
    Object.keys(answers)
      .forEach(function(answerLabel) {
        var answer = answers[answerLabel];
        values[answerLabel] = answer != null ? answer.toString() : answer;
      });
    delete values["answers"];
  }
  values['received_at'] = new Date();
  return values;
}

function handleSpreadsheet(values, spreadsheetUrl) {
  var ss = SpreadsheetApp.openByUrl(spreadsheetUrl);
  var sheet = ss.getSheets()[0];
  var headerMap = getExistingKeyColMap(sheet);
  updateKeyColMap(sheet, headerMap, values);
  writeValuesWithHeaderMap(sheet, headerMap, values);
}


function getExistingKeyColMap(sheet) {
  var map = {};
  sheet.getRange('1:1').getValues()[0].forEach(function(value, colIndex){
    if (value.trim().length) {
      map[value] = colIndex + 1;
    }
  });
  return map;
}


function updateKeyColMap(sheet, headerMap, values) {
  var maxColIndex = 0;
  Object.keys(headerMap).forEach(function(key) {
    maxColIndex = Math.max(maxColIndex, headerMap[key]);
  });

  Object.keys(values).forEach(function(valueKey) {
    if (headerMap[valueKey] !== undefined) {
      return;
    }

    // The values object has a key we haven't seen before.
    maxColIndex += 1;
    sheet.getRange(1, maxColIndex).setValue(valueKey);
    headerMap[valueKey] = maxColIndex;
  });
  sheet.setFrozenRows(1);

  var headerRow = sheet.getRange("1:1");
  headerRow.setFontWeight("bold");
}

function writeValuesWithHeaderMap(sheet, headerMap, values) {
  const rowIndex = sheet.getLastRow() + 1;
  Object.keys(values).forEach(function(key) {
    const colIndex = headerMap[key];
    sheet.getRange(rowIndex, colIndex).setValue(values[key]);
  });
}

function test() {
  doPost({
    postData: {
      type: "application/json",
      contents: '{ "hello": "world" }',
    }
  })
}
```

5. En la segunda línea donde está -> https://docs.google.com/spreadsheets, vas a reemplazarlo por el enlace de tu hoja de cálculo de Google;

||| El enlace de tu hoja de cálculo de Google necesita estar habilitado para el acceso (público);

6. Guarda el script haciendo clic en el ícono de **"Guardar"**;

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/salvarpng_1f9p1a8.png)

7. Después de eso, haz clic en **"Implementar"** y en el menú que se abrirá haz clic en **"Nueva implementación"**;

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/implantarpng_5p99pi.png)

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/nova-implantacaopng_121c8ph.png)

8. En la siguiente pantalla que se abrirá, haz clic en el ícono de engranaje y enseguida haz clic en **"Aplicación web"**;

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/configuracaopng_2tids2.png)

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/app-da-webpng_5jle03.png)

9. Después de eso, se abrirá un espacio en la pantalla donde tendrás que agregar una descripción de la integración, seleccionar la cuenta de Gmail y por último seleccionar la opción "Cualquier persona", como en el ejemplo de abajo;

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/configpng_108s6gi.png)

10. Después de hacer clic en **"Implementar"**, aparecerá en la siguiente pantalla el botón **"Autorizar acceso"**, que es donde deberás hacer clic;

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/autorizar-acessopng_106ip4p.png)

11. Enseguida se te preguntará sobre algunos permisos. Elige una cuenta de Google y sigue el proceso;

12. Cuando finalices los permisos, se generará la URL de integración, que deberás copiar y guardar para implementarla en GreatPages;

![](https://storage.crisp.chat/users/helpdesk/website/a6ab90d8350d6000/urlpng_txs1nb.png)

13. Inicia sesión en GreatPages y accede a la configuración del formulario (haz clic en el formulario y enseguida haz clic en **"Editar"**);

![](https://storage.crisp.chat/users/helpdesk/website/-/a/6/a/b/a6ab90d8350d6000/editar-form_634ht2.png)

14. Ve a **"Configurar",** en la sección Integração haz clic en **"Adicionar integração";**

![](https://storage.crisp.chat/users/helpdesk/website/-/a/6/a/b/a6ab90d8350d6000/configurar-para-webhook_1340x87.png)

15. Selecciona la opción **“Webhook”**;

![](https://storage.crisp.chat/users/helpdesk/website/-/a/6/a/b/a6ab90d8350d6000/webhook_1ubr9u2.png =709xauto)

16. En la siguiente pantalla necesitarás pegar el enlace que fue generado en Google Sheets en **“URL da integração”**, y seleccionar la opción **“POST+JSON”**. Por último, continúa haciendo clic en **“Continuar”** *(no es necesario completar el campo “token”)*.

![](https://storage.crisp.chat/users/helpdesk/website/-/a/6/a/b/a6ab90d8350d6000/webhook-url_1694wwe.png)

17. En la pantalla **“Configurar campos”** necesitarás configurar las variables de los campos. Ellas necesitan ser **exactamente iguales** a las variables que configuraste en la hoja de cálculo.

Por último, ¡haz clic en Salvar! Tu integración está lista. :)  

¿Te quedó alguna duda? ¡Habla con nuestro equipo en el Chat! Siempre estamos listos para ayudarte. <3  