> ## 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.

# Integração do Google Sheets com Event Streams

> Este guia ilustra os passos necessários para configurar uma conexão entre os Event Webhooks do OneSignal e um documento personalizado do Google Sheets para analisar eventos de mensagens gerados pelo OneSignal.

## Ativar event streams

Habilite [Event streams](./event-streams), um recurso adicional para planos pagos, para sua aplicação OneSignal. Se você não tem acesso a este recurso, não hesite em contatar seu Gerente de Sucesso ou Executivo de Conta para mais informações.

## Criar uma implantação de apps script

Navegue até **Extensions > Apps Script** no Google Sheet ao qual você deseja adicionar eventos de mensagens do OneSignal. Em seguida, dentro do editor de código, substitua o código existente pelo seguinte:

<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>

Em seguida, implante seu projeto. Clique em Deploy no canto superior direito e selecione "Web App" como tipo de implantação. Forneça uma descrição e escolha quem pode acessar o projeto; selecionaremos "Anyone" para gerar a URL necessária na próxima etapa.

<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>

## Criar o event stream

<Steps>
  <Step>
    No painel do OneSignal, navegue até **Settings > Event Streams (sujeito a recurso adicional)**. A partir daí, crie um novo event stream e selecione "Trigger when any of the following events occur". Escolha os eventos de mensagem que você deseja sincronizar no pop-up com o Google Sheets. No exemplo abaixo, capturamos todos os eventos de notificação push.

    <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>
    Em seguida, na etapa de configuração, escolha POST, cole a URL da etapa anterior e crie um cabeçalho para aceitar o 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>
    Após isso, selecione "Custom Body" no dropdown da Etapa 3 e copie/cole o seguinte código. Você pode alterar as propriedades e eventos que deseja sincronizar, conforme mostrado no exemplo abaixo. Para mais informações sobre propriedades de eventos do event stream, visite nossa [documentação](./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>
    Por fim, selecione "Save & Activate" para sincronizar os eventos de mensagem escolhidos com o Google Sheet. Abaixo está um exemplo de como o código de exemplo acima é renderizado:

    <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>

***
