2Slides Logo
HubSpot + AI 簡報:銷售提案自動化實戰手冊(2026)
2Slides Team
7 min read

HubSpot + AI 簡報:銷售簡報自動化實戰手冊(2026)

對於 2026 年使用 HubSpot 的銷售團隊來說,自動化每個帳戶的銷售簡報的投資回報率是可衡量的:業務代表平均每週節省 2-4 小時、會議進展率提升 12-18%,以及團隊簡報準備的差異性降低 30-60%。2026 年 HubSpot + 2Slides 工作流程使用 HubSpot 中已有的數據(公司、交易階段、產品興趣、關鍵聯絡人、競爭對手替代方案),透過三種整合路徑為任何帳戶生成完全個人化的銷售簡報:HubSpot Workflow → Webhook → 2Slides API;具有「生成簡報」按鈕的自訂 HubSpot App Card;針對特定階段所有交易的每日批次排程。本手冊包含確切的 webhook 有效載荷、將 HubSpot 欄位轉換為簡報內容的提示模板,以及目前實際 RevOps 團隊在生產環境中使用的 2Slides API 流程(generate → jobs/:id → download)。

如果您為使用 HubSpot 的銷售團隊負責營收營運,您已經知道問題所在:每位業務代表都在要求行銷或銷售支援團隊在下次電話會議前對簡報進行「小小調整」。將這個數字乘以四十名業務代表和三百筆進行中的交易,您就有了一份全職工作——將 Google Slides 模板與類似 Salesforce 的 CRM 數據黏合在一起——只是您使用的是 HubSpot,它沒有相當於 Salesforce 文件生成模組的原生功能。

本手冊向您展示如何將 HubSpot 連接到 2Slides V1 API,使任何階段的任何交易都能產生個人化、符合品牌規範、適用於各種通路的銷售簡報——無需人工觸碰母版投影片。以下模式被 B2B SaaS、網路安全和企業 AI 公司的 RevOps 團隊使用,推動平均合約價值從 4 萬美元提升至 40 萬美元以上。


為什麼 HubSpot 驅動的簡報能勝出

將銷售簡報自動化整合至 HubSpot 的商業論證,來自三個可量化的槓桿。

槓桿 1:AE 時間回收。 對擁有 20 席以上部署的 2Slides 客戶進行內部觀察顯示,業務主管(Account Executive)每週花費 2-4 小時在簡報客製化上——改寫開場投影片、更新標誌、貼上競爭對手的弱點、替換 ROI 計算器。以完全成本計算 AE 年薪 $160K 來看,這相當於每位 AE 每年 $6,400-$12,800 的純投影片勞動成本。對於一個 40 人的銷售團隊,保守估計每年可回收 $256K 的產能。

槓桿 2:會議轉換率。 從即時 CRM 資料生成的簡報——意味著公司實際的營收區間、關鍵決策者的實際職稱、交易記錄中實際列出的競爭對手——相比通用範本簡報,後續會議預約轉換率高出 12-18%。原因很簡單:具體性傳達準備充分,而準備充分傳達這位銷售人員值得第二次會議。

槓桿 3:變異度降低。 您最頂尖的四分之一 AE 能製作出色的簡報。您最底層的四分之一製作出平庸的簡報,導致銷售管道流失。自動化能提升底層表現。在群組資料中,執行 HubSpot 觸發簡報生成的 RevOps 團隊報告,以主管 QA 評分衡量的簡報品質變異度降低了 30-60%。

這三者的共同模式:簡報不是產品,準備工作才是產品。自動化準備工作是 RevOps 在 2026 年能採取的最高槓桿動作。若要深入了解啟用面向的內容,請參閱我們關於如何使用 AI 創建銷售啟用簡報的指南。

2026 年 HubSpot + 2Slides 架構

在深入了解每種方法之前,以下是每個實作都遵循的架構:

HubSpot CRM (交易、公司、聯絡人) ├── 觸發器 (工作流程、應用程式卡片、cron) 轉換層 (serverless 函式 / Zapier / Make) │ - 從 CRM 欄位建構提示 │ - 呼叫 2Slides V1 API 2Slides V1 API ├── POST /api/v1/slides/generate (回傳 jobId) ├── GET /api/v1/jobs/{id} (輪詢直到 status = success) └── GET /api/v1/slides/download-slides-pages-voices (資源 URLs) 交付 (回傳至 HubSpot 交易作為備註、發送電子郵件給 AE、Slack 直接訊息)

2Slides API 對每個任務而言是無狀態的、非同步的,並採用點數計量制。您使用 API 金鑰標頭

x-api-key: sk-2slides-...
進行身份驗證。每次生成簡報都會立即回傳一個
jobId
,您需要輪詢
/api/v1/jobs/{id}
直到狀態從
pending
processing
success
轉換完成。一旦成功,您就可以獲取最終的 PPTX、PDF 或每頁的資源 URLs。

方法一:HubSpot 工作流程 → Webhook → 2Slides API

這是最常見的整合方式。HubSpot 工作流程會監控交易管道的階段變更,並向與 2Slides API 溝通的無伺服器函式發送 webhook。

步驟 1:建立 HubSpot 工作流程

在 HubSpot 中,前往自動化 → 工作流程 → 建立工作流程 → 以交易為基礎。設定註冊觸發條件:

  • 篩選條件:
    交易階段
    為以下任一項:
    探索完成
    示範已安排
    提案已發送
  • 重新註冊:在階段變更時啟用

新增發送 webhook 動作:

  • 方法:
    POST
  • URL:
    https://your-revops-fn.vercel.app/api/hubspot/generate-deck
  • 包含
    交易
    關聯公司
    主要聯絡人
    屬性群組

步驟 2:轉換器函式

將此部署到 Vercel、Cloudflare Workers 或 AWS Lambda。該函式接收 HubSpot webhook,組成 2Slides 提示詞,並啟動生成流程。

// /api/hubspot/generate-deck.ts export async function POST(req: Request) { const payload = await req.json() const deal = payload.properties const company = payload.associations?.company?.properties ?? {} const contact = payload.associations?.contact?.properties ?? {} const prompt = buildDeckPrompt({ deal, company, contact }) const generateRes = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY!, }, body: JSON.stringify({ prompt, slide_count: 12, language: 'en', aspect_ratio: '16:9', theme_id: process.env.BRAND_THEME_ID, // 您的鎖定品牌主題 metadata: { hubspot_deal_id: deal.hs_object_id, account: company.name, }, }), }) const { jobId } = await generateRes.json() // 保存 jobId → 交易關聯以供稍後查詢 await kv.set(`deal:${deal.hs_object_id}:job`, jobId, { ex: 86400 }) return Response.json({ ok: true, jobId }) }

步驟 3:輪詢和交付

第二個函式(由 Vercel Cron 每 90 秒呼叫一次,或由 HubSpot 的延遲工作流程重新進入呼叫)會輪詢

/api/v1/jobs/{id}
,成功時將簡報 URL 寫回交易作為互動記錄:

const jobRes = await fetch(`https://2slides.com/api/v1/jobs/${jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY! }, }) const job = await jobRes.json() if (job.status === 'success') { const assets = await fetch( `https://2slides.com/api/v1/slides/download-slides-pages-voices?jobId=${jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY! } } ).then(r => r.json()) await hubspotClient.crm.objects.notes.basicApi.create({ properties: { hs_note_body: `新簡報已準備好:${assets.pptx_url}`, hs_timestamp: Date.now(), }, associations: [{ to: { id: deal.hs_object_id }, types: [{ category: 'HUBSPOT_DEFINED', typeId: 214 }] }], }) }

這與我們在 Zapier 週報自動化中使用的模式相同 — 生成呼叫、輪詢、交付 — 只是透過 HubSpot 而非 Zapier 進行連接。

方法 2:HubSpot App Card 與 Generate Deck 按鈕

方法 1 是自動化的。方法 2 則是按需執行:AE 在 HubSpot 中開啟交易,在右側邊欄看到一個自訂卡片,點擊 Generate Deck,兩分鐘後簡報就會送到他們的收件匣。

這使用了 HubSpot 的 UI Extension(Developer Projects 平台的一部分)。

UI Extension 程式碼

// src/app/extensions/DealDeckCard.tsx import { hubspot, Button, Flex, Text, Alert, LoadingSpinner, } from '@hubspot/ui-extensions' import { useState } from 'react' hubspot.extend(({ context, runServerlessFunction }) => ( <DeckCard context={context} runServerless={runServerlessFunction} /> )) function DeckCard({ context, runServerless }) { const [state, setState] = useState<'idle' | 'working' | 'done' | 'error'>('idle') const [deckUrl, setDeckUrl] = useState<string | null>(null) async function onClick() { setState('working') const { response } = await runServerless({ name: 'generateDeck', parameters: { dealId: context.crm.objectId }, }) if (response.deckUrl) { setDeckUrl(response.deckUrl) setState('done') } else { setState('error') } } return ( <Flex direction="column" gap="sm"> <Text>使用 2Slides 為此客戶生成個人化銷售簡報。</Text> {state === 'idle' && <Button onClick={onClick}>Generate Deck</Button>} {state === 'working' && <LoadingSpinner label="建立簡報中(90–120秒)" />} {state === 'done' && deckUrl && ( <Alert title="簡報已完成"> <a href={deckUrl} target="_blank" rel="noreferrer">開啟簡報</a> </Alert> )} {state === 'error' && <Alert variant="danger">生成失敗 — 請查看 RevOps 日誌。</Alert>} </Flex> ) }

Serverless 配套功能

上述引用的 serverless 函式(

generateDeck
)位於同一個 HubSpot app 專案中,並呼叫與方法 1 相同的
/api/v1/slides/generate
+
/api/v1/jobs/{id}
流程,但它會阻塞直到任務成功(或逾時)才將簡報 URL 返回給卡片。

// src/app/app.functions/generateDeck.js exports.main = async (context) => { const { dealId } = context.parameters const deal = await hubspotFetchDeal(dealId) const prompt = buildDeckPrompt(deal) const gen = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY }, body: JSON.stringify({ prompt, slide_count: 12, theme_id: process.env.BRAND_THEME_ID }), }).then(r => r.json()) // 輪詢最多 3 分鐘 for (let i = 0; i < 36; i++) { await new Promise(r => setTimeout(r, 5000)) const job = await fetch(`https://2slides.com/api/v1/jobs/${gen.jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY }, }).then(r => r.json()) if (job.status === 'success') { return { deckUrl: job.result?.pptx_url } } if (job.status === 'failed') throw new Error(job.error || 'generation failed') } throw new Error('timeout') }

這種模式 — CRM 物件 → 擴充卡片 → API 呼叫 → 內聯結果 — 與行銷團隊擴展內容生產時使用的方法相同;請參閱行銷團隊如何大規模執行 AI 簡報

方法 3:排程批次生成

並非每份簡報都需要即時生成。對於可預測的銷售流程審查——每週一早晨、每季業務檢討、每次 MEDDPICC 階段更新——定時批次處理比即時 webhook 更經濟且可靠。

模式

執行每日排程任務,查詢 HubSpot 中所有目標階段的交易,為每筆交易生成最新簡報,並在早晨將摘要電郵寄給業務代表。

// /api/cron/nightly-deck-refresh.ts export const runtime = 'nodejs' export const maxDuration = 300 export async function GET(req: Request) { // Vercel Cron 使用 CRON_SECRET 進行驗證 if (req.headers.get('authorization') !== `Bearer ${process.env.CRON_SECRET}`) { return new Response('Unauthorized', { status: 401 }) } const deals = await hubspotClient.crm.deals.searchApi.doSearch({ filterGroups: [{ filters: [ { propertyName: 'dealstage', operator: 'EQ', value: 'proposal_sent' }, { propertyName: 'hs_lastmodifieddate', operator: 'GT', value: String(Date.now() - 86400000) }, ], }], properties: ['dealname', 'amount', 'competitor', 'product_interest', 'champion_title'], limit: 100, }) const jobs = await Promise.all(deals.results.map(async (deal) => { const prompt = buildDeckPrompt(deal) const res = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY! }, body: JSON.stringify({ prompt, slide_count: 10, theme_id: process.env.BRAND_THEME_ID }), }).then(r => r.json()) return { dealId: deal.id, jobId: res.jobId, owner: deal.properties.hubspot_owner_id } })) await enqueueDeliveryJobs(jobs) // SQS / Upstash QStash / Trigger.dev return Response.json({ enqueued: jobs.length }) }

vercel.json
中設定排程:

{ "crons": [ { "path": "/api/cron/nightly-deck-refresh", "schedule": "0 6 * * 1-5" } ] }

早上六點,工作日執行。業務代表打開電子郵件,簡報已準備就緒。

將 CRM 欄位轉換為簡報內容的提示範本

決定簡報品質最關鍵的因素就是提示詞。好的提示詞會編碼資深業務代表(AE)對新人的指導方針:「當公司是X,關鍵決策者處於Y職位,專注於Z成果時,就這樣建構簡報。」可直接使用的範本:

function buildDeckPrompt({ deal, company, contact }: Ctx) { return ` 為 B2B 軟體評估生成一份 10-12 頁的銷售簡報。 客戶背景資訊 - 公司:${company.name} - 產業:${company.industry ?? '未指定'} - 年營收區間:${company.annualrevenue ?? '未指定'} - 員工數:${company.numberofemployees ?? '未指定'} - 網站:${company.domain} 交易背景資訊 - 交易階段:${deal.dealstage} - 交易金額:$${deal.amount} - 產品興趣:${deal.product_interest} - 優先使用情境:${deal.primary_use_case} - 競爭對手名單:${deal.competitors /* 逗號分隔 */} - 評估時程:${deal.close_date} 關鍵決策者背景資訊 - 姓名:${contact.firstname} ${contact.lastname} - 職稱:${contact.jobtitle} - 已知優先事項:${contact.priorities} 簡報結構 1. 標題頁 —「${company.name} × <您的品牌>:${deal.primary_use_case}2. 他們的現況 — 3 個要點,針對 ${company.industry} 產業 3. 不採取行動的成本 — 使用 ${company.annualrevenue} 區間量化 4. 我們的方法 — 3 大支柱,對應 ${deal.primary_use_case} 5. 實證案例 — 來自 ${company.industry}(或相關)產業的 2 個案例 6. 與 ${deal.competitors} 的差異化 — 參考下方戰鬥卡區塊 7. 實施計劃 — 依據 ${deal.close_date} 調整的 30/60/90 天規劃 8. 商務摘要 — 以 $${deal.amount} 為基準的價格區間 9. 風險與應對措施 10. 後續步驟 — 對應 ${deal.dealstage} 語調風格 - 配合受眾:${contact.jobtitle} - 如職稱包含副總、資深副總、長字輩、總監則採正式語氣;否則採對話式風格。 - 每一頁:一個概念、一張圖表或一句引言,避免文字牆。 `.trim() }

將範本納入版本控制。當行銷部門更新訊息框架時,您只需更改一個檔案,下次排程執行時就會採用新版本。

處理競爭對手方案

HubSpot 中的

deal.competitors
欄位——無論它是自訂的單行文字欄位、多選核取方塊,還是下拉選單——都是無價之寶。有條件地將競爭分析區塊注入提示詞中:

const BATTLECARDS: Record<string, string> = { 'Competitor A': ` Competitor A 的定位是 <他們的主張>。 反擊點:<你的證明點> + <三字標語>。 可埋下的引導問題:「他們最後一次發布安全稽核是什麼時候?」 `, 'Competitor B': ` Competitor B 主打 <他們的角度>。 反擊點:<你的反擊> — 參考 <客戶名稱> 轉換案例。 可埋下的問題:「詢問他們超過 500 位使用者後的每席位上限。」 `, } function battlecardSection(competitorsCsv: string) { const names = competitorsCsv.split(',').map(s => s.trim()).filter(Boolean) if (!names.length) return '' return ` 競爭分析卡 ${names.map(n => BATTLECARDS[n] ?? '').filter(Boolean).join('\n')} 使用這些內容來填充差異化投影片。提及競爭對手的次數不要超過兩次。 `.trim() }

battlecardSection(deal.competitors)
的結果附加到你的提示詞中。這份簡報現在具備了 AE 等級的競爭框架——這種品質通常需要與競爭情報負責人通話三十分鐘才能取得。

一旦你有超過十個競爭分析卡,就將它們儲存在資料庫表格中,而不是寫死在程式碼裡。你的產品行銷主管可以直接編輯它們,無需提交 PR。

常見問題

如何防止 HubSpot 在每次屬性更新時產生重複簡報?

在交易物件中新增一個名為

last_deck_generated_at
的屬性,並在 HubSpot Workflow 中加入篩選條件:
last_deck_generated_at
為未知或距今超過 7 天。您的轉換函式應在成功產生簡報後,透過 Deal API 將此時間戳寫回 HubSpot。僅此一項就能防止 90% 的 API 呼叫浪費。

這在 2Slides 點數上的成本是多少?

每次

/api/v1/slides/generate
呼叫會根據投影片數量和任何附加功能(圖片生成、語音旁白)扣除點數。對於一個典型的 10 張投影片銷售簡報加上品牌圖片,每份簡報預算為 20–40 點數。一個 RevOps 團隊每月產生 500 份簡報的費用落在 $150–$400 區間——遠低於單一企業交易中節省的業務主管人力成本。

我可以生成英文以外語言的簡報嗎?

可以。在

/api/v1/slides/generate
請求中傳入
language: 'de'
language: 'ja'
language: 'es'
等。當您的關鍵聯絡人記錄顯示偏好非英文語言時,提示模板也應包含本地化的前言。

如何固定視覺品牌以讓每份簡報外觀一致?

在每個生成請求中使用鎖定的

theme_id
。在 2Slides UI 中一次性建立您的品牌主題,複製其 ID,並將其儲存為環境變數
BRAND_THEME_ID
。主題控制字型、色板、標誌位置和母版配置——因此內容隨帳戶變化,而外觀框架保持像素級一致。

如果生成工作失敗怎麼辦?

輪詢

/api/v1/jobs/{id}
並檢查
status
。若為
failed
,回應會包含帶有機器可讀代碼的
error
。以指數退避策略重試一次;如果第二次仍失敗,向 RevOps 頻道發送 Slack 警報,並回退到靜態模板簡報,以免業務主管在會議前受阻。

結論

HubSpot 並不試圖成為 Salesforce,這完全沒問題——它的簡潔性本身就是特色。但簡潔性也意味著它不提供原生的文件自動化功能。這個缺口是特色而非缺陷,因為這意味著將 HubSpot 連接到 AI 簡報 API 的 RevOps 團隊,掌握了銷售技術堆疊中最有價值的接觸點:呈現在買家面前的簡報。

上述三種方法——工作流程 webhook、應用程式卡片按鈕、排程批次處理——涵蓋了銷售團隊所需的全方位生成觸發器。選擇與你的漏斗階段相匹配的方法。探索和展示階段幾乎總是需要隨選生成(應用程式卡片)。提案和談判階段最受益於階段變更時的自動化(工作流程 webhook)。業績審查和 QBR 準備則適合批次處理(cron)。三種方法同時運行,業務機會管道中的每筆交易都能在觸手可及的範圍內,每天擁有一份最新的、CRM 真實資料的簡報。

從 HubSpot 自動化您的銷售簡報——取得 2Slides API 金鑰,並在一天內將其整合到您的下一個工作流程中。

About 2Slides

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

Try For Free