8
n8n 中文网amn8n.com

从Google Sheets自动生成AI驱动的商业提案到Google Docs

高级

这是一个Document Extraction, Multimodal AI领域的自动化工作流,包含 16 个节点。主要使用 Code, GoogleDocs, GoogleDrive, Agent, GoogleSheetsTrigger 等节点。 使用GPT-4o、Google Sheets和Google Docs生成商业提案

前置要求
  • Google Drive API 凭证
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "Lim9HD2pvEN6vAIe",
  "meta": {
    "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
    "templateCredsSetupCompleted": true
  },
  "name": "从Google Sheets自动生成AI驱动的商业提案到Google Docs",
  "tags": [],
  "nodes": [
    {
      "id": "27862039-1480-43c0-a29b-e96940aad676",
      "name": "工作流概览",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1440,
        -224
      ],
      "parameters": {
        "color": 5,
        "width": 386,
        "height": 576,
        "content": "## 🎯 AI驱动的提案生成器工作流"
      },
      "typeVersion": 1
    },
    {
      "id": "370827ff-0b85-4489-92bc-23dbc5182112",
      "name": "触发器说明",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -272
      ],
      "parameters": {
        "width": 280,
        "height": 288,
        "content": "## 📥 步骤1:触发器设置"
      },
      "typeVersion": 1
    },
    {
      "id": "1393c26b-8979-4df5-b577-55f54f4d6517",
      "name": "数据过滤指南",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        176
      ],
      "parameters": {
        "width": 280,
        "height": 232,
        "content": "## 🔄 步骤2:数据处理"
      },
      "typeVersion": 1
    },
    {
      "id": "5cccf135-cd79-4a6c-a286-f9cd41a9367b",
      "name": "AI组件指南",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -352
      ],
      "parameters": {
        "width": 320,
        "height": 364,
        "content": "## 🤖 步骤3:AI生成"
      },
      "typeVersion": 1
    },
    {
      "id": "76079566-7068-4264-902f-4972027a4b04",
      "name": "文档设置指南",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        208
      ],
      "parameters": {
        "width": 300,
        "height": 432,
        "content": "## 📝 步骤4:文档填充"
      },
      "typeVersion": 1
    },
    {
      "id": "4c21284b-9934-48d5-9c24-f6f966c907aa",
      "name": "文件操作指南",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        -304
      ],
      "parameters": {
        "width": 280,
        "height": 320,
        "content": "## 💾 步骤5:文件管理"
      },
      "typeVersion": 1
    },
    {
      "id": "6701d2dc-21f8-418a-96ce-77fe5941e956",
      "name": "记忆:客户上下文",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -288,
        256
      ],
      "parameters": {
        "sessionKey": "=\"proposal_\" + $('Trigger: New Sheet Row').item.json.clientName",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "464cf18b-ed47-41a4-8075-5b0aee4c1ff2",
      "name": "AI代理:生成提案",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -368,
        32
      ],
      "parameters": {
        "text": "=Job Description:\n{{ $json.jobDescription }}\n\nClient Name:\n{{ $json.clientName }}\n\nTask:\nGenerate a complete, professional business proposal for {{ $json.clientName }} based on the job description above.\n\nRequirements:\n✓ Analyze the job requirements carefully\n✓ Create a tailored executive summary (150-250 words)\n✓ Develop 4-6 detailed scope of work sections with specific deliverables\n✓ Provide realistic 4-month cost breakdown in INR (format: ₹XX,XXX)\n✓ Include implementation timeline description\n✓ Write a professional conclusion with contact details\n\nGenerate the proposal content now in the exact JSON format specified.",
        "options": {
          "systemMessage": "=You are an expert proposal writer for [YOUR COMPANY NAME].\n\nYou will generate complete, professional proposal content for a Google Docs template.\n\nThe Google Doc has these sections:\n- Executive Summary\n- Scope Of Work\n- Costing (table format)\n- Timeline\n- Conclusion\n\nStyle Guidelines:\n✓ Professional, confident, and persuasive tone\n✓ Clear and concise language suitable for business proposals\n✓ Match the style and format of professional SEO/development proposals\n✓ Use proper formatting that renders correctly in Google Docs\n\nCRITICAL FORMATTING RULES:\n\n1. **Executive Summary** (2-3 paragraphs, 150-250 words):\n   - Write flowing paragraphs separated by blank lines\n   - No bullets or numbers\n   - Professional, engaging introduction\n\n2. **Scope of Work** (4-6 main sections):\n   - Format EXACTLY like this:\n   \n   1. Section Title\n   ● First deliverable point\n   ● Second deliverable point\n   ● Third deliverable point\n   \n   2. Next Section Title\n   ● First deliverable point\n   ● Second deliverable point\n   \n   - Use actual bullet character: ●\n   - Add blank line between sections\n   - Each bullet should be a complete, clear deliverable\n   - 3-6 bullets per section\n\n3. **Costing** - Generate as separate fields:\n   - month1_focus: Brief description (e.g., \"Technical SEO + Setup\")\n   - month1_cost: Amount with ₹ symbol (e.g., \"₹1,50,000\")\n   - Repeat for months 2, 3, 4\n   - total_cost: Total amount\n\n4. **Timeline** (2-3 sentences, 100-150 words):\n   - Describe the 4-month execution plan\n   - Professional paragraph format\n   - Mention structured delivery and communication\n\n5. **Conclusion** (60-100 words):\n   - Professional closing paragraph\n   - Express eagerness to collaborate\n   - Include contact: [YOUR_EMAIL], [YOUR_PHONE]\n   - Mention proposal validity: 30 days\n\nOUTPUT FORMAT:\nReturn ONLY valid JSON with these exact fields:\n{\n  \"executive_summary\": \"Paragraph 1 text here.\\n\\nParagraph 2 text here.\\n\\nParagraph 3 text here.\",\n  \"scope_of_work\": \"1. Section Title\\n● Deliverable one\\n● Deliverable two\\n● Deliverable three\\n\\n2. Next Section\\n● Deliverable one\\n● Deliverable two\",\n  \"month1_focus\": \"Focus area description\",\n  \"month1_cost\": \"₹X,XX,XXX\",\n  \"month2_focus\": \"Focus area description\",\n  \"month2_cost\": \"₹X,XX,XXX\",\n  \"month3_focus\": \"Focus area description\",\n  \"month3_cost\": \"₹X,XX,XXX\",\n  \"month4_focus\": \"Focus area description\",\n  \"month4_cost\": \"₹X,XX,XXX\",\n  \"total_cost\": \"₹X,XX,XXX\",\n  \"timeline\": \"Timeline description paragraph.\",\n  \"conclusion\": \"Closing paragraph with contact details.\"\n}\n\nIMPORTANT:\n- Use \\n for single line break\n- Use \\n\\n for paragraph break\n- Use actual ● character for bullets (not asterisk or dash)\n- Never use markdown formatting\n- Ensure costs are realistic for 4-month engagements (₹1,20,000 - ₹7,00,000 range)\n- Match the professional tone of the reference SEO proposal"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "fe0185ea-bd06-4a26-9299-5e0a107721ee",
      "name": "触发器:新表格行",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -864,
        32
      ],
      "parameters": {
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultName": "Proposal Input Sheet"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f7977e27-0016-4c9b-b4b4-da5bc31a5e5f",
      "name": "模型:GPT-4o",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -416,
        256
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {
          "temperature": 0.7
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c70c2f9e-e563-475d-91f4-c40fc2170681",
      "name": "解析器:JSON输出",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -160,
        256
      ],
      "parameters": {
        "jsonSchemaExample": "{\n    \"executive_summary\": \"Professional summary paragraph\",\n    \"scope_of_work\": \"1. Section\\\\n● Item\\\\n● Item\\\\n\\\\n2. Section\\\\n● Item\",\n    \"month1_focus\": \"Discovery & Planning\",\n    \"month1_cost\": \"₹1,50,000\",\n    \"month2_focus\": \"Development\",\n    \"month2_cost\": \"₹2,00,000\",\n    \"month3_focus\": \"Integration\",\n    \"month3_cost\": \"₹1,80,000\",\n    \"month4_focus\": \"Deployment\",\n    \"month4_cost\": \"₹1,70,000\",\n    \"total_cost\": \"₹7,00,000\",\n    \"timeline\": \"Timeline description\",\n    \"conclusion\": \"Closing with contact info\"\n  }"
      },
      "typeVersion": 1.3
    },
    {
      "id": "fc54a244-22a4-4149-b63b-022dc7b8471a",
      "name": "填充:模板文档",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        64,
        32
      ],
      "parameters": {
        "actionsUi": {
          "actionFields": [
            {
              "text": "{{executive_summary}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.executive_summary }}"
            },
            {
              "text": "{{scope_of_work}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.scope_of_work }}"
            },
            {
              "text": "{{timeline}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.timeline }}"
            },
            {
              "text": "{{conclusion}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.conclusion }}"
            },
            {
              "text": "{{month1_focus}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month1_focus }}"
            },
            {
              "text": "{{month1_cost}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month1_cost }}"
            },
            {
              "text": "{{month2_focus}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month2_focus }}"
            },
            {
              "text": "{{month2_cost}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month2_cost }}"
            },
            {
              "text": "{{month3_focus}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month3_focus }}"
            },
            {
              "text": "{{month3_cost}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month3_cost }}"
            },
            {
              "text": "{{month4_focus}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month4_focus }}"
            },
            {
              "text": "{{month4_cost}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.month4_cost }}"
            },
            {
              "text": "{{total_cost}}",
              "action": "replaceAll",
              "replaceText": "={{ $json.output.total_cost }}"
            }
          ]
        },
        "operation": "update",
        "documentURL": "YOUR_TEMPLATE_DOCUMENT_ID"
      },
      "typeVersion": 2
    },
    {
      "id": "686245ec-056d-47de-a147-ce81478c9db7",
      "name": "下载:完成的提案",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        288,
        32
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.documentId }}"
        },
        "options": {},
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "91212aab-6097-471b-83fb-beeec786381a",
      "name": "归档:保存到Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        512,
        32
      ],
      "parameters": {
        "name": "={{ $('Trigger: New Sheet Row').item.json.clientName + '_Proposal_' + $now.format('yyyy-MM-dd') }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_OUTPUT_FOLDER_ID",
          "cachedResultUrl": "https://drive.google.com/drive/folders/",
          "cachedResultName": "Proposals Output"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "aecc7cee-e436-4813-ac5c-c8cd86bf7d12",
      "name": "重置:模板占位符",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        736,
        32
      ],
      "parameters": {
        "actionsUi": {
          "actionFields": [
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.executive_summary }}",
              "action": "replaceAll",
              "replaceText": "{{executive_summary}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.scope_of_work }}",
              "action": "replaceAll",
              "replaceText": "{{scope_of_work}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.timeline }}",
              "action": "replaceAll",
              "replaceText": "{{timeline}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.conclusion }}",
              "action": "replaceAll",
              "replaceText": "{{conclusion}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month1_focus }}",
              "action": "replaceAll",
              "replaceText": "{{month1_focus}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month1_cost }}",
              "action": "replaceAll",
              "replaceText": "{{month1_cost}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month2_focus }}",
              "action": "replaceAll",
              "replaceText": "{{month2_focus}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month2_cost }}",
              "action": "replaceAll",
              "replaceText": "{{month2_cost}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month3_focus }}",
              "action": "replaceAll",
              "replaceText": "{{month3_focus}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month3_cost }}",
              "action": "replaceAll",
              "replaceText": "{{month3_cost}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month4_focus }}",
              "action": "replaceAll",
              "replaceText": "{{month4_focus}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.month4_cost }}",
              "action": "replaceAll",
              "replaceText": "{{month4_cost}}"
            },
            {
              "text": "={{ $('AI Agent: Generate Proposal').item.json.output.total_cost }}",
              "action": "replaceAll",
              "replaceText": "{{total_cost}}"
            }
          ]
        },
        "operation": "update",
        "documentURL": "YOUR_TEMPLATE_DOCUMENT_ID"
      },
      "typeVersion": 2
    },
    {
      "id": "aff26737-275a-4c7f-9c59-8df2d196d1b4",
      "name": "过滤:仅最新行",
      "type": "n8n-nodes-base.code",
      "position": [
        -640,
        32
      ],
      "parameters": {
        "jsCode": "// Filter to process only the last appended row\nconst items = $input.all();\n\nif (!items || items.length === 0) {\n  return [];\n}\n\n// Get the most recent entry\nconst lastItem = items[items.length - 1];\n\n// Return as single-item array\nreturn [{ json: lastItem.json }];"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "2140343a-e97e-4439-befe-225b63a8595d",
  "connections": {
    "Model: GPT-4o": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent: Generate Proposal",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Parser: JSON Output": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent: Generate Proposal",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Archive: Save to Drive": {
      "main": [
        [
          {
            "node": "Reset: Template Placeholders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Memory: Client Context": {
      "ai_memory": [
        [
          {
            "node": "AI Agent: Generate Proposal",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Trigger: New Sheet Row": {
      "main": [
        [
          {
            "node": "Filter: Latest Row Only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter: Latest Row Only": {
      "main": [
        [
          {
            "node": "AI Agent: Generate Proposal",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent: Generate Proposal": {
      "main": [
        [
          {
            "node": "Populate: Template Document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Populate: Template Document": {
      "main": [
        [
          {
            "node": "Download: Completed Proposal",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download: Completed Proposal": {
      "main": [
        [
          {
            "node": "Archive: Save to Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 文档提取, 多模态 AI

需要付费吗?

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

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

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

作者
Rahul Joshi

Rahul Joshi

@rahul08

Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.

外部链接
在 n8n.io 查看

分享此工作流