台灣製造業 B2B 電商用 HubSpot Sales Hub 管理詢價流程教學

Key Takeaways
- 先定義 Pipeline 階段與必填欄位,再談自動化
- 表單提交務必帶 hutk cookie,才能做來源歸因
- 用 Custom Code Action 計算排除假日的回價 SLA
- LLM 只做規格抽取與草稿,價格與交期由人審
- 工程圖存自有雲端,以簽章 URL 掛在 CRM 欄位
台灣製造業 B2B 電商可用 HubSpot Sales Hub 把詢價(RFQ)流程標準化:建立詢價自訂物件與交易 Pipeline、以表單與 API 收單、用 Workflow 自動分派與計 SLA、再以 Quotes 出報價。以下為完整設定步驟、程式碼範例與排錯方式。
為什麼台灣製造業的詢價流程特別難管理?
台灣製造商的詢價案件,跟一般 SaaS 的線上表單完全不是同一回事。一封詢價信裡可能夾著三張 2D 圖檔、一份規格表 Excel、外加客戶自己寫的 MOQ 與交期要求;業務要先判斷是不是既有料號、再找 RD 確認可行性、找採購估料、最後才回價。整個過程橫跨 Email、LINE、Excel 報價單與工廠 ERP,資料散落在四個地方。
這在跨境情境下更棘手。經濟部國際貿易署(Trade Administration, MOEA)公布的貿易統計顯示,台灣出口高度集中於電子零組件與機械設備,客戶端遍及美、歐、東南亞——代表同一組業務要同時處理不同時區、不同語言、不同稅務條件的詢價。而 Gartner 在其 B2B 買方研究中長期指出,B2B 採購決策通常涉及多位關係人並跨越數月,回應速度與資訊一致性直接影響成交率。
HubSpot Sales Hub 的價值不在於「多一個系統」,而在於把詢價變成有階段、有 SLA、有欄位、可被自動化與 AI 讀取的結構化資料。以下教學假設你已有 Sales Hub Professional 以上版本(自訂物件需 Enterprise,本文會提供兩種替代做法)。
開始前需要準備什麼?
在動手前先把下列前置條件確認完,可以少掉一半的返工:
- HubSpot 方案:Sales Hub Professional(Workflows、Quotes、Sequences 可用)。若要建立
RFQ自訂物件則需 Enterprise;沒有 Enterprise 時,用 Deal 物件加自訂屬性即可。 - 超級管理員權限(Super Admin),用來建立自訂屬性、Pipeline 與 Private App。
- 一個 Private App Access Token:在
設定 → 整合 → 私有應用程式建立,勾選crm.objects.deals.write、crm.objects.contacts.write、crm.schemas.deals.read、files、automation等 scope。 - 產品庫(Products)基礎資料:至少匯入常銷料號、單位、幣別(TWD / USD / EUR)。
- 網站端:官網或 B2B 電商站(Shopify Plus、Magento、或自建 Next.js)要能嵌入 HubSpot Form 或呼叫 Forms API。
- ERP 對接窗口:確認 ERP(鼎新、SAP B1、Odoo 皆常見)是否提供 REST 或中介資料庫,決定是即時 API 還是每日批次同步。
把 Private App token 存進環境變數,不要寫死在前端:
1export HUBSPOT_TOKEN="pat-na1-xxxxxxxx-xxxx-xxxx"2curl -s https://api.hubapi.com/crm/v3/objects/deals?limit=1 \3 -H "Authorization: Bearer $HUBSPOT_TOKEN"
預期輸出:HTTP 200,回傳一筆 deal 的 JSON。若回 401,代表 token 錯誤或 scope 未勾選。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
步驟一:設計詢價的資料模型
先決定「一筆詢價」在 CRM 裡是什麼物件。兩種常見做法:
做法 A:以 Deal 代表一筆詢價(Professional 可用)
一張 RFQ = 一筆 Deal,品項放在 Line Items。優點是原生支援 Quotes、Forecast、報表;缺點是同一客戶反覆詢價時 Deal 數量會膨脹。
做法 B:建立 RFQ 自訂物件(Enterprise)
RFQ 物件與 Company/Contact 關聯,成案後才轉出 Deal。適合詢價量大、成交率低於一成的沖壓、CNC 代工類型。
1curl -X POST https://api.hubapi.com/crm/v3/schemas \2 -H "Authorization: Bearer $HUBSPOT_TOKEN" \3 -H "Content-Type: application/json" \4 -d '{5 "name": "rfq",6 "labels": { "singular": "詢價單", "plural": "詢價單" },7 "primaryDisplayProperty": "rfq_number",8 "requiredProperties": ["rfq_number"],9 "properties": [10 { "name": "rfq_number", "label": "詢價單號", "type": "string", "fieldType": "text" },11 { "name": "part_no", "label": "客戶料號", "type": "string", "fieldType": "text" },12 { "name": "annual_volume", "label": "年需求量", "type": "number", "fieldType": "number" },13 { "name": "target_price", "label": "目標單價", "type": "number", "fieldType": "number" },14 { "name": "incoterms", "label": "貿易條件", "type": "enumeration", "fieldType": "select",15 "options": [16 { "label": "EXW", "value": "exw" },17 { "label": "FOB", "value": "fob" },18 { "label": "CIF", "value": "cif" },19 { "label": "DDP", "value": "ddp" }20 ] }21 ],22 "associatedObjects": ["CONTACT", "COMPANY"]23 }'
預期輸出:HTTP 201,回傳含 objectTypeId(例如 2-1234567)的 JSON。把這個 ID 記下來,後續 API 都會用到。
一定要建立的自訂屬性
不論用哪種做法,這幾個欄位建議一開始就開,因為之後補建會導致歷史資料空白:
rfq_source:詢價來源(官網表單 / 阿里巴巴 / 展會 / 代理商 / Email)drawing_file:圖檔連結(File 型別或 URL)rd_feasibility:技術可行性(待評估 / 可做 / 需改設計 / 不可做)costing_owner:估價負責人(HubSpot User 型別)sla_due_at:承諾回價時間(datetime)region:客戶區域(TW / SEA / NA / EU / ANZ)——跨時區分派會用到
步驟二:把網站詢價表單接進 HubSpot
直接嵌入 HubSpot Form
最快的做法,附件上傳、reCAPTCHA、GDPR 同意選項都是原生功能:
1<div id="rfq-form"></div>2<script charset="utf-8" src="//js.hs-scripts.com/YOUR_PORTAL_ID.js"></script>3<script>4 hbspt.forms.create({5 region: "na1",6 portalId: "YOUR_PORTAL_ID",7 formId: "YOUR_FORM_GUID",8 target: "#rfq-form",9 onFormReady: function ($form) {10 // 依瀏覽器語系預填區域,供後續自動分派使用11 const lang = navigator.language || "en";12 const region = lang.startsWith("zh") ? "TW" : lang.startsWith("ja") ? "SEA" : "NA";13 $form.querySelector('input[name="region"]').value = region;14 }15 });16</script>
自建前端時改用 Forms Submission API
若你的 B2B 電商是 Headless(Next.js + Shopify Plus 或自建),從後端 route 提交比較安全,也能先做圖檔病毒掃描:
1// app/api/rfq/route.js (Next.js App Router)2export async function POST(req) {3 const body = await req.json();4 const portalId = process.env.HS_PORTAL_ID;5 const formGuid = process.env.HS_RFQ_FORM_GUID;67 const payload = {8 fields: [9 { name: "email", value: body.email },10 { name: "company", value: body.company },11 { name: "part_no", value: body.partNo },12 { name: "annual_volume", value: String(body.annualVolume) },13 { name: "incoterms", value: body.incoterms },14 { name: "region", value: body.region },15 { name: "drawing_file", value: body.fileUrl }16 ],17 context: {18 hutk: body.hutk, // HubSpot cookie,串接來源歸因19 pageUri: body.pageUri,20 pageName: "RFQ Form"21 },22 legalConsentOptions: {23 consent: {24 consentToProcess: true,25 text: "我同意貴公司處理本表單所填個人資料以回覆詢價",26 communications: [27 { value: body.optIn, subscriptionTypeId: 12345, text: "接收產品與報價通知" }28 ]29 }30 }31 };3233 const res = await fetch(34 `https://api.hsforms.com/submissions/v3/integration/submit/${portalId}/${formGuid}`,35 { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }36 );3738 return new Response(await res.text(), { status: res.status });39}
重點:一定要把 hutk cookie 帶上,否則 HubSpot 無法把這筆詢價歸因到原始流量來源,之後你就沒辦法回答「Google Ads 帶來的詢價成交率是多少」這個問題。
預期輸出:HTTP 200,回傳 {"inlineMessage":"Thanks for submitting the form."}。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
步驟三:建立詢價 Pipeline 與階段定義
到 設定 → 物件 → 交易 → Pipelines,新增一條 RFQ Pipeline。製造業建議的階段設計(每個階段都要寫下「進入條件」,否則業務會亂拖卡):
- 新詢價(New RFQ) — 表單或 Email 進來、尚未分派。機率 5%。
- 技術評估(Feasibility Review) — RD 已收到圖檔,判斷可行性。機率 15%。
- 成本估算(Costing) — 採購與製造在算料工費。機率 30%。
- 報價已送出(Quote Sent) — Quote 物件已建立並寄出。機率 50%。
- 樣品/打樣(Sampling) — 客戶接受價格,進 T1 樣品。機率 70%。
- 贏得訂單 / 失單 — 失單時強制填
closed_lost_reason(價格 / 交期 / 技術 / 客戶取消 / 無回應)。
用 API 建立可避免手動點錯:
1curl -X POST https://api.hubapi.com/crm/v3/pipelines/deals \2 -H "Authorization: Bearer $HUBSPOT_TOKEN" \3 -H "Content-Type: application/json" \4 -d '{5 "label": "RFQ Pipeline",6 "displayOrder": 1,7 "stages": [8 { "label": "新詢價", "displayOrder": 0, "metadata": { "probability": "0.05" } },9 { "label": "技術評估", "displayOrder": 1, "metadata": { "probability": "0.15" } },10 { "label": "成本估算", "displayOrder": 2, "metadata": { "probability": "0.30" } },11 { "label": "報價已送出", "displayOrder": 3, "metadata": { "probability": "0.50" } },12 { "label": "樣品打樣", "displayOrder": 4, "metadata": { "probability": "0.70" } },13 { "label": "贏得訂單", "displayOrder": 5, "metadata": { "isClosed": "true", "probability": "1.0" } },14 { "label": "失單", "displayOrder": 6, "metadata": { "isClosed": "true", "probability": "0.0" } }15 ]16 }'
記得到 設定 → 交易 → Pipeline → 編輯階段 開啟 Stage-specific required properties:進入「成本估算」前必填 rd_feasibility,進入「失單」前必填失單原因。這一步是後續報表可信度的關鍵。
步驟四:用 Workflow 自動分派並計算 SLA
分派邏輯:依區域與時區輪派
建立一個 Deal-based Workflow,觸發條件為 Deal stage = 新詢價,分支依 region 屬性走。台灣總部負責 TW/SEA、澳洲或紐西蘭同事接 ANZ、歐洲代理接 EU。跨時區的意義在於:客戶在當地上班時間送出詢價,收到的第一封回覆不是隔天早上。
用 Custom Code Action 算出 SLA 到期時間
HubSpot Workflow 的 Custom Code Action 支援 Node.js 18 與 Python 3.9。以下是排除週末與台灣國定假日的 24 小時 SLA 計算:
1const hubspot = require('@hubspot/api-client');23exports.main = async (event, callback) => {4 const HOLIDAYS = ['2026-01-01', '2026-02-16', '2026-02-17', '2026-02-18', '2026-04-04'];5 const SLA_HOURS = 24;67 let cursor = new Date();8 let remaining = SLA_HOURS;910 while (remaining > 0) {11 cursor = new Date(cursor.getTime() + 60 * 60 * 1000);12 const iso = cursor.toISOString().slice(0, 10);13 const day = cursor.getUTCDay();14 const isWeekend = day === 0 || day === 6;15 const isHoliday = HOLIDAYS.includes(iso);16 if (!isWeekend && !isHoliday) remaining -= 1;17 }1819 callback({20 outputFields: {21 sla_due_at: cursor.getTime(), // HubSpot datetime 需 epoch millis22 sla_due_readable: cursor.toISOString()23 }24 });25};
把 sla_due_at 輸出寫回 Deal 屬性,再建第二個 Workflow:若 Deal stage 仍為「新詢價」且已超過 sla_due_at,就通知業務主管並在 Slack / Microsoft Teams 發訊息。
自動建立跨部門任務
同一個 Workflow 裡加入 Create Task 動作:
- 給 RD:「評估 {{deal.part_no}} 可行性」,到期 +1 工作天
- 給採購:「估算 {{deal.part_no}} 料件成本」,到期 +2 工作天
這樣 RD 不需要登入 CRM 找案子,任務會直接出現在他的 HubSpot Tasks 與每日摘要信裡。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
步驟五:設定產品庫與報價(Quotes)
報價要能重複使用,先把 Products 建好。批次匯入用 Products API:
1curl -X POST https://api.hubapi.com/crm/v3/objects/products/batch/create \2 -H "Authorization: Bearer $HUBSPOT_TOKEN" \3 -H "Content-Type: application/json" \4 -d '{5 "inputs": [6 { "properties": { "name": "CNC 鋁合金支架 A-1042", "price": "12.80",7 "hs_sku": "A-1042", "hs_cost_of_goods_sold": "7.40",8 "description": "6061-T6, 陽極處理, MOQ 500" } },9 { "properties": { "name": "沖壓端子 B-2210", "price": "0.42",10 "hs_sku": "B-2210", "hs_cost_of_goods_sold": "0.21" } }11 ]12 }'
接著在 Deal 內按 Quotes → Create quote,帶入 Line Items。實務上要注意三件事:
- 幣別:在
設定 → 帳戶預設 → 貨幣開啟多幣別並設定匯率,否則報 USD 時金額會被以 TWD 統計,Forecast 會嚴重失真。 - 報價範本:用 CMS 自訂 Quote Template,加入 Incoterms、付款條件、報價有效期(建議 30 天)、以及模具費是否另計的註記。
- 電子簽章與付款:Sales Hub Professional 以上支援 e-signature;台灣客戶常仍需用印,此時把 Quote PDF 當作正式報價附件即可。
報價寄出後,HubSpot 會記錄客戶是否開啟該 Quote 連結——這是判斷「客戶到底看了沒」最實用的訊號。
步驟六:讓 AI 承接規格書判讀與多語回覆
2026 年這件事已經從實驗變成日常操作。詢價信裡的規格資訊多半是非結構化文字,可以用 Workflow 的 Custom Code Action 呼叫 LLM,把它轉成 CRM 欄位:
1exports.main = async (event, callback) => {2 const raw = event.inputFields['rfq_raw_text'];34 const res = await fetch('https://api.openai.com/v1/chat/completions', {5 method: 'POST',6 headers: {7 'Authorization': `Bearer ${process.env.OPENAI_KEY}`,8 'Content-Type': 'application/json'9 },10 body: JSON.stringify({11 model: 'gpt-4o-mini',12 response_format: { type: 'json_object' },13 messages: [14 { role: 'system', content: '你是製造業業務助理。從詢價文字抽取 JSON:material, quantity, tolerance, surface_treatment, target_lead_time_days, language。找不到就填 null,不要臆測。' },15 { role: 'user', content: raw }16 ]17 })18 });1920 const data = await res.json();21 const parsed = JSON.parse(data.choices[0].message.content);2223 callback({24 outputFields: {25 material: parsed.material,26 quantity: parsed.quantity,27 tolerance: parsed.tolerance,28 inquiry_language: parsed.language29 }30 });31};
關鍵設計原則:讓 LLM 只做抽取與草稿,不做決策。價格、可行性、交期承諾一律由人審。抽取結果寫入欄位後,再用 inquiry_language 決定回覆語言範本(繁中 / 英文 / 日文 / 越南文),對同時服務台、日、東南亞客戶的廠商特別實用。
Branch8 曾為一家透過經銷網路銷售的工業零件製造商導入類似架構:HubSpot Sales Hub 作為詢價中樞,前端表單以 Forms API 提交、Workflow Custom Code 呼叫 LLM 做規格抽取與多語草稿,估價結果由 ERP 中介表每晚回寫。設計上刻意把「AI 產出」與「人工確認」拆成兩個 Deal 階段,讓稽核時能清楚看到誰核可了哪一版價格。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
步驟七:建立詢價儀表板與跨時區交接
在 Reports 建立一個 RFQ Dashboard,至少放六張圖:
- 各階段案件數與停留天數(找出卡在「成本估算」的瓶頸)
- SLA 達成率(
sla_due_at前完成回價的比例) - 依
rfq_source分的詢價量與成交率 - 依
region分的平均報價金額 - 失單原因分布(價格 vs 交期 vs 技術)
- 報價開啟率(Quote viewed / Quote sent)
跨時區交接的做法是在 Workflow 中設定「日終轉派」:台灣時間 18:00 仍未處理的 EU 區詢價,自動轉給歐洲時區同事並在 Deal 加一則 note 記錄交接內容。對於在香港、新加坡、台北、雪梨都有據點的團隊,這條規則等於把回應窗口從 8 小時拉到接近 16 小時。
常見問題排解
表單送出成功但 CRM 沒有資料
檢查 formGuid 是否屬於同一個 Portal,以及欄位 name 是否為 HubSpot 內部名稱(part_no)而非顯示標籤(客戶料號)。API 回 200 但欄位缺漏,多半是內部名稱拼錯——HubSpot 會靜默忽略無法對應的欄位。
Custom Code Action 回傳 TIMEOUT
Workflow Custom Code 有執行時間上限。呼叫外部 LLM 時務必加 timeout 與 try/catch,超時就寫入 ai_extract_status = failed 並轉人工,不要讓整個 Workflow 卡死。
API 回 429 Too Many Requests
HubSpot 對 Private App 有速率限制。批次同步 ERP 資料時改用 /batch/create 與 /batch/update(單次上限 100 筆),並實作指數退避:
1async function withRetry(fn, max = 5) {2 for (let i = 0; i < max; i++) {3 const res = await fn();4 if (res.status !== 429) return res;5 await new Promise(r => setTimeout(r, 2 ** i * 1000));6 }7 throw new Error('Rate limit exceeded after retries');8}
重複公司資料一直增加
台灣客戶常有「台灣○○股份有限公司」與「○○(台灣)」兩種寫法。在 設定 → 物件 → 公司 關閉自動建立公司,改由 Workflow 以統一編號(自訂屬性 tax_id)做去重比對。
多幣別報價金額對不上
確認 Deal 的 deal_currency_code 與 Line Item 幣別一致,且帳戶匯率有定期更新。HubSpot 以建立當下的匯率換算為公司幣別,事後改匯率不會回溯。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
跨境部署時要注意哪些合規事項?
台灣廠商把詢價資料放上 HubSpot(資料中心多在美國或歐盟)時,受《個人資料保護法》規範:向客戶蒐集姓名、Email、職稱時需告知蒐集目的與利用範圍,這正是表單 legalConsentOptions 欄位存在的原因。
若客戶來自歐盟,GDPR 要求提供資料存取與刪除機制。HubSpot 提供 GDPR delete API,建議在 CRM 內建立標準作業:
1curl -X POST https://api.hubapi.com/crm/v3/objects/contacts/gdpr-delete \2 -H "Authorization: Bearer $HUBSPOT_TOKEN" \3 -H "Content-Type: application/json" \4 -d '{ "objectId": "12345", "idProperty": "email" }'
另外要留意:圖檔與規格書往往含有客戶的營業秘密。建議把工程圖存在自有雲端(S3 或 Azure Blob)並以簽章 URL 掛在 CRM 欄位,而非整份上傳 HubSpot Files,這樣保存期限與存取權限都在自己手上。
導入節奏建議
不要一次做完七步。實務上比較穩的順序是:先做 Pipeline 與必填欄位(第三步)讓資料開始累積,兩週後再接表單(第二步)與自動分派(第四步),Quotes 與 AI 抽取放到第二階段。原因很簡單——沒有乾淨的階段定義,任何自動化都只是把混亂加速。
把 RFQ 流程搬進 HubSpot 的真正報酬,不是省下幾封 Email,而是你終於能回答這些問題:哪個來源的詢價最會成交?技術評估平均卡幾天?失單到底是輸在價格還是交期?這些答案,會直接改變你明年的接單策略。
Branch8 在香港、台北、新加坡與雪梨都有 CRM 與電商交付團隊,協助製造業與跨境品牌設計 HubSpot 資料模型、串接 ERP 與電商前端,並導入 AI 輔助的營運流程。若你的詢價流程正卡在 Excel 與收件匣之間,歡迎與我們談談你的實際案件量與系統現況。
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Sources
FAQ
Professional 版本已足夠:包含 Workflows、Quotes、Sequences 與多 Pipeline,可用 Deal 物件代表一筆詢價。若詢價量大且成交率低,需要獨立的 RFQ 自訂物件與階段必填屬性,則需要 Enterprise 版本。
About the Author
Matt Li
Co-Founder & CEO, Branch8 & Second Talent
Matt Li is Co-Founder and CEO of Branch8, a Y Combinator-backed (S15) Adobe Solution Partner and e-commerce consultancy headquartered in Hong Kong, and Co-Founder of Second Talent, a global tech hiring platform ranked #1 in Global Hiring on G2. With 12 years of experience in e-commerce strategy, platform implementation, and digital operations, he has led delivery of Adobe Commerce Cloud projects for enterprise clients including Chow Sang Sang, HomePlus (HKBN), Maxim's, Hong Kong International Airport, Hotai/Toyota, and Evisu. Prior to founding Branch8, Matt served as Vice President of Mid-Market Enterprises at HSBC. He serves as Vice Chairman of the Hong Kong E-Commerce Business Association (HKEBA). A self-taught software engineer, Matt graduated from the University of Toronto with a Bachelor of Commerce in Finance and Economics.