8
n8n 中文网amn8n.com

GSheets CRM

高级

这是一个CRM, Multimodal AI领域的自动化工作流,包含 24 个节点。主要使用 If, Set, Code, Gmail, Webhook 等节点。 使用Google表格邮件通知和时间跟踪的自动化潜在客户到客户管道

前置要求
  • Google 账号和 Gmail API 凭证
  • HTTP Webhook 端点(n8n 会自动生成)
  • Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "sbTxG7FVDyFq0sLR",
  "meta": {
    "instanceId": "{{INSTANCE_ID}}",
    "templateCredsSetupCompleted": true
  },
  "name": "GSheets CRM",
  "tags": [],
  "nodes": [
    {
      "id": "c0760f3c-0feb-43bb-9b52-cc9307e0b98f",
      "name": "Webhook:潜在客户阶段已更改",
      "type": "n8n-nodes-base.webhook",
      "notes": "Receives JSON when a lead's Stage (Leads!E) changes.\nExpected body keys:\n- name (Leads!A)\n- email (Leads!C)\n- source_id (for mapping 1=Instagram,2=Facebook) OR source_text\n- stage (new stage text)\n- previous_stage (optional)",
      "position": [
        -896,
        -80
      ],
      "webhookId": "{{WEBHOOK_ID_LEAD_STAGE_CHANGED}}",
      "parameters": {
        "path": "lead-stage-changed",
        "options": {
          "responseData": "OK"
        },
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "a91971ec-9414-4d0d-98d9-273761071c30",
      "name": "准备邮件字段",
      "type": "n8n-nodes-base.set",
      "notes": "Derives firstName and sourcePlatform for the email body.",
      "position": [
        -672,
        -80
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "firstName",
              "stringValue": "=={{ $json.body.name ? $json.body.name.trim().split(' ')[0] : 'there' }}"
            },
            {
              "name": "sourcePlatform ",
              "stringValue": "={{ $json.body.source_text || 'Unknown' }}"
            },
            {
              "name": "stage",
              "stringValue": "={{ $json.body.stage }}"
            },
            {
              "name": "previousStage",
              "stringValue": "={{ $json.body.previous_stage || '' }}"
            }
          ]
        },
        "options": {
          "includeBinary": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "00ef748d-22e8-4436-a0e7-7ef1ed9017fe",
      "name": "Gmail:发送阶段变更邮件",
      "type": "n8n-nodes-base.gmail",
      "notes": "Sends the templated email on any Stage change.",
      "position": [
        -224,
        -176
      ],
      "webhookId": "{{GMAIL_NODE_WEBHOOK_ID_STAGE_CHANGE}}",
      "parameters": {
        "sendTo": "={{ $('Prepare Email Fields').item.json.body.email }}",
        "message": "=Hi {{ $('Prepare Email Fields').item.json.body.name }},<br><br>Thanks for the call earlier & happy I was able to meet you. Just letting you know that I'll work on a proposal immediately and have something over to you in the next 2-3 hours.<br><br>Stay tuned & let me know if you have any questions.<br><br>Thanks,<br>{{SENDER_NAME}}",
        "options": {},
        "subject": "Next Steps"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "{{GMAIL_CREDENTIAL_ID}}",
          "name": "{{GMAIL_CREDENTIAL_NAME}}"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "baa49e6a-3c2e-4c42-ae96-9b2f0e5a0db3",
      "name": "IF:阶段 == 已赢得",
      "type": "n8n-nodes-base.if",
      "notes": "Branch for when the lead has been marked Won.",
      "position": [
        -224,
        16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5feb2d51-b3ba-4b5e-9064-4735e10d5a38",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.stage }}",
              "rightValue": "Won"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "855b796a-8588-4f43-8b39-48406c37c67d",
      "name": "格式化开始时间戳",
      "type": "n8n-nodes-base.dateTime",
      "notes": "Produces Start Date & Time as: dd/mm/yyyy at HH:MM",
      "position": [
        0,
        16
      ],
      "parameters": {
        "value": "={{ $now }}",
        "custom": true,
        "options": {},
        "toFormat": "DD/MM/YYYY 'at' HH:mm"
      },
      "typeVersion": 1
    },
    {
      "id": "25f0b4f3-0305-4ce6-83f8-e37fc90d51ca",
      "name": "GS:客户追加(赢得时)",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Appends the new client with Project Status=In Progress and Start Date & Time.",
      "position": [
        224,
        16
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $json.body.name }}",
            "Client Email": "={{ $json.body.email }}",
            "Start Date & Time": "={{ $json.data }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client Type",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Client Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Client Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Project Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Project Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tenure",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tenure",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Start Date & Time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Start Date & Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "End Date & Time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "End Date & Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time to Deliver",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Time to Deliver",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "useAppend": true,
          "cellFormat": "USER_ENTERED"
        },
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "{{CLIENTS_GID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit#gid={{CLIENTS_GID}}",
          "cachedResultName": "Clients"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "{{GOOGLE_SHEETS_DOC_ID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit",
          "cachedResultName": "{{SHEET_NAME}}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "{{GSHEETS_CREDENTIAL_ID}}",
          "name": "{{GSHEETS_CREDENTIAL_NAME}}"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "100c9018-23b7-4724-93ef-373566ae9c42",
      "name": "Webhook:潜在客户是否合格?",
      "type": "n8n-nodes-base.webhook",
      "notes": "Receives JSON when Leads!H (Qualified?) is checked.\nExpected body keys:\n- name (A)\n- email (C)\n- qualified (boolean or 'TRUE'/1)",
      "position": [
        -896,
        -624
      ],
      "webhookId": "{{WEBHOOK_ID_LEAD_QUALIFIED}}",
      "parameters": {
        "path": "lead-qualified",
        "options": {
          "responseData": "OK"
        },
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "e5fe57ce-c457-4f03-9c96-7ac385b2a42f",
      "name": "IF:是否合格",
      "type": "n8n-nodes-base.if",
      "position": [
        -672,
        -624
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "285b4bc9-5a4b-4f6b-bd55-eb54d6a6fcc1",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.body.qualified }}",
              "rightValue": "=\"true\""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "04851d87-b2c6-4383-9687-382f3bee1e7b",
      "name": "Gmail:发送 Cal.com 邀请",
      "type": "n8n-nodes-base.gmail",
      "notes": "Sends the booking link when Qualified? is checked.",
      "position": [
        -448,
        -624
      ],
      "webhookId": "{{GMAIL_NODE_WEBHOOK_ID_CAL_INVITE}}",
      "parameters": {
        "sendTo": "={{ $json.body.email }}",
        "message": "=Hi {{$json.body.name ? $json.body.name.split(' ')[0] : 'there'}},<br><br>Congrats — you’re qualified and we are super excited to know more from you! Please book your discovery call here: <a href=\"{{CAL_COM_BOOKING_URL}}\" target=\"_blank\">Schedule on Cal.com</a>.<br><br>Thanks,<br>{{SENDER_NAME}}",
        "options": {},
        "subject": "Book Your Discovery Call"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "{{GMAIL_CREDENTIAL_ID}}",
          "name": "{{GMAIL_CREDENTIAL_NAME}}"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "99f6f896-ac20-454b-a480-88a71aabe0b0",
      "name": "GS:潜在客户更新阶段为会议已预订",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Uses Email (Column C) as key to update Stage (E) to 'Meeting Booked'.",
      "position": [
        -672,
        -368
      ],
      "parameters": {
        "columns": {
          "value": {
            "Stage": "Meeting Booked",
            "Client Email": "={{ $json.body.payload.attendees[0].email }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date Updated",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Date Updated",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Client Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Lead Source",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Lead Source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Stage",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Stage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Asignee",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Asignee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Discovery Call URL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Discovery Call URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Qualitfied?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Qualitfied?",
              "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": [
            "Client Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "cellFormat": "USER_ENTERED"
        },
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid={{LEADS_GID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit#gid={{LEADS_GID}}",
          "cachedResultName": "Leads"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "{{GOOGLE_SHEETS_DOC_ID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit",
          "cachedResultName": "{{SHEET_NAME}}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "{{GSHEETS_CREDENTIAL_ID}}",
          "name": "{{GSHEETS_CREDENTIAL_NAME}}"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "b2acf148-b6bc-49d3-8e76-fe890459c1dc",
      "name": "Webhook:客户状态已更改",
      "type": "n8n-nodes-base.webhook",
      "notes": "Receives JSON when Clients!D (Project Status) changes.\nExpected body keys:\n- email (Clients!C)\n- project_status (Clients!D new value)",
      "position": [
        -880,
        304
      ],
      "webhookId": "{{WEBHOOK_ID_CLIENT_STATUS_CHANGED}}",
      "parameters": {
        "path": "client-status-changed",
        "options": {
          "responseData": "OK"
        },
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "01223e18-22c3-4622-ba66-0425aad4bcd6",
      "name": "IF:已交付?",
      "type": "n8n-nodes-base.if",
      "position": [
        -656,
        304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8be5b372-0114-4595-ab9a-d7903d63a716",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.body.project_status }}",
              "rightValue": "Delivered"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "438ffb35-490f-49d1-9031-c32447b59992",
      "name": "GS:按邮箱查找客户",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Fetches the row to read Start Date & Time (F) for duration calc.",
      "position": [
        -432,
        304
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.body.email }}",
              "lookupColumn": "Client Email"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "{{CLIENTS_GID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit#gid={{CLIENTS_GID}}",
          "cachedResultName": "Clients"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "{{GOOGLE_SHEETS_DOC_ID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit",
          "cachedResultName": "{{SHEET_NAME}}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "{{GSHEETS_CREDENTIAL_ID}}",
          "name": "{{GSHEETS_CREDENTIAL_NAME}}"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "1579d825-5a67-4e52-b7d5-f4dc493cf790",
      "name": "格式化结束时间戳",
      "type": "n8n-nodes-base.dateTime",
      "notes": "End Date & Time formatted as dd/mm/yyyy at HH:MM",
      "position": [
        -208,
        304
      ],
      "parameters": {
        "value": "={{ $now }}",
        "custom": true,
        "options": {},
        "toFormat": "DD/MM/YYYY 'at' HH:mm"
      },
      "typeVersion": 1
    },
    {
      "id": "1aec66f5-ce82-4375-9202-a3ba2a5ad118",
      "name": "GS:客户更新结束时间和持续时间",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Sets End Date & Time (G) and Time To Deliver (H).",
      "position": [
        240,
        304
      ],
      "parameters": {
        "columns": {
          "value": {
            "Client Email": "={{ $json[\"Client Email\"] }}",
            "End Date & Time": "={{ $json.endStr }}",
            "Time to Deliver": "={{ $json.duration }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client Type",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Client Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Client Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Project Status",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Project Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tenure",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Tenure",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Start Date & Time",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Start Date & Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "End Date & Time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "End Date & Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time to Deliver",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Time to Deliver",
              "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": [
            "Client Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "cellFormat": "USER_ENTERED"
        },
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "{{CLIENTS_GID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit#gid={{CLIENTS_GID}}",
          "cachedResultName": "Clients"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "{{GOOGLE_SHEETS_DOC_ID}}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{{GOOGLE_SHEETS_DOC_ID}}/edit",
          "cachedResultName": "{{SHEET_NAME}}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "{{GSHEETS_CREDENTIAL_ID}}",
          "name": "{{GSHEETS_CREDENTIAL_NAME}}"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "1f2a3e16-70c7-402f-ace7-782f9de34fd3",
      "name": "代码",
      "type": "n8n-nodes-base.code",
      "position": [
        16,
        304
      ],
      "parameters": {
        "jsCode": "// Compute delivery duration from \"Start Date & Time\" (F) and formatted \"End\" from previous node\n// Expects this node to run AFTER \"Format End Timestamp\" and AFTER the Clients row lookup\n\nconst items = $input.all();\n\n// Helper: parse \"dd/mm/yyyy at HH:MM\"\nfunction parseDT(s) {\n  if (!s) return null;\n  const m = String(s).match(/(\\d{2})\\/(\\d{2})\\/(\\d{4}).*?(\\d{2}):(\\d{2})/);\n  if (!m) return null;\n  const [, d, M, y, h, min] = m;\n  return new Date(Number(y), Number(M) - 1, Number(d), Number(h), Number(min), 0);\n}\n\n// Get the formatted end timestamp from the Date & Time node\nconst endStrFromNode = $node[\"Format End Timestamp\"]?.json?.data || \"\";\n\nfor (const item of items) {\n  const row = item.json || {};\n\n  // Try several keys for Start column F (depending on how Google Sheets node labeled it)\n  const startStr =\n    row[\"Start Date & Time\"] ??\n    row[\"F\"] ??\n    row[\"Start\"] ??\n    \"\";\n\n  // Prefer the value from Date & Time node; fall back to any end value already present\n  const endStr = endStrFromNode || row[\"End Date & Time\"] || \"\";\n\n  const start = parseDT(startStr);\n  const end = parseDT(endStr);\n\n  let duration = \"N/A\";\n  if (start && end) {\n    const ms = end - start;\n    const days = Math.floor(ms / 86_400_000);\n    const hrs = Math.floor((ms % 86_400_000) / 3_600_000);\n    const mins = Math.floor((ms % 3_600_000) / 60_000);\n    duration = `${days}d ${hrs}h ${mins}m`;\n  }\n\n  // Attach results to the item\n  item.json.endStr = endStr;\n  item.json.duration = duration;\n}\n\nreturn items;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "12c036dc-4e13-4bfd-95d2-48da0e8337b6",
      "name": "条件判断",
      "type": "n8n-nodes-base.if",
      "position": [
        -448,
        -80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "37fbb2ef-5861-4fc8-ab06-71fe4364be63",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.stage }}",
              "rightValue": "Awaiting Proposal"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ec815439-bfb1-4edb-8a70-9db1c167a868",
      "name": "Webhook:会议已预订",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -896,
        -368
      ],
      "webhookId": "{{WEBHOOK_ID_MEETING_BOOKED}}",
      "parameters": {
        "path": "cal-booked",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "26784981-b9f6-44ca-8329-62072dd4fd0f",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1232,
        -848
      ],
      "parameters": {
        "width": 1968,
        "height": 1408,
        "content": "# Google Sheets 自动化 CRM"
      },
      "typeVersion": 1
    },
    {
      "id": "815c2626-dd90-4976-92d7-ce93bad40e1e",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2080,
        -848
      ],
      "parameters": {
        "color": 6,
        "width": 816,
        "height": 4128,
        "content": "# 所需的 App Script(将此用于您的 Google 工作表 App Script)"
      },
      "typeVersion": 1
    },
    {
      "id": "7b60fbcd-c39a-4313-967a-e7b8310286c1",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -688
      ],
      "parameters": {
        "color": 4,
        "width": 848,
        "height": 240,
        "content": "# 潜在客户资格认定"
      },
      "typeVersion": 1
    },
    {
      "id": "bff994fa-80d2-4ccd-8964-72fc8a694cc3",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -448
      ],
      "parameters": {
        "color": 4,
        "width": 848,
        "height": 256,
        "content": "# 将阶段更改为会议已预订"
      },
      "typeVersion": 1
    },
    {
      "id": "ea32e27d-3fc6-4bed-a61d-57ec7aa24fc0",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -192
      ],
      "parameters": {
        "color": 4,
        "width": 1440,
        "height": 384,
        "content": "# 提案跟进 / 客户赢得流程"
      },
      "typeVersion": 1
    },
    {
      "id": "5eb61a5b-b07c-42a7-9ff4-d178985e04b2",
      "name": "便利贴5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        192
      ],
      "parameters": {
        "color": 4,
        "width": 1440,
        "height": 304,
        "content": "# 项目完成持续时间"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "{{ERROR_WORKFLOW_ID}}",
    "executionOrder": "v1"
  },
  "versionId": "fbf5f5f3-e31e-4f4d-a480-f8c382bdfe04",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Gmail: Send Stage-Change Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "IF: Stage == Won",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "GS: Clients Update End & Duration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF: Delivered?": {
      "main": [
        [
          {
            "node": "GS: Clients Lookup by Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF: Is Qualified": {
      "main": [
        [
          {
            "node": "Gmail: Send Cal.com Invite",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF: Stage == Won": {
      "main": [
        [
          {
            "node": "Format Start Timestamp",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Format End Timestamp": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Email Fields": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Start Timestamp": {
      "main": [
        [
          {
            "node": "GS: Clients Append (On Won)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook: Meeting Booked": {
      "main": [
        [
          {
            "node": "GS: Leads Update Stage to Meeting Booked",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook: Lead Qualified?": {
      "main": [
        [
          {
            "node": "IF: Is Qualified",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GS: Clients Lookup by Email": {
      "main": [
        [
          {
            "node": "Format End Timestamp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook: Lead Stage Changed": {
      "main": [
        [
          {
            "node": "Prepare Email Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook: Client Status Changed": {
      "main": [
        [
          {
            "node": "IF: Delivered?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 客户关系管理, 多模态 AI

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量24
分类2
节点类型8
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Ziad Adel

Ziad Adel

@ziadadel

AI Automation Growth Partner with 5 years of experience in the tech and hyper growing startups industry

外部链接
在 n8n.io 查看

分享此工作流