Googleシートを使った顧客レビュー感情の自動分析

中級

これはMarket Research, AI Summarization分野の自動化ワークフローで、6個のノードを含みます。主にCode, GoogleSheets, GoogleSheetsTriggerなどのノードを使用。 Google Sheetsで顧客レビューの感情を自動のに分析

前提条件
  • Google Sheets API認証情報

カテゴリー

ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "meta": {
    "instanceId": "2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "46064753-85fe-4f8e-aba1-0e3ba9b994b6",
      "name": "感情の分析",
      "type": "n8n-nodes-base.code",
      "position": [
        272,
        48
      ],
      "parameters": {
        "jsCode": "const reviewText = $input.first().json['Review Text'];\nconst reviewId = $input.first().json['Review ID'];\n\nlet sentiment = 'Neutral';\nconst positiveKeywords = ['great', 'excellent', 'amazing', 'happy', 'love', 'satisfied', 'good', 'fantastic', 'awesome', 'recommend'];\nconst negativeKeywords = ['bad', 'poor', 'disappointed', 'problem', 'unhappy', 'frustrating', 'issue', 'terrible', 'worst'];\n\nconst lowerCaseReview = reviewText.toLowerCase();\n\nlet positiveCount = 0;\npositiveKeywords.forEach(keyword => {\n    if (lowerCaseReview.includes(keyword)) {\n        positiveCount++;\n    }\n});\n\nlet negativeCount = 0;\nnegativeKeywords.forEach(keyword => {\n    if (lowerCaseReview.includes(keyword)) {\n        negativeCount++;\n    }\n});\n\nif (positiveCount > negativeCount) {\n    sentiment = 'Positive';\n} else if (negativeCount > positiveCount) {\n    sentiment = 'Negative';\n} else if (positiveCount > 0 && negativeCount > 0) {\n    sentiment = 'Mixed'; // For cases with both positive and negative keywords\n}\n\nreturn [{ json: { sentiment: sentiment, reviewId: reviewId } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "c2830312-8cdc-446a-a0ea-cfecabca7e5e",
      "name": "感情をシート (Google) に更新",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        496,
        48
      ],
      "parameters": {
        "columns": {
          "value": {
            "Review ID": "={{ $json.reviewId }}",
            "row_number": 0
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Review Text",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Review Text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentiment",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Review ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Review ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Review ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 789150459,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SOxZwhOEI8XQNu-0wQ3TiWsf01aLEKu48IAgtbEt2CE/edit#gid=789150459",
          "cachedResultName": "customer_reviews_template"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1SOxZwhOEI8XQNu-0wQ3TiWsf01aLEKu48IAgtbEt2CE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SOxZwhOEI8XQNu-0wQ3TiWsf01aLEKu48IAgtbEt2CE/edit?usp=drivesdk",
          "cachedResultName": "Customer Review "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "vL25dYTf9oT1CSvl",
          "name": "Google Sheets account 2"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "40bedf02-1897-4b02-b2c6-00e24d3352ff",
      "name": "シート (Google) トリガー",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -224,
        48
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 789150459,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SOxZwhOEI8XQNu-0wQ3TiWsf01aLEKu48IAgtbEt2CE/edit#gid=789150459",
          "cachedResultName": "customer_reviews_template"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1SOxZwhOEI8XQNu-0wQ3TiWsf01aLEKu48IAgtbEt2CE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SOxZwhOEI8XQNu-0wQ3TiWsf01aLEKu48IAgtbEt2CE/edit?usp=drivesdk",
          "cachedResultName": "Customer Review "
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "id": "Ummd8YuUEDil2T3f",
          "name": "Google Sheets Trigger account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "41b7911b-7086-45a7-8b8d-dbf75b0351ec",
      "name": "付箋",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        -176
      ],
      "parameters": {
        "width": 320,
        "height": 400,
        "content": "## Customer Review Sentiment Analyzer (Google Sheets)\n**Author: David Olusola**\n\nThis workflow watches for new rows in a Google Sheet (e.g., where you manually log customer reviews) and uses a Code node to perform a simple sentiment analysis, then updates the same row with the detected sentiment.\n\nUse Case: Quickly gauge customer satisfaction, identify positive/negative trends, and prioritize follow-ups based on sentiment."
      },
      "typeVersion": 1
    },
    {
      "id": "31fc4a2f-03c4-4cff-a766-c4b22d614a59",
      "name": "付箋1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -208
      ],
      "parameters": {
        "height": 512,
        "content": "## Setup Steps\n\nTo get this workflow up and running, follow these instructions:\n\nStep 1: Create Google Sheets Credentials in n8n\n\nIn your n8n instance, click on Credentials in the left sidebar.\n\nClick New Credential.\n\nSearch for and select \"Google Sheets OAuth2 API\" and follow the authentication steps with your Google account. Save it.\n\nMake note of the Credential Name (e.g., \"My Google Sheets Account\").\n\nStep 2: Make a copy  of the Google Sheet [Customer Review](https://docs.google.com/spreadsheets/d/1XmyKfySCUAgyTgnAU3p0bz22D_ofAPoTAUw2HuBezrM/edit?usp=sharing)"
      },
      "typeVersion": 1
    },
    {
      "id": "86cd2976-fe14-4238-a2a6-0400eb3f2cde",
      "name": "付箋2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        -192
      ],
      "parameters": {
        "height": 464,
        "content": "## Activate and Test the Workflow\n\n\nClick the \"Activate\" toggle button in the top right corner of the n8n workflow editor.\n\nGo to your Google Sheet and manually add a new row with a \"Review Text\" (e.g., \"This product is great, I love it!\"). Leave the \"Sentiment\" column empty.\n\nThe workflow should trigger automatically (it polls every minute by default), analyze the sentiment, and update the \"Sentiment\" column in your Google Sheet. You can also manually \"Execute Workflow\" to test immediately."
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "46064753-85fe-4f8e-aba1-0e3ba9b994b6": {
      "main": [
        [
          {
            "node": "c2830312-8cdc-446a-a0ea-cfecabca7e5e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "40bedf02-1897-4b02-b2c6-00e24d3352ff": {
      "main": [
        [
          {
            "node": "46064753-85fe-4f8e-aba1-0e3ba9b994b6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

中級 - 市場調査, AI要約

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
中級
ノード数6
カテゴリー2
ノードタイプ4
難易度説明

経験者向け、6-15ノードの中程度の複雑さのワークフロー

作成者
David Olusola

David Olusola

@dae221

I help ambitious businesses eliminate operational bottlenecks and scale faster with AI automation. My clients typically see 40-60% efficiency gains within 90 days. Currently accepting 3 new projects this quarter - david@daexai.com

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34