Branch8

台灣電商品牌 LINE 官方帳號接 HubSpot CRM 完整設定教學 2026

Matt Li
August 2, 2026
12 mins read
台灣電商品牌 LINE 官方帳號接 HubSpot CRM 完整設定教學 2026

Key Takeaways

  • LINE 官方帳號透過 Webhook middleware 可同步好友資料至 HubSpot CRM
  • 使用 LIFF 做身份綁定,將 LINE userId 與 Email 合併到同一 Contact
  • HubSpot Workflow 可根據 LINE 互動行為自動觸發再行銷流程
  • 架構可複製到日本、泰國等 LINE 高滲透率市場
  • 整合需注意台灣個資法與 API rate limiting 限制

透過 LINE Messaging API 與 HubSpot CRM 的整合,台灣電商品牌可以將 LINE 官方帳號的好友資料、對話紀錄與互動行為同步至 HubSpot,實現跨渠道客戶生命週期管理。本教學涵蓋從 LINE Developers Console 設定到 HubSpot Workflow 自動化的完整流程,適用於 2026 年最新版本的 API 與介面。

為什麼台灣電商品牌需要把 LINE 接上 CRM?

根據 LINE 台灣 2025 年官方公佈數據,LINE 在台灣的月活躍用戶超過 2,100 萬,滲透率高達 90%。對電商品牌而言,LINE 官方帳號往往是最主要的客戶觸點——但問題在於,LINE 後台本身的客戶資料管理能力有限。好友名單、標籤、對話紀錄都停留在 LINE 的封閉環境裡,無法與你的購物車資料、Email 行銷、客服系統串連。

這就是為什麼整合 HubSpot CRM 有實際價值:

  • 統一客戶輪廓:將 LINE 互動資料與網站行為、購買紀錄、Email 開信率整合在同一個 Contact Record
  • 自動化分眾行銷:在 HubSpot Workflow 中根據 LINE 互動行為觸發不同的行銷流程
  • 跨市場適用:同一套架構可複製到日本、泰國等 LINE 使用率高的市場

根據 HubSpot 的 2025 State of Marketing Report,使用統一 CRM 管理多渠道客戶資料的品牌,其客戶留存率平均比單一渠道管理高出 23%。

整合架構概覽:三種主要做法

在動手之前,先了解目前市場上三種主要的整合方式,各有取捨:

方法一:透過第三方整合平台(Make / Zapier)

  • 適合對象:技術資源有限的中小品牌
  • 優點:無需寫程式,視覺化拖拉設定
  • 限制:每月有 API call 上限,複雜的雙向同步需要多個 Scenario,成本會隨量級上升
  • 預估費用:Make Pro 方案約 USD 16/月起(根據 Make 2026 官網定價)

方法二:使用 HubSpot Marketplace 上的 LINE 整合 App

  • 適合對象:已使用 HubSpot Marketing Hub Professional 以上方案的品牌
  • 優點:原生整合體驗,資料直接寫入 HubSpot Contact Properties
  • 限制:功能取決於 App 開發商的維護頻率,部分 App 對 LINE Messaging API v3 支援不完整

方法三:自建 Webhook + HubSpot API(本教學主要方法)

  • 適合對象:有工程師資源或委託技術團隊的中大型品牌
  • 優點:完全控制資料流向、可自訂欄位映射、支援雙向同步
  • 限制:需要維護 middleware server,有 DevOps 成本

本教學將以方法三為主,同時在關鍵步驟標註方法一的替代做法。

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.

前置準備:你需要什麼?

開始設定前,請確認你已具備以下條件:

  1. LINE 官方帳號(已通過認證,類型為「認證帳號」或「進階認證帳號」)
  2. LINE Developers Console 存取權限(需要 LINE Business ID)
  3. HubSpot 帳號,方案為 Marketing Hub Starter 以上(建議 Professional,以使用 Workflow 功能)
  4. 一台可部署 Webhook 的伺服器,推薦使用:
  • AWS Lambda + API Gateway(Serverless,按用量計費)
  • Google Cloud Functions
  • 或 Railway / Render 等 PaaS 平台
  1. Node.js 18+Python 3.11+ 開發環境
  2. HubSpot Private App Access Token(取代舊版 API Key,HubSpot 已於 2022 年 11 月停用 API Key)

Step 1:在 LINE Developers Console 建立 Messaging API Channel

如果你的 LINE 官方帳號尚未連結 Messaging API Channel,請先完成這一步:

  1. 前往 LINE Developers Console
  2. 選擇或建立一個 Provider
  3. 點選「Create a new channel」→ 選擇「Messaging API」
  4. 填入 Channel 名稱(建議與官方帳號同名)、描述、Email
  5. 建立完成後,進入 Channel 頁面,記錄以下資訊:
1Channel ID: 18XXXXXXXX
2Channel Secret: 0a1b2c3d4e5f...
3Channel Access Token (Long-lived): 發行一組長效 Token

發行 Channel Access Token

在 Channel 頁面的「Messaging API」分頁底部,點擊「Issue」按鈕產生 Long-lived Channel Access Token。這組 Token 用於你的 middleware 呼叫 LINE API。

注意事項:Channel Access Token 沒有到期時間,但每次重新 Issue 都會讓前一組失效。請妥善保管在環境變數中,不要 hardcode 在原始碼。

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.

Step 2:建立 HubSpot Private App 並取得 Access Token

  1. 登入 HubSpot → 右上角齒輪圖示 → Integrations → Private Apps
  2. 點擊「Create a private app」
  3. 命名為 LINE Integration
  4. 在「Scopes」分頁中,勾選以下權限:
1crm.objects.contacts.read
2crm.objects.contacts.write
3crm.schemas.contacts.read
4timeline (如需建立自訂 Timeline Event)
  1. 建立後複製 Access Token

預期輸出:一組以 pat-na1- 開頭的 Token 字串(實際前綴依你的 HubSpot 資料中心位置而異,歐洲帳號可能是 pat-eu1-)。

Step 3:在 HubSpot 建立自訂 Contact Properties

為了儲存 LINE 特有的資料,你需要在 HubSpot 建立幾個自訂欄位:

  1. 前往 Settings → Properties → Contact Properties
  2. 建立以下欄位:
  • line_user_id(Single-line text)— 儲存 LINE userId,這是整合的唯一識別鍵
  • line_display_name(Single-line text)— LINE 顯示名稱
  • line_status_message(Single-line text)— LINE 狀態訊息
  • line_follow_date(Date picker)— 加好友日期
  • line_last_interaction(Date picker)— 最近一次 LINE 互動時間

你也可以透過 HubSpot API 批次建立:

1curl -X POST https://api.hubapi.com/crm/v3/properties/contacts \
2 -H "Authorization: Bearer pat-na1-xxxxxxxx" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "line_user_id",
6 "label": "LINE User ID",
7 "type": "string",
8 "fieldType": "text",
9 "groupName": "contactinformation",
10 "description": "LINE Messaging API userId"
11 }'

預期回應:HTTP 201 Created,回傳完整的 Property 物件。

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.

Step 4:建立 Webhook Middleware Server

這是整合的核心——一個接收 LINE Webhook Event 並轉寫到 HubSpot 的中間層。以下使用 Node.js + Express 示範:

初始化專案

1mkdir line-hubspot-middleware && cd line-hubspot-middleware
2npm init -y
3npm install express @line/bot-sdk @hubspot/api-client dotenv

建立 .env 檔案

1LINE_CHANNEL_SECRET=0a1b2c3d4e5f...
2LINE_CHANNEL_ACCESS_TOKEN=your-long-lived-token
3HUBSPOT_ACCESS_TOKEN=pat-na1-xxxxxxxx
4PORT=3000

主程式 index.js

1require('dotenv').config();
2const express = require('express');
3const { middleware, Client } = require('@line/bot-sdk');
4const hubspot = require('@hubspot/api-client');
5
6const app = express();
7
8const lineConfig = {
9 channelSecret: process.env.LINE_CHANNEL_SECRET,
10 channelAccessToken: process.env.LINE_CHANNEL_ACCESS_TOKEN,
11};
12
13const lineClient = new Client(lineConfig);
14const hubspotClient = new hubspot.Client({
15 accessToken: process.env.HUBSPOT_ACCESS_TOKEN,
16});
17
18// LINE Webhook endpoint
19app.post('/webhook', middleware(lineConfig), async (req, res) => {
20 const events = req.body.events;
21
22 for (const event of events) {
23 try {
24 if (event.type === 'follow') {
25 await handleFollow(event);
26 } else if (event.type === 'message') {
27 await handleMessage(event);
28 } else if (event.type === 'unfollow') {
29 await handleUnfollow(event);
30 }
31 } catch (err) {
32 console.error('Event processing error:', err.message);
33 }
34 }
35
36 res.status(200).json({ status: 'ok' });
37});
38
39async function handleFollow(event) {
40 const userId = event.source.userId;
41 const profile = await lineClient.getProfile(userId);
42
43 // 搜尋 HubSpot 是否已存在此 LINE User
44 const searchResponse = await hubspotClient.crm.contacts.searchApi.doSearch({
45 filterGroups: [{
46 filters: [{
47 propertyName: 'line_user_id',
48 operator: 'EQ',
49 value: userId,
50 }],
51 }],
52 });
53
54 const properties = {
55 line_user_id: userId,
56 line_display_name: profile.displayName,
57 line_status_message: profile.statusMessage || '',
58 line_follow_date: new Date().toISOString().split('T')[0],
59 line_last_interaction: new Date().toISOString().split('T')[0],
60 };
61
62 if (searchResponse.total === 0) {
63 // 建立新 Contact
64 await hubspotClient.crm.contacts.basicApi.create({ properties });
65 console.log(`Created new contact for LINE user: ${profile.displayName}`);
66 } else {
67 // 更新既有 Contact
68 const contactId = searchResponse.results[0].id;
69 await hubspotClient.crm.contacts.basicApi.update(contactId, { properties });
70 console.log(`Updated contact ${contactId} for LINE user: ${profile.displayName}`);
71 }
72}
73
74async function handleMessage(event) {
75 const userId = event.source.userId;
76 // 更新最近互動時間
77 const searchResponse = await hubspotClient.crm.contacts.searchApi.doSearch({
78 filterGroups: [{
79 filters: [{
80 propertyName: 'line_user_id',
81 operator: 'EQ',
82 value: userId,
83 }],
84 }],
85 });
86
87 if (searchResponse.total > 0) {
88 const contactId = searchResponse.results[0].id;
89 await hubspotClient.crm.contacts.basicApi.update(contactId, {
90 properties: {
91 line_last_interaction: new Date().toISOString().split('T')[0],
92 },
93 });
94 }
95}
96
97async function handleUnfollow(event) {
98 const userId = event.source.userId;
99 const searchResponse = await hubspotClient.crm.contacts.searchApi.doSearch({
100 filterGroups: [{
101 filters: [{
102 propertyName: 'line_user_id',
103 operator: 'EQ',
104 value: userId,
105 }],
106 }],
107 });
108
109 if (searchResponse.total > 0) {
110 const contactId = searchResponse.results[0].id;
111 await hubspotClient.crm.contacts.basicApi.update(contactId, {
112 properties: { line_follow_date: '' },
113 });
114 console.log(`Marked contact ${contactId} as unfollowed`);
115 }
116}
117
118app.listen(process.env.PORT, () => {
119 console.log(`Middleware running on port ${process.env.PORT}`);
120});

部署到 Railway(範例)

1# 安裝 Railway CLI
2npm install -g @railway/cli
3railway login
4railway init
5railway up

部署完成後,Railway 會給你一個公開 URL,例如 https://line-hubspot-middleware-production.up.railway.app。記下這個 URL,下一步需要用到。

Step 5:在 LINE Developers Console 設定 Webhook URL

  1. 回到 LINE Developers Console → 你的 Messaging API Channel
  2. 在「Messaging API」分頁找到 Webhook settings
  3. 填入你的 middleware URL:
1https://line-hubspot-middleware-production.up.railway.app/webhook
  1. 開啟「Use webhook」開關
  2. 點擊「Verify」按鈕

預期結果:顯示「Success」綠色訊息。如果出現錯誤,請檢查:

  • 你的 server 是否正在運行
  • URL 路徑是否包含 /webhook
  • HTTPS 憑證是否有效(Railway / Render 自動提供 SSL)

同時關閉自動回應

在 LINE Official Account Manager 中,前往「回應設定」,將「自動回應訊息」關閉,改為「Webhook」模式。否則 LINE 會同時觸發預設自動回應和你的 Webhook,造成使用者收到重複訊息。

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.

Step 6:設定 HubSpot Workflow 自動化

整合完成後,真正的價值在於自動化。以下是一個常見場景:

場景:新 LINE 好友自動進入歡迎流程

  1. 前往 HubSpot → Automation → Workflows
  2. 建立新的 Contact-based Workflow
  3. 觸發條件設為:
  • Contact Property line_follow_date is known
  • AND line_follow_date is within the last 1 day
  1. 新增 Action:
  • 延遲 5 分鐘(避免加好友瞬間就收到訊息)
  • 透過 Custom Code Action 呼叫 LINE Push Message API

Custom Code Action 範例(HubSpot Operations Hub Professional)

1// HubSpot Custom Code Action
2const hubspot = require('@hubspot/api-client');
3const https = require('https');
4
5exports.main = async (event) => {
6 const lineUserId = event.inputFields['line_user_id'];
7 const displayName = event.inputFields['line_display_name'];
8
9 const message = {
10 to: lineUserId,
11 messages: [{
12 type: 'text',
13 text: `${displayName} 你好!感謝加入我們的 LINE 好友 🎉\n回覆「最新優惠」即可收到本月折扣碼`,
14 }],
15 };
16
17 const postData = JSON.stringify(message);
18
19 const options = {
20 hostname: 'api.line.me',
21 path: '/v2/bot/message/push',
22 method: 'POST',
23 headers: {
24 'Content-Type': 'application/json',
25 'Authorization': `Bearer ${process.env.LINE_CHANNEL_ACCESS_TOKEN}`,
26 'Content-Length': Buffer.byteLength(postData),
27 },
28 };
29
30 return new Promise((resolve, reject) => {
31 const req = https.request(options, (res) => {
32 resolve({ outputFields: { status: res.statusCode } });
33 });
34 req.on('error', reject);
35 req.write(postData);
36 req.end();
37 });
38};

注意:使用 Custom Code Action 需要 HubSpot Operations Hub Professional 方案。如果你使用較低方案,可以改用 Make 的 HubSpot Trigger + LINE Push Message Module 來達成同樣效果。

進階整合:Merge LINE 身份與既有客戶資料

大多數電商品牌在導入 LINE 整合前,HubSpot 裡已經有大量透過 Email 蒐集的 Contact。關鍵挑戰是:如何把新進的 LINE 好友與既有的 Email Contact 合併?

使用 LIFF (LINE Front-end Framework) 做身份綁定

  1. 建立一個 LIFF App,讓使用者在 LINE 內開啟一個表單頁面
  2. 表單要求使用者輸入 Email 或手機號碼
  3. LIFF SDK 會自動帶入 LINE userId
  4. 你的後端同時拿到 LINE userId 和 Email,就能在 HubSpot 中 merge 兩筆資料
1// LIFF 前端取得 userId
2liff.init({ liffId: 'YOUR_LIFF_ID' }).then(() => {
3 if (liff.isLoggedIn()) {
4 liff.getProfile().then(profile => {
5 document.getElementById('lineUserId').value = profile.userId;
6 });
7 } else {
8 liff.login();
9 }
10});

當我們 Branch8 團隊在 2025 年 Q3 為一家台灣美妝電商品牌實作這套架構時,我們使用了 LIFF v2.24 搭配 HubSpot Marketing Hub Professional。專案從規劃到上線花了 3 週,其中最耗時的環節是身份綁定流程的 UX 設計——我們測試了三種不同的表單觸發時機(加好友後立即、第一次互動時、領取優惠券時),最終發現「領取折扣碼時順便填 Email」的完成率最高,達到 67%,遠高於加好友後立即彈出表單的 12%。整合上線後的第一個月,該品牌在 HubSpot 中成功合併了超過 8,000 筆 LINE-Email 對應資料,後續的再行銷 Email 開信率從原本的 18% 提升到 31%。

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.

常見問題排查

Webhook 驗證失敗

  • 確認 LINE_CHANNEL_SECRET 沒有多餘的空白字元
  • 確認你的 middleware 使用 @line/bot-sdk 的 middleware 函式做 signature 驗證,不要自己手動實作
  • 如果使用 AWS API Gateway,注意 request body 可能被二次 parse,導致 signature mismatch

HubSpot Search API 回傳空結果

  • 新建立的 Contact Property 需要最多 10 分鐘才會被 Search API 索引
  • 確認 Property 的 hasUniqueValue 未被設為 true(除非你確定不會有重複)
  • 使用 console.log 輸出完整的 search request body 做除錯

LINE Push Message 回傳 400 錯誤

1{"message": "The request body has 1 error(s)", "details": [{"message": "May not be empty", "property": "messages[0].text"}]}
  • 檢查 text 欄位是否為空字串或 undefined
  • LINE text message 最長 5,000 字元,超過會被拒絕

API Rate Limiting

  • LINE Messaging API 的 Push Message 免費額度依方案而異。根據 LINE 官方 2025 年費率,「輕用量」方案每月 200 則免費推播,「中用量」為 4,000 則
  • HubSpot API 的 rate limit 為每 10 秒 100 次請求(根據 HubSpot Developer Docs)。如果你的 LINE 帳號有大量好友同時互動,記得在 middleware 加入 retry with exponential backoff

安全性考量

個資法合規(PDPA / 台灣個資法)

台灣個人資料保護法要求蒐集個人資料時需告知當事人蒐集目的、資料類別及利用方式。在你的 LIFF 表單和 LINE Rich Menu 上,請明確加入隱私權聲明連結。如果你的客戶也包含歐盟居民,則同時需要符合 GDPR 的 consent 機制。

Token 安全

  • 所有 Token(LINE Channel Access Token、HubSpot Private App Token)務必存放在環境變數或 Secret Manager 中
  • 部署平台如 Railway、Render 都提供 Secret Variables 功能
  • 定期輪換 Token,特別是在團隊成員離職時

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.

投入成本與效益評估

根據我們在多個台灣電商專案的經驗,這套整合的典型成本如下:

  • 技術開發:40-80 工時(視複雜度與身份綁定需求)
  • Middleware 主機:Railway 或 Render 免費方案可支撐每月 10,000 次 Webhook Event;超過後約 USD 5-20/月
  • HubSpot 方案升級:如需 Workflow 自動化,Professional 方案約 USD 800/月(根據 HubSpot 2026 官網年繳定價)
  • LINE 官方帳號推播費用:依推播量級,中用量方案約 TWD 800/月

根據 Statista 的 2025 年報告,台灣電子商務市場規模預估在 2026 年將達到 USD 22.8 billion,年成長率約 8.5%。在這樣的市場規模下,能夠有效管理 LINE 客戶資料並實現自動化再行銷的品牌,將具有明顯的競爭優勢。

下一步:將整合擴展到其他 LINE 市場

這套架構的一大優勢是可複製性。日本(9,500 萬 LINE 用戶)、泰國(5,400 萬)、印尼(LINE 雖非主流但仍有使用者)都使用同樣的 LINE Messaging API。你只需要在 LINE Developers Console 建立對應市場的 Channel,middleware 邏輯幾乎不需要修改。

如果你的品牌正在規劃跨境電商佈局,這套 LINE + HubSpot 整合可以作為你多市場 CRM 的基礎架構。Branch8 在亞太區的台灣、新加坡、香港辦公室已協助超過 30 個品牌完成類似的 MarTech 整合專案——如果你需要從架構規劃到部署的技術支援,歡迎透過 branch8.com 聯繫我們的 CRM 團隊。

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

基本的資料同步功能只需 HubSpot Marketing Hub Starter 即可運作。但如果你需要使用 Workflow 自動化(例如新好友歡迎訊息、分眾推播),則需要 Professional 方案。若要使用 Custom Code Action 做進階整合,需要 Operations Hub Professional。

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.