2Slides Logo
大規模個人化銷售提案:Google Sheets + API(2026)
2Slides Team
8 min read

大規模個人化銷售提案:Google Sheets + API(2026)

要大規模產生個人化銷售提案,將潛在客戶資料保存在 Google Sheet(或 CRM 匯出檔)中,將每一列轉成結構化提示,並使用固定的 themeId,將其送到 2Slides Fast PPT 端點 POST /api/v1/slides/generate,讓每份簡報都共享同一設計。每份 10 頁的提案花費 100 點數,約 0.25 美元,約 30 秒內產出可原生編輯的 PPTX,並可自動寄給業務。此作法適合 RevOps 與銷售營運主管,以及自行執行外撥的創業者。

重點摘要

  • 一次 POST /api/v1/slides/generate 呼叫,將試算表一列轉成設計好的可編輯 PPTX,費用為每頁 10 點數。
  • GET /api/v1/themes/search?query=pitch deck 取得固定的 themeId,讓 200 份提案視覺一致,業務只需修改內容。
  • responseLanguage 可接受每列的語言名稱(如「Spanish」、「Portuguese」),讓 LATAM 與 EMEA 帳戶能從同一張表產出母語簡報。
  • 產生端點限制每個金鑰每分鐘 6 次請求;Python 隊列在批次間休眠,約 70 分鐘可完成 200 份提案。
  • 註冊即送 500 免費點數,可測試 5 份提案;每月 500 份生產提案約需 102.50 美元點數。

適用對象

你是 RevOps 或銷售營運主管,或是自行執行外撥的創業者。業務花 45 分鐘手動製作提案簡報,且 80% 與上一份相同,導致一半合格潛在客戶根本沒拿到量身訂做的提案。你的潛在客戶資料已存在 Google Sheet 或 CRM 匯出檔,包含公司、產業、痛點、價格方案與聯絡人姓名。

若每份提案需要自訂視覺或旁白影片,請勿使用此作法。那是後面介紹的影像設計流程適合的工作。如果你的銷售團隊使用 HubSpot,且想從交易階段觸發提案,請參考本文稍早提及的 HubSpot AI 簡報與銷售簡報自動化 CRM 原生範例。

工作流程一覽

步驟工具發生什麼事2Slides 端點 / 點數
1Google Sheets 或 CRM 匯出每列一個潛在客戶:公司、產業、痛點、價格方案、聯絡人、語言
22Slides Templates Hub 或 API選擇一個 pitch-deck 範本並記錄其 themeIdGET /api/v1/themes/search,免費
3Zapier Code 步驟或 Python從列資料組成結構化 userInput 提示
4Zapier Webhooks 或 requestsmode: "async" 提交提案工作POST /api/v1/slides/generate,每頁 10 點數
5延遲 60 秒,接著 GET輪詢直到 statussuccessGET /api/v1/jobs/{jobId},免費
6Gmail 步驟或 SMTP將可編輯 PPTX downloadUrl 寄給業務
7Google Sheets 更新jobIddownloadUrl 寫回該列以供稽核

步驟 1:結構化潛在客戶試算表

提案品質取決於你提供的欄位。每列一個潛在客戶,包含以下欄位即可:

companyindustrycontact_namecontact_titlepain_pointspricing_tierpricelanguagerep_emailstatus
Northwind Logistics貨運與物流Mariana Ruiz營運副總手動派車排程;18% 空車率;無即時 ETAGrowthUSD 1,800/月Spanishj.ortiz@yourco.comready
Contoso Clinics門診醫療David Chen營運長紙本報到表;平均等候 22 分鐘;缺席率 14%TeamUSD 950/月Englisha.park@yourco.comready

兩個規則讓後續提示可靠。第一,pain_points 用簡短的分號分隔短語,不用段落,讓模型明確抓到三個痛點。第二,language 欄位填寫 API 預期的語言名稱(如「Spanish」而非「es」)。status 欄位讓自動化跳過已處理列。

若從 CRM 匯出,請對應相同欄位。若不想用 CSV 匯出,Python 版本也可直接用 Google Sheets API 讀取試算表。

步驟 2:選擇一個 themeId,讓所有提案共享設計

提案系統的重點是統一性。若每份簡報用不同範本,品牌形象會像十家公司。先搜尋範本庫,挑一個 pitch-deck 或提案範本,並在自動化中硬編其 themeId

先到 2slides.com/templates 視覺瀏覽,篩選 Pitch Deck,記下範本名稱。

2Slides Templates Hub with curated slide themes and Pitch Deck filter
圖 1:Templates Hub 篩選為 Pitch Deck。先在此挑範本,再用搜尋端點取得其 themeId。

接著用 API 取得同一範本的 ID。搜尋端點免費,每分鐘限 6 次,此處只呼叫一次無影響。

curl -s "https://2slides.com/api/v1/themes/search?query=pitch%20deck&limit=5" \ -H "Authorization: Bearer $SLIDES_API_KEY"

回應列出符合範本及其 themeId 與元資料。將 ID 複製到環境變數(PROPOSAL_THEME_ID),讓 Zapier 步驟與 Python 腳本讀取同一值。每年換一次範本,不要每筆交易換。

API 使用的引擎與 Fast PPT 網頁工具相同:貼上內容、挑範本、取得 PPTX。端點就是無頭執行這流程,對試算表每列都能產出。

2Slides Fast PPT interface with content box and template gallery
圖 2:瀏覽器中的 Fast PPT。generate 端點無 UI 執行此流程,讓 Google Sheets 到 PowerPoint 自動化成真。

步驟 3:組成提示並呼叫銷售提案自動化 API

提案提示應結構化,不是對話式。告訴模型潛在客戶是誰、痛點、建議方案,以及要產出哪些章節、順序。價格獨立一頁,方便業務修改不影響其他頁。

以下是上述試算表第一列的完整呼叫。注意 responseLanguage 從該列取得,mode 設為 "async" 讓呼叫立即回傳工作 ID。

curl -s -X POST https://2slides.com/api/v1/slides/generate \ -H "Authorization: Bearer $SLIDES_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "userInput": "Sales proposal for Northwind Logistics (freight and logistics). Prepared for Mariana Ruiz, VP Operations. Pain points: manual dispatch scheduling; 18% empty-mile rate; no live ETAs for customers. Recommended plan: Growth tier at USD 1,800/month for 25 dispatcher seats. Structure: 1) Our understanding of Northwind Logistics 2) Goals for the next 12 months 3) Proposed solution mapped to each pain point 4) 90-day rollout plan 5) Pricing (own slide) 6) Next steps. Consultative tone, no buzzwords.", "themeId": "'"$PROPOSAL_THEME_ID"'", "responseLanguage": "Spanish", "mode": "async" }'

每個 2Slides 回應都包在相同結構中,Zapier 映射欄位時很重要:

{ "success": true, "data": { "jobId": "a1b2c3d4", "status": "pending" } }

每 5 到 10 秒輪詢一次工作。Fast PPT 簡報通常約 30 秒完成。

curl -s https://2slides.com/api/v1/jobs/a1b2c3d4 \ -H "Authorization: Bearer $SLIDES_API_KEY" # { "success": true, "data": { "jobId": "a1b2c3d4", "status": "success", "downloadUrl": "https://..." } }

POST /api/v1/slides/generate parameters: themeId, userInput, responseLanguage, mode
圖 3:generate 端點的四個參數。themeId 與 userInput 必填;responseLanguage 預設 Auto,mode 預設 sync。

若省略 mode,端點同步執行並在同一回應回傳 downloadUrl。單次呼叫較簡單,但 Zapier 這類平台 HTTP 超時短,批次作業用 async 較安全且合適。

步驟 4:Zapier 從新試算表列產生 PowerPoint

無工程師的團隊,Zapier 可在列標記 ready 後兩分鐘內將提案寄到業務信箱。Webhooks by Zapier 應用執行兩次 API 呼叫,其他都是標準步驟。

  • 觸發器:Google Sheets,新增或更新列。加 Filter 步驟,只讓 status 等於 ready 的列繼續。
  • Code by Zapier (JavaScript) 或 Formatter:從列欄位組成 userInput(以下程式碼片段)。
  • Webhooks by Zapier,POSThttps://2slides.com/api/v1/slides/generate。Header Authorization: Bearer <你的金鑰>,JSON 主體含 userInputthemeIdresponseLanguagemode: "async"。映射回應的 data.jobId
  • Delay by Zapier,延遲 60 秒。
  • Webhooks by Zapier,GET https://2slides.com/api/v1/jobs/{{jobId}},同 Header。映射 data.statusdata.downloadUrl
  • Filter:只在 data.statussuccess 時繼續。若工作仍在處理,第二組 Delay 與 GET 可補足。
  • Gmail:寄信rep_email,主旨含潛在客戶名稱,內文或附件欄放 downloadUrl
  • Google Sheets:更新列,寫入 jobIddownloadUrl,並將 status 設為 done

Code 步驟將提示邏輯集中,銷售經理可改提案結構而不碰 webhook:

// Code by Zapier (JavaScript)。inputData 欄位對應試算表列。 const { company, industry, contact_name, contact_title, pain_points, pricing_tier, price, language, } = inputData; const userInput = [ `Sales proposal for ${company} (${industry}).`, `Prepared for ${contact_name}, ${contact_title}.`, `Pain points: ${pain_points}.`, `Recommended plan: ${pricing_tier} tier at ${price}.`, `Structure: 1) Our understanding of ${company} 2) Goals for the next 12 months`, `3) Proposed solution mapped to each pain point 4) 90-day rollout plan`, `5) Pricing (own slide) 6) Next steps. Consultative tone, no buzzwords.`, ].join(" "); output = { userInput, responseLanguage: language || "English" };

API 金鑰放在 Webhooks 步驟 Header,絕不放試算表。若多位業務同時標記 ready,Zapier 可能在一分鐘內發超過 6 次 generate 呼叫,超出部分會收到速率限制錯誤,Zapier 內建重播會處理。量較穩定時,請用下方 Python 批次腳本。相同 Zapier 模式也用於 用 Zapier 與 2Slides 自動化每週報告簡報

步驟 5:用 Python 批次產生 200 份個人化銷售提案

若活動需在週一前完成 200 份提案,跑腳本比發 200 個 Zap 好。以下腳本讀取試算表 CSV 匯出檔(檔案→下載→CSV),分批提交 6 筆工作以遵守 generate 每分鐘 6 次限制,輪詢每筆工作間隔 6 秒以低於 jobs 每分鐘 10 次限制,下載每份 PPTX,並寫結果到第二個 CSV,供 Gmail 合併或 CRM 匯入用。

import csv, os, time, requests API = "https://2slides.com/api/v1" HEADERS = { "Authorization": f"Bearer {os.environ['SLIDES_API_KEY']}", "Content-Type": "application/json", } THEME_ID = os.environ["PROPOSAL_THEME_ID"] # 從 GET /themes/search?query=pitch deck 取得 BATCH = 6 # generate:每金鑰每分鐘 6 次請求 POLL_GAP = 6 # jobs:每分鐘 10 次請求 -> 每 6 秒輪詢一次 OUT_DIR = "proposals" def build_prompt(row): return ( f"Sales proposal for {row['company']} ({row['industry']}). " f"Prepared for {row['contact_name']}, {row['contact_title']}. " f"Pain points: {row['pain_points']}. " f"Recommended plan: {row['pricing_tier']} tier at {row['price']}. " f"Structure: 1) Our understanding of {row['company']} 2) Goals for the next 12 months " f"3) Proposed solution mapped to each pain point 4) 90-day rollout plan " f"5) Pricing (own slide) 6) Next steps. Consultative tone, no buzzwords." ) def submit(row): r = requests.post(f"{API}/slides/generate", headers=HEADERS, timeout=60, json={ "userInput": build_prompt(row), "themeId": THEME_ID, "responseLanguage": row.get("language") or "English", "mode": "async", }) r.raise_for_status() body = r.json() # { success, data: { jobId, status } } if not body.get("success"): raise RuntimeError(body) return body["data"]["jobId"] def poll(job_id): r = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS, timeout=30) r.raise_for_status() return r.json()["data"] # { jobId, status, progress, downloadUrl } def download(url, path): with requests.get(url, stream=True, timeout=120) as r: r.raise_for_status() with open(path, "wb") as f: for chunk in r.iter_content(65536): f.write(chunk) def main(): os.makedirs(OUT_DIR, exist_ok=True) with open("prospects.csv", newline="", encoding="utf-8") as f: rows = [r for r in csv.DictReader(f) if r.get("status") == "ready"] results = [] for i in range(0, len(rows), BATCH): batch = rows[i:i + BATCH] window_start = time.time() pending = {submit(row): row for row in batch} print(f"submitted {len(pending)} jobs, {i + len(batch)}/{len(rows)} total") while pending: for job_id in list(pending): time.sleep(POLL_GAP) data = poll(job_id) if data["status"] == "success": row = pending.pop(job_id) safe = row["company"].replace(" ", "_") path = os.path.join(OUT_DIR, f"{safe}_proposal.pptx") download(data["downloadUrl"], path) results.append({**row, "jobId": job_id, "downloadUrl": data["downloadUrl"], "file": path, "status": "done"}) elif data["status"] == "failed": row = pending.pop(job_id) results.append({**row, "jobId": job_id, "downloadUrl": "", "file": "", "status": "failed"}) # 任何 60 秒內最多 6 次 generate 呼叫。 elapsed = time.time() - window_start if elapsed < 60: time.sleep(60 - elapsed) with open("proposals_out.csv", "w", newline="", encoding="utf-8") as f: w = csv.DictWriter(f, fieldnames=list(results[0].keys())) w.writeheader() w.writerows(results) if __name__ == "__main__": main()

時間:每批 6 筆約花 60 到 120 秒(含輪詢),200 份提案(34 批)約 70 分鐘完成。腳本依 status 可重複執行,若中斷於第 140 列,重跑只會送剩餘 60 筆 ready。更大規模與排隊模式,請參考 如何用 AI API 批次產生簡報

步驟 6:給業務可編輯的 PPTX,不是 PDF

generate 輸出是原生 PowerPoint 檔案:真實文字方塊、真實表格、範本母片。這是使用 Fast PPT 產生提案而非影像渲染簡報的原因。

業務會在產出後修改提案。通話中核准折扣、座位數變動、法務要在條款頁加條款、封面要放客戶 Logo。用可編輯 PPTX,業務打開檔案,編輯價格頁,直接寄出。用 PDF 或影像簡報,每次改都要重產生並重新審核整份簡報。

Gmail 步驟(或 CRM 郵件工具)應寄出 PPTX 檔案本身,不是檢視連結,且主旨帶潛在客戶名稱,方便業務日後查找。若想要精美留存檔,業務可在 PowerPoint 編輯後匯出 PDF。

強力提案簡報長什麼樣

寫步驟 3 的提示結構前,先看真實簡報。2Slides Gallery 有參考簡報可研究結構,或若走影像設計路線,可傳 referenceImageUrl 給 create-like-this 端點。這些是參考簡報,不是上述 API 輸出。

Perplexity ads pitch deck from the 2Slides Gallery, a reference for proposal structure
圖 4:2Slides Gallery 中的 pitch deck 封面。提案封面應標明潛在客戶、聯絡人與日期。

Perplexity ads pitch deck from the 2Slides Gallery, a reference for proposal structure
圖 5:同一 Gallery 簡報的後續頁。注意每頁只聚焦一個主題;在提示中用編號章節模仿此風格。

強力提案的三個模式可帶入提示:以潛在客戶用詞開場(pain_points 欄),每個解決方案對應一個痛點,價格獨立一頁。想深入了解各章節內容,請參考 如何用 AI 製作銷售啟動簡報

費用說明

Fast PPT 按每頁 10 點數計費,典型提案約 10 頁。範本搜尋與工作輪詢免費。

數量頁數點數點數包美金每份提案
每月 20 份提案2002,0001 × $5(2,000 點)$5.00$0.25
每月 500 份提案5,00050,0001 × $80(40,000 點)+ 1 × $22.50(10,000 點)$102.50$0.21

註冊即送 500 免費點數,足夠測試 5 份完整提案。點數按用量付費,無座位限制,一組共用金鑰可服務 12 人銷售團隊。

Fast PPT 還是影像設計簡報適合此用例?

需求使用原因
業務會修改的可編輯提案generate(Fast PPT),每頁 10 點數原生 PPTX,約 30 秒,範本一致
為少數企業帳戶打造視覺獨特簡報create-pdf-slides,每頁 10 + 100 點數(2K)從風格提示產生影像設計版面
配合現有品牌簡報風格create-like-this 搭配 referenceImageUrl,同費用從參考圖片推導設計系統
非同步銷售的旁白提案影片create-pdf-slidescreate-like-this,再用 generate-narration(210 點數/頁)Fast PPT 無法產生旁白影片

本文的試算表驅動大量流程,Fast PPT 是預設首選。影像管線留給 5% 以設計為差異化的交易。

常見陷阱

  • 超過每分鐘 6 次請求限制。 同時標記 20 列 ready,會在幾秒內發出 20 次 POST。請排隊:Python 腳本分批 6 筆並等待 60 秒;Zapier 依賴重播或用 Delay 步驟錯開。
  • API 金鑰放在試算表或客戶端腳本。 金鑰應放在 Zapier webhook Header 或伺服器端環境變數。否則任何有試算表的人都能花你的點數。
  • 語言代碼非語言名稱。 responseLanguage 要「Spanish」或「Portuguese」,非「es」或「pt-BR」。可在 Sheets 用下拉選單驗證欄位。
  • 期待 Fast PPT 產生旁白或 MP4。 generate-narration 端點只接受 create-pdf-slidescreate-like-this 工作。generate 產出僅 PPTX。
  • 將 4,000 字的發現通話稿丟給 userInput 請先摘要。三個分號分隔痛點勝過一大段筆記,價格頁保持清爽。
  • 映射錯誤的回應欄位。 工作 ID 在 data.jobId,非頂層。輪詢回應同樣包在 { success, data: { ... } }

常見問題解答

可以不透過 Google Sheets,直接從 CRM 資料產生銷售簡報嗎?

可以。API 只需 userInput 字串與 themeId,任何來源都行:HubSpot 工作流程、Salesforce 匯出、Postgres 查詢。Google Sheets 方便業務編輯列並標記 ready,無需工程協助。若想用 CRM 原生觸發交易階段變更,請參考本文前述 HubSpot 範例。

一份提案產生需多久?

Fast PPT 簡報工作開始後約 30 秒完成。Zapier 中,單次 60 秒延遲後輪詢幾乎足夠。Python 批次中,6 份提案一分鐘內送出,通常下一分鐘內全完成,200 份約 70 分鐘完成(單一 API 金鑰)。

每份提案看起來都一樣嗎?

設計會一樣,這是預期。因為每筆工作用同一 themeId,色彩、字型、版面在批次中完全一致,只有內容依潛在客戶不同。若想要兩種風格(如企業版與中小企業版),可在試算表加 theme 欄,映射兩個不同 themeId

其他簡報 API 支援此類自動化嗎?

有。Gamma API(developers.gamma.app)也提供類似產生自動化,但需 Pro 方案才有 API 金鑰。2Slides API 金鑰適用任何帳戶,包括免費帳戶(500 點數),且 Fast PPT 輸出是原生 PPTX,不是託管頁面,讓業務能直接編輯價格頁。

業務產出後能修改價格頁嗎?

能,這是使用 Fast PPT 路徑的主要原因。檔案是標準 PPTX,文字方塊與表格可編輯,業務可在 PowerPoint 或 Google Slides 改變座位數、套用核准折扣、加法務條款。無需重產生,其他頁面不受影響。

下一步

大規模個人化銷售提案靠三件事:乾淨的試算表、一個固定範本,以及遵守每分鐘 6 次請求的排隊機制。

About 2Slides

Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.

Try For Free