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

# Event StreamsとGoogle Sheetsの統合

> このガイドでは、OneSignalのEvent WebhooksとカスタムGoogle Sheetsドキュメント間の接続をセットアップして、OneSignalによって生成されたメッセージイベントを分析するために必要な手順を説明します。

## Event Streamsを有効にする

OneSignalアプリケーションの有料プランのアドオン機能である[Event Streams](./event-streams)を有効にします。この機能へのアクセス権がない場合は、Success ManagerまたはAccount Executiveにお気軽にお問い合わせください。

## Apps Scriptデプロイメントを作成する

OneSignalメッセージイベントを追加したいGoogle Sheetで、**拡張機能 > Apps Script**に移動します。次に、コードエディタ内で既存のコードを次のコードに置き換えます：

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

次に、プロジェクトをデプロイします。右上の「デプロイ」をクリックし、デプロイタイプとして「Web App」を選択します。説明を入力し、プロジェクトにアクセスできるユーザーを選択します。次のステップで必要なURLを生成するために「Anyone」を選択します。

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

## Event Streamを作成する

<Steps>
  <Step>
    OneSignalダッシュボードから、\*\*設定 > Event Streams（アドオン機能の対象）\*\*に移動します。そこから、新しいEvent Streamを作成し、「次のいずれかのイベントが発生したときにトリガー」を選択します。Google Sheetsと同期したいメッセージイベントをポップアップで選択します。以下の例では、すべてのプッシュ通知イベントをキャプチャしています。

    <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>
    次に、構成ステップでPOSTを選択し、前のステップのURLを貼り付け、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>
    その後、ステップ3のドロップダウンで「Custom Body」を選択し、次のコードをコピー/貼り付けします。以下の例に示すように、同期したいプロパティとイベントを変更できます。Event Streamのイベントプロパティの詳細については、[ドキュメント](./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>
    最後に、「保存してアクティブ化」を選択して、選択したメッセージイベントをGoogle Sheetに同期します。以下は、上記のサンプルコードがどのようにレンダリングされるかの例です：

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

***
