AutomationFlowsSlack & Telegram › Filter for Positive Google Reviews Using Telegram, Web Form & Google Sheets

Filter for Positive Google Reviews Using Telegram, Web Form & Google Sheets

ByAnirudh Aeran @anirudhaeran on n8n.io

This workflow is a powerful reputation management tool designed to proactively filter customer reviews. It helps you encourage positive reviews on Google while capturing negative feedback privately before it impacts your public rating. By using an incentive, it maximizes the…

Event trigger★★★★★ complexity33 nodesTelegram TriggerGoogle SheetsTelegram
Slack & Telegram Trigger: Event Nodes: 33 Complexity: ★★★★★ Added:

This workflow corresponds to n8n.io template #9379 — we link there as the canonical source.

This workflow follows the Google Sheets → Telegram recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "22c9f809-df01-4dd2-aa0f-893d2aed3a17",
      "name": "Initial User Message",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -1040,
        -448
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "7f7f07f5-fcc7-4fd9-ad9c-51d55ed559bd",
      "name": "Fetch Rows from sheet",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Checks if its a returning customer",
      "position": [
        -848,
        -448
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.message.from.id.toString() }}",
              "lookupColumn": "ID"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "Your Google sheet ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit?usp=drivesdk",
          "cachedResultName": "Google review Agent"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "5f204297-2a27-4b40-a5f8-a91de5b65d2f",
      "name": "Updates customer details",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -416,
        -624
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $('Initial User Message').item.json.message.from.id }}",
            "Is Bot": "={{ $('Initial User Message').item.json.message.from.is_bot }}",
            "Status": "pending",
            "Last Name": "={{ $('Initial User Message').item.json.message.from.last_name }}",
            "Timestamp": "={{ $now }}",
            "First Name ": "={{ $('Initial User Message').item.json.message.from.first_name }}"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Name ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "First Name ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Is Bot",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Is Bot",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Feedback Message",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Feedback Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "Your Google sheet ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit?usp=drivesdk",
          "cachedResultName": "Google review Agent"
        }
      },
      "notesInFlow": false,
      "typeVersion": 4.7
    },
    {
      "id": "33002dd5-2c11-4216-939b-4041a6013f59",
      "name": "Updates Status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -16,
        -624
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $('Initial User Message').item.json.message.from.id }}",
            "Status": "contacted"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Name ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "First Name ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Is Bot",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Is Bot",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Feedback Message",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Feedback Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "Your Google sheet ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit?usp=drivesdk",
          "cachedResultName": "Google review Agent"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "3259cacc-d95a-48c4-be74-704f517b93a3",
      "name": "Already claimed offer msg",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -224,
        -352
      ],
      "parameters": {
        "text": "=Sorry {{ $('Initial User Message').item.json.message.chat.first_name }}, You have already Claimed this Offer. ",
        "chatId": "={{ $('Initial User Message').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c7d82216-0388-4f2d-bc4d-33bc76c9f9db",
      "name": "Feedback message",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -864,
        -64
      ],
      "parameters": {
        "path": "b3ac4af4-a8fc-43ba-a2ef-be1de79fb2f1",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "3b4d326b-400f-4899-b9b9-5c8f5acf8525",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        -144
      ],
      "parameters": {
        "width": 912,
        "height": 256,
        "content": "## Feedback Review to Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "e74201cb-d0eb-40d9-8107-98e298a81719",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -208,
        -144
      ],
      "parameters": {
        "width": 832,
        "height": 256,
        "content": "## Tracking for Link Click"
      },
      "typeVersion": 1
    },
    {
      "id": "8e3a7e0b-6250-496e-9975-023e417d749d",
      "name": "Link Click Track",
      "type": "n8n-nodes-base.webhook",
      "position": [
        48,
        -64
      ],
      "parameters": {
        "path": "366b2145-1d50-45b1-84c0-25bf8765c953",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "94bf1a7a-8c39-44aa-a6ce-9cd2d08c794d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        -752
      ],
      "parameters": {
        "color": 4,
        "width": 1760,
        "height": 592,
        "content": "## Initial Customer Funneling and Review Message Workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "b7bee03a-5c93-44da-ac42-cf18eb7dd0ad",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1024,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6f4c36e7-12e0-4efa-83af-1eacfc0f81e8",
      "name": "Get row(s) in sheet1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -816,
        240
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "contacted",
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "Your Google sheet ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit?usp=drivesdk",
          "cachedResultName": "Google review Agent"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "d7a5e922-79cc-4136-a1a6-32b4be2f3a35",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -608,
        240
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "c5597f2d-3926-4bac-8fd7-148f294e537f",
      "name": "if 23 hours passed",
      "type": "n8n-nodes-base.if",
      "position": [
        -176,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2d460e62-dd33-4296-ad96-f97f063f8d63",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.is_deadline_in_past }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "897e5fba-45fe-49dd-a699-9701aede5614",
      "name": "update status to follow up sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        368,
        240
      ],
      "parameters": {
        "columns": {
          "value": {
            "Status": "Follow-up Sent",
            "Phone Number": "={{ $('Loop Over Items').item.json['Phone Number'] }}"
          },
          "schema": [
            {
              "id": "Phone Number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Feedback Message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Feedback Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Phone Number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "Your Google sheet ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit?usp=drivesdk",
          "cachedResultName": "Google review Agent"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2fb51e66-cd53-4bc0-bb34-c3a281ceeb3b",
      "name": "2 hours delay for feedback",
      "type": "n8n-nodes-base.wait",
      "position": [
        208,
        -624
      ],
      "parameters": {
        "unit": "hours",
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "87e5713a-d453-4a0f-a41a-bf66739f77ed",
      "name": "checks if customer exists in sheets",
      "type": "n8n-nodes-base.if",
      "position": [
        -656,
        -448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "baf45120-c886-40d9-9e83-55308b2c6e4a",
              "operator": {
                "type": "string",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json.ID.toString() }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "93c8d4cb-6221-4419-a8db-99de0a40a10f",
      "name": "checks if they still didn't claim the offer",
      "type": "n8n-nodes-base.if",
      "position": [
        -416,
        -336
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "3105bcfd-71a6-428b-acb9-bd30b9353084",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Status }}",
              "rightValue": "contacted"
            },
            {
              "id": "311db6b1-1b87-4b8d-9d31-a51840ee7486",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Status }}",
              "rightValue": "clicked"
            },
            {
              "id": "04d697a3-c67f-480f-ac7c-79f83852e0be",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Status }}",
              "rightValue": "Follow-up Sent"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1eac73dc-0dad-4ced-a845-650b3b3bdcab",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        128
      ],
      "parameters": {
        "color": 5,
        "width": 1760,
        "height": 352,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "2b97bfa6-9bf3-4e83-a0b4-c2c3d303f801",
      "name": "Timestamp to Boolean",
      "type": "n8n-nodes-base.set",
      "position": [
        -368,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d36b9dce-e4c0-40f3-851c-86db00097bf2",
              "name": "is_deadline_in_past",
              "type": "boolean",
              "value": "={{ new Date(new Date($json.Timestamp).getTime() + (23 * 60 * 60 * 1000)) < new Date() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "bef8f6b9-fc5a-4f75-a647-434d41a14760",
      "name": "Send Review Page Link",
      "type": "n8n-nodes-base.telegram",
      "position": [
        384,
        -624
      ],
      "parameters": {
        "text": "=Hi {{ $('Send Incentive Offer').item.json.result.chat.first_name }},\n\nThank you again for your visit today. Could you please take a moment to rate your experience out of 5 stars?\n\nIt's just one tap and helps us a lot.",
        "chatId": "={{ $('Initial User Message').item.json.message.chat.id }}",
        "replyMarkup": "inlineKeyboard",
        "inlineKeyboard": {
          "rows": [
            {
              "row": {
                "buttons": [
                  {
                    "text": "Rate Your Visit",
                    "additionalFields": {
                      "url": "=https://\"Your webpage URl\"/?userId={{ $('Initial User Message').item.json.message.chat.id }}"
                    }
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "58c7b89f-0d97-442f-b3e0-c6c629c44465",
      "name": "Send Incentive Offer",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -224,
        -624
      ],
      "parameters": {
        "text": "=Congratulations {{ $('Initial User Message').item.json.message.chat.first_name }},\n\nHere's Your discount of 5%. \n\nTo claim this show this message to the receptionist. ",
        "chatId": "={{ $('Initial User Message').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6670b4ae-b24c-46a7-aebb-0d769776ae40",
      "name": "Send Review Link Reminder",
      "type": "n8n-nodes-base.telegram",
      "position": [
        112,
        240
      ],
      "parameters": {
        "text": "=Hi {{ $('Loop Over Items').item.json['First Name '] }},\n\nThis is just a friendly reminder that we'd love to get your star rating on your recent visit. It only takes a second and helps us a lot!",
        "chatId": "={{ $('Loop Over Items').item.json.ID }}",
        "replyMarkup": "inlineKeyboard",
        "inlineKeyboard": {
          "rows": [
            {
              "row": {
                "buttons": [
                  {
                    "text": "Rate Your Visit",
                    "additionalFields": {
                      "url": "=https://\"Your Webpage URL\"/?userId={{ $('Loop Over Items').item.json.ID }}"
                    }
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "be79b0fd-ac32-4891-b5c8-2b0a0b98fd7d",
      "name": "Update Status to 'Clicked'",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        256,
        -64
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $json.body.userId }}",
            "Status": "clicked"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Name ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "First Name ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Is Bot",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Is Bot",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Feedback Message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Feedback Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "Your Google sheet ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit?usp=drivesdk",
          "cachedResultName": "Google review Agent"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "eb9a1614-0506-42c1-bfd3-643de8670ebf",
      "name": "Save Private Feedback to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -656,
        -64
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $json.body.userId }}",
            "Feedback Message": "={{ $('Feedback message').item.json.body.feedback }}"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Name ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "First Name ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Is Bot",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Is Bot",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Feedback Message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Feedback Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "Your Google sheet ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/Your Google sheet ID/edit?usp=drivesdk",
          "cachedResultName": "Google review Agent"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "75613bca-9dc4-4140-ab10-80b52a02247f",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2144,
        -1232
      ],
      "parameters": {
        "width": 560,
        "height": 416,
        "content": "=========================\n Positive Google Reviews only Using Telegram with Google Sheets\n=======================================\nFor any questions or support, please contact:\n    anirudh.n.aeran@gmail.com\n\nExplore more tips here:\n    - LinkedIn: https://www.linkedin.com/in/anirudh-narayan-a-/\n\nHappy learning! -- Anirudh Aeran\n\n\n======================================="
      },
      "typeVersion": 1
    },
    {
      "id": "416e3b5e-6d47-4d62-8442-83edb03c4437",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2144,
        -768
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 960,
        "content": "## Try It Out!\n\n**This workflow is your personal reputation manager. It intelligently filters customer feedback from Telegram, encouraging 4+ star reviews to be posted on Google while capturing negative feedback privately for you to handle.**\n\n1. **Have your review page ready.** This workflow's main goal is to send users to a special webpage that filters reviews. Make sure you have this page built and hosted *before* you begin. Copy the [Code](https://github.com/anirudhaeran/Google-Review-Feedback-Form) and host it in Netlify for free - [Tutorial](https://youtu.be/9srnyNC1e_o?si=nSFDZRks_19p43jc)\n\n2. **Connect your accounts.** First, create a Telegram bot by talking to the BotFather on Telegram to get your API token. Then, connect your **Telegram** and **Google Sheets** credentials in n8n. You can refer to the [n8n docs](https://docs.n8n.io/) if you need help.\n\n3. **Set up your Google Sheet.** Create a new sheet with the following exact column names: ID, First Name, Last Name, Status, Feedback Message, Timestamp. Copy the Sheet ID from its URL.\n\n4. **Configure the workflow.**\n- In all **Google Sheets nodes**, select your credential and paste your Sheet ID.\n- In all **Telegram nodes**, select your Telegram credential.\n- In the \"**Send Review Page Link**\" and \"**Send Review Link Reminder**\" nodes, paste the URL to **your** review filtering webpage.\n\n**Test the magic!**\n- Get your bot's link (e.g., https://t.me/YOUR_BOT_USERNAME) and create a QR code for it.\n- Scan the QR code with your phone and send a message to your bot.\n- You should receive the incentive offer, and after the delay, the link to your review page.\n- Check your Google Sheet - a new row with your user details should appear instantly!\n\n**Go Live.** Once you're happy with the test, just activate the workflow to make it live for your customers."
      },
      "typeVersion": 1
    },
    {
      "id": "0f409df6-2adb-4292-b824-674aa292abbd",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        -944
      ],
      "parameters": {
        "width": 272,
        "content": "### Note:\nHere in this workflow we're using a free discount of 5% up to $xx method to funnel the customer to our database. You can replace this with any stratagy"
      },
      "typeVersion": 1
    },
    {
      "id": "7df82cf7-f836-4a46-bd4d-4e9579cc3b53",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1408,
        -80
      ],
      "parameters": {
        "color": 3,
        "width": 256,
        "height": 112,
        "content": "**-->This flow will send the feedback from the webpage to sheets (this can be database)**"
      },
      "typeVersion": 1
    },
    {
      "id": "972ac8ba-73e0-4fbf-8c87-607d21b5f4b7",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        -80
      ],
      "parameters": {
        "color": 3,
        "width": 256,
        "height": 96,
        "content": "**-->This flow will update the status to \"clicked\" if the link is opened.**"
      },
      "typeVersion": 1
    },
    {
      "id": "2c6714a7-3622-4cf1-8e71-456c22819fa3",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -944
      ],
      "parameters": {
        "width": 320,
        "content": "### -->Dynamic Link\n**The review link sent to each customer is unique. This is ensured by add ?userId={a unique id} at the end of the website URL. Here the telegram id of the customer is the Uid we are using to achieve this.**"
      },
      "typeVersion": 1
    },
    {
      "id": "c2ccc53f-fbbc-4bfe-b692-0e7d7eb907fa",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1456,
        160
      ],
      "parameters": {
        "color": 3,
        "width": 304,
        "height": 288,
        "content": "**This flow will check on a 5 minute interval basis if the timestamp has exceeded the \"23 hour mark\" to send a follow up to the customers who didn't click the link. \n\nWhen Using Telegram the 23 hour concept is insignificant here, but this is well significant if you want to switch to WhatsApp as this will ensure that the message sent is free instead of paid, as its before the 24 hours from the initial chat message from the user**"
      },
      "typeVersion": 1
    },
    {
      "id": "af651e46-8818-42e0-8a5a-7587b143b422",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        -752
      ],
      "parameters": {
        "width": 288,
        "height": 320,
        "content": "### Create Telegram Bot\n1. Message the official BotFather on Telegram and send the command /newbot.\n\n2. Follow the prompts to set a display name and a unique username (which must end in bot).\n\n3. BotFather will reply with your API Token. Copy this token.\n\n4. Paste the token into your n8n Telegram credentials."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Updates Status": {
      "main": [
        [
          {
            "node": "2 hours delay for feedback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Timestamp to Boolean",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Feedback message": {
      "main": [
        [
          {
            "node": "Save Private Feedback to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Link Click Track": {
      "main": [
        [
          {
            "node": "Update Status to 'Clicked'",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "if 23 hours passed": {
      "main": [
        [
          {
            "node": "Send Review Link Reminder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Initial User Message": {
      "main": [
        [
          {
            "node": "Fetch Rows from sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Incentive Offer": {
      "main": [
        [
          {
            "node": "Updates Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Timestamp to Boolean": {
      "main": [
        [
          {
            "node": "if 23 hours passed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Rows from sheet": {
      "main": [
        [
          {
            "node": "checks if customer exists in sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Updates customer details": {
      "main": [
        [
          {
            "node": "Send Incentive Offer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Review Link Reminder": {
      "main": [
        [
          {
            "node": "update status to follow up sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2 hours delay for feedback": {
      "main": [
        [
          {
            "node": "Send Review Page Link",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "update status to follow up sent": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "checks if customer exists in sheets": {
      "main": [
        [
          {
            "node": "Updates customer details",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "checks if they still didn't claim the offer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "checks if they still didn't claim the offer": {
      "main": [
        [
          {
            "node": "Already claimed offer msg",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Incentive Offer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow is a powerful reputation management tool designed to proactively filter customer reviews. It helps you encourage positive reviews on Google while capturing negative feedback privately before it impacts your public rating. By using an incentive, it maximizes the…

Source: https://n8n.io/workflows/9379/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

This workflow provides a complete solution for handling Telegram Stars payments, invoicing and refunds using n8n. It automates the process of sending invoices, managing pre-checkout approvals, recordi

HTTP Request, Execute Workflow Trigger, Google Sheets +2
Slack & Telegram

clients kept booking meetings during my prayer times. i'd either miss a prayer or scramble to reschedule. the problem wasn't the clients — it was that my calendar had no blocked windows for salah. i n

Telegram Trigger, HTTP Request, Google Calendar +3
Slack & Telegram

This workflow is designed to automate your e-commerce order processing by instantly syncing new Jotform submissions with your internal systems and immediately notifying the customer on Telegram.

Jot Form Trigger, Telegram, Data Table +3
Slack & Telegram

This template is perfect for freelancers, small business owners, or financial assistants who want to record and approve financial transactions like income and expenses directly from Telegram, without

Telegram Trigger, Telegram, Google Sheets
Slack & Telegram

Generate 360° product videos from a single photo using Google Veo 3 and Telegram

Telegram, Telegram Trigger, HTTP Request +1