> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Integración de Google Sheets con Event Streams

> Esta guía ilustra los pasos necesarios para configurar una conexión entre los Event Webhooks de OneSignal y un documento personalizado de Google Sheets para analizar eventos de mensajes generados por OneSignal.

## Activar event streams

Habilita [Event streams](./event-streams), una función complementaria de un plan de pago, para tu aplicación de OneSignal. Si no tienes acceso a esta función, no dudes en contactar a tu Success Manager o Account Executive para más información.

## Crear un despliegue de apps script

Navega a **Extensions > Apps Script** en la Hoja de Google a la que deseas agregar eventos de mensajes de OneSignal. A continuación, dentro del editor de código, reemplaza el código existente con lo siguiente:

<Frame>
  <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7c26b5c-image5.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=cd1cd9169236a23d8b06148e2e7943c6" width="898" height="315" data-path="images/docs/7c26b5c-image5.png" />
</Frame>

<CodeGroup>
  ```javascript javascript theme={null}
  function doPost(e) {
      // Log the full request for debugging purposes
    Logger.log("Request received: " + JSON.stringify(e));

    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    let jsonData;

    try {
      // Log the postData.contents before parsing
      Logger.log("Post Data Contents: " + e.postData.contents);

      // Attempt to parse the JSON data
      jsonData = JSON.parse(e.postData.contents);
    } catch (error) {
      // Log the error and return an error response
      Logger.log("Failed to parse JSON: " + error);
      return ContentService.createTextOutput(
        JSON.stringify({ status: "error", message: "Invalid JSON" }),
      ).setMimeType(ContentService.MimeType.JSON);
    }

    // Check if the sheet is empty and set headers if necessary
    if (sheet.getLastRow() === 0) {
      sheet.appendRow([
        "User ID",
        "Event ID",
        "Event",
        "Message ID",
        "Message Name",
        "Message Title",
        "Message Contents",
        "Template ID",
        "Subscription ID",
        "Subscription Device Type",
        "Source",
        "Original Timestamp",
      ]);
    }

    // Prepare the row data from the JSON object
    const row = [
      jsonData.user_id || "",
      jsonData.event_id || "",
      jsonData.event || "",
      jsonData.properties ? jsonData.properties.message_id || "" : "",
      jsonData.properties ? jsonData.properties.message_name || "" : "",
      jsonData.properties ? jsonData.properties.message_title || "" : "",
      jsonData.properties ? jsonData.properties.message_contents || "" : "",
      jsonData.properties ? jsonData.properties.template_id || "" : "",
      jsonData.properties ? jsonData.properties.subscription_id || "" : "",
      jsonData.properties
        ? jsonData.properties.subscription_device_type || ""
        : "",
      jsonData.properties ? jsonData.properties.source || "" : "",
      jsonData.originalTimestamp || "",
    ];

    try {
      // Append the new row to the sheet
      sheet.appendRow(row);
    } catch (error) {
      // Log the error if appending the row fails
      Logger.log("Failed to append row: " + error);
      return ContentService.createTextOutput(
        JSON.stringify({ status: "error", message: "Failed to append row" }),
      ).setMimeType(ContentService.MimeType.JSON);
    }

    // Return a success response
    return ContentService.createTextOutput(
      JSON.stringify({ status: "success" }),
    ).setMimeType(ContentService.MimeType.JSON);
  }
  ```
</CodeGroup>

A continuación, despliega tu proyecto. Haz clic en Deploy en la parte superior derecha y selecciona "Web App" como el tipo de despliegue. Proporciona una descripción y elige quién puede acceder al proyecto; seleccionaremos "Anyone" para generar la URL necesaria en el siguiente paso.

<Frame>
  <img src="https://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/bd7ac47-image3.png?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=2922ca6a7bcabac841936775ae76bd13" width="770" height="450" data-path="images/docs/bd7ac47-image3.png" />
</Frame>

## Crear el event stream

<Steps>
  <Step>
    Desde el dashboard de OneSignal, navega a **Settings > Event Streams (sujeto a función complementaria)**. Desde allí, crea un nuevo event stream y selecciona "Trigger when any of the following events occur". Elige los eventos de mensajes que te gustaría sincronizar en la ventana emergente con Google Sheets. En el ejemplo a continuación, capturamos todos los eventos de Push Notification.

    <Frame>
      <img src="https://mintcdn.com/onesignal/6tscVAtiSqz353kV/images/docs/9d0a4f6662d11217650e230f085b44d96110075c5f52db6f6dc48402e90c8831-Screenshot_2024-10-24_at_3.46.54_PM.png?fit=max&auto=format&n=6tscVAtiSqz353kV&q=85&s=a7b7b34db5a782a82139f547970dc521" width="1122" height="650" data-path="images/docs/9d0a4f6662d11217650e230f085b44d96110075c5f52db6f6dc48402e90c8831-Screenshot_2024-10-24_at_3.46.54_PM.png" />
    </Frame>
  </Step>

  <Step>
    A continuación, en el paso de configuración, elige POST, pega la URL del paso anterior y crea un encabezado para aceptar el JSON.

    <Frame>
      <img src="https://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/dcf540d-image1.png?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=2d5d107ddf7b46c76f5a2c25791b404a" width="959" height="385" data-path="images/docs/dcf540d-image1.png" />
    </Frame>
  </Step>

  <Step>
    Después de esto, selecciona "Custom Body" en el menú desplegable del Paso 3 y copia/pega el siguiente código. Puedes cambiar las propiedades y eventos que deseas sincronizar, como se muestra en el ejemplo a continuación. Para más información sobre las propiedades de eventos de event stream, visita nuestra [documentación](./event-streams#personalization)

    <CodeGroup>
      ```json json theme={null}
      {
        "user_id": "{{ event.external_user_id }}",
        "event_id": "{{ event.id }}",
        "event": "{{ event.kind }}",
        "properties": {
          "message_id": "{{ message.id }}",
          "message_name": "{{ message.name }}",
          "message_title": "{{ message.title.en }}",
          "message_contents": "{{ message.contents.en }}",
          "template_id": "{{ message.template_id }}",
          "subscription_id": "{{ event.subscription_id }}",
          "subscription_device_type": "{{ event.subscription_device_type }}",
          "source": "onesignal"
        },
        "originalTimestamp": "{{ event.datetime }}"
      }
      ```
    </CodeGroup>
  </Step>

  <Step>
    Finalmente, selecciona "Save & Activate" para sincronizar los eventos de mensajes elegidos con la Hoja de Google. A continuación se muestra un ejemplo de cómo se renderiza el código de muestra anterior:

    <Frame>
      <img src="https://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/d8a0fc0-image2.png?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=fa26c2e16ff9b7435bcfe818cca8f9a5" width="960" height="265" data-path="images/docs/d8a0fc0-image2.png" />
    </Frame>
  </Step>
</Steps>

***
