LINE 頻道設定
從建立 LINE Developers 帳號到收到第一則 AI 回覆,完整的 LINE Bot 串接流程與踩坑指南
LINE 在台灣不是選擇題,是必答題。這篇帶你從零開始設定 LINE 頻道,包含我們在客戶現場踩過的每一個坑。
LINE 在台灣的定位
我們推薦 LINE 不是因為它的 Bot API 做得好 — 跟 Telegram 比起來,LINE 的開發體驗差了一大截。我們推薦它純粹是因為一個無法反駁的事實:台灣 95% 以上的人都在用 LINE。
你的客戶不會為了跟你的 AI Agent 對話而去裝 Telegram。但他們的 LINE 裡面,隨時都有幾十個聊天室在跳通知。把你的 Agent 放進那個清單裡,阻力最小、觸及最大。
安裝 LINE Plugin
openclaw plugins install line安裝完成後,OpenClaw 就具備了處理 LINE Webhook 和訊息收發的能力。
Step 1:建立 LINE Developers 帳號與 Provider
- 前往 LINE Developers Console
- 用你的 LINE 帳號登入
- 建立一個 Provider(通常用你的公司名稱或專案名稱)
Provider 名稱不會公開顯示給使用者,它只是你在 LINE Developers Console 中的組織分類。你可以用公司名稱,例如「甘樂文創」或「KryptoGO」。
Step 2:建立 Messaging API Channel
在 Provider 底下,點選 Create a new channel → 選擇 Messaging API。
你需要填寫:
| 欄位 | 說明 | 範例 |
|---|---|---|
| Channel name | Bot 在 LINE 上顯示的名字 | 甘樂CEO |
| Channel description | 簡短說明 | 甘樂文創的 AI 助理 |
| Category | 業務類別 | 企業 |
| Subcategory | 細分類別 | 依實際選擇 |
| Channel Icon | 使用者會看到的大頭照 | 建議用公司 Logo |
Channel name 就是使用者在 LINE 上看到的名字。取一個好辨識的名字,例如「公司名 + AI」或「公司名 + CEO」。這個名字之後可以改,但每次修改需要審核。
建立完成後,你會看到 Channel 的管理頁面。
Step 3:取得 Channel 憑證
在 LINE Developers Console 的 Channel 設定頁面,你需要取得兩個值:
Channel Secret
- 在 Basic Settings 分頁可以找到
- 用於驗證 Webhook 請求的來源
Channel Access Token (long-lived)
- 在 Messaging API 分頁底部,點選 Issue 產生
- 這是一串很長的字串,妥善保管
確認你複製的是正確的值
| 你需要的 | 在哪裡找 | 格式特徵 |
|---|---|---|
| Channel ID | Basic Settings 分頁 | 純數字,約 10 位 |
| Channel Secret | Basic Settings 分頁 | 32 字元的十六進位字串 |
| Channel Access Token | Messaging API 分頁底部,點 Issue 產生 | 很長的 Base64 字串,結尾通常是 = |
Channel Secret 和 Channel Access Token 是不同的東西,不要搞混。Channel ID 在這一步不需要用到。
這兩個憑證等同於你的 LINE Bot 的完整控制權。
- Channel Access Token 只會在 Issue 當下顯示一次,之後就無法再查看。立刻複製貼上,不要關閉頁面後才想起來沒存
- 不要寫在任何會被 commit 到 Git 的檔案裡
- 不要用螢幕截圖傳送(截圖可能被雲端同步)
Step 4:設定 OpenClaw
有三種方式可以設定 LINE 憑證,依你的偏好選擇。
方式一:直接寫在設定檔
編輯 ~/.openclaw/config.json5:
{
channels: {
line: {
enabled: true,
channelAccessToken: "YOUR_CHANNEL_ACCESS_TOKEN",
channelSecret: "YOUR_CHANNEL_SECRET",
// DM 存取策略:pairing(需配對)、allowlist(白名單)、open(開放)
dmPolicy: "open",
allowFrom: ["*"],
}
}
}方式二:使用環境變數
export LINE_CHANNEL_ACCESS_TOKEN="YOUR_CHANNEL_ACCESS_TOKEN"
export LINE_CHANNEL_SECRET="YOUR_CHANNEL_SECRET"設定檔中對應的欄位留空,OpenClaw 會自動讀取環境變數。這是我們推薦的做法 — 憑證和設定分離,更安全。
方式三:多帳號設定
如果你需要同時跑多個 LINE Bot(例如一個對外客服、一個內部助手):
{
channels: {
line: {
enabled: true,
accounts: [
{
name: "customer-support",
channelAccessToken: "TOKEN_1",
channelSecret: "SECRET_1",
dmPolicy: "open",
webhookPath: "/line/webhook/support",
},
{
name: "internal-assistant",
channelAccessToken: "TOKEN_2",
channelSecret: "SECRET_2",
dmPolicy: "pairing",
webhookPath: "/line/webhook/internal",
},
]
}
}
}Gateway Auth 與 Webhook 衝突
如果你的 gateway.auth.mode 設為 "token",LINE 的 webhook 請求會被 401 擋掉。LINE 的 webhook 有自己的簽名驗證機制(Channel Secret),不需要 Gateway Token 保護。
設定 LINE 時,請確認 gateway auth 為 "none",或在 gateway 設定中排除 webhook 路徑:
{
gateway: {
auth: { mode: "none" }
}
}Step 5:設定 Webhook URL
你的 OpenClaw 需要一個公開的 HTTPS URL 才能接收 LINE 的 Webhook 事件。
取得公開 URL
如果你的機器沒有公開 IP(大多數辦公室都是這種情況),最簡單的方式是用 Tailscale Funnel:
# 安裝 Tailscale
brew install tailscale
# 登入(會產生授權連結,需要在瀏覽器開啟)
tailscale login
# 設定 Funnel 轉發到 OpenClaw 預設的 Webhook port
tailscale funnel --bg 18789Tailscale Funnel 需要額外設定:
- 登入 Tailscale Admin Console
- 到 DNS → 開啟 Enable HTTPS certificates
- 到 Access Controls (ACL) → 加入 Funnel 規則
如果跳過這兩步,tailscale funnel 指令會報錯。
首次使用注意:第一次執行 tailscale funnel 時,終端機會顯示一個授權連結,需要在瀏覽器中開啟並同意啟用 Funnel 功能。這是一次性操作,之後不需要重複。
設定完成後,你的公開 URL 格式會是:
https://{hostname}.{tailnet}.ts.net/例如:https://jefferymac.tail05c83f.ts.net/
Funnel URL 在 Tailnet 內外行為不同
從 Tailnet 內部存取 Funnel URL 時,DNS 會解析到 Tailscale 內網 IP(100.x.x.x),這是正常行為。從外部(如 LINE 伺服器)存取時,會正確解析到 Tailscale 的 Funnel relay 伺服器。
要測試外部是否可達,使用:nslookup your-hostname.ts.net 8.8.8.8 確認公網解析結果。
在 LINE 設定 Webhook
回到 LINE Developers Console:
- 進入你的 Channel 的 Messaging API 分頁
- 在 Webhook URL 欄位填入:
(如果是多帳號設定,使用你自訂的https://your-domain/line/webhookwebhookPath) - 點選 Verify 確認連線正常
- 將 Use webhook 切換為 Enabled
Verify 按鈕不一定可靠。我們在客戶現場實測時,Verify 有時成功有時失敗。原因有二:
- Tailscale Funnel 有冷啟動延遲(第一次請求較慢)
- LINE 的 Verify 有 rate limit,頻繁點擊會觸發限制
直接發訊息測試更準確。只要 DM 能正常收到 AI 回覆,就代表 Webhook 運作正常。
快速驗證 Webhook 是否存活
在本機執行:
curl -s -X POST http://127.0.0.1:18789/line/webhook \
-H "Content-Type: application/json" \
-H "X-Line-Signature: test" \
-d '{"events":[]}'如果回傳 401 Invalid signature,代表 Webhook endpoint 正在運作(它正確地拒絕了假的簽名)。
Step 6:關閉 LINE 自動回覆(關鍵!)
這一步最容易被忽略,也是最常導致「Bot 不回覆」的原因。
LINE 有兩個獨立的管理後台,設定互不相通:
- LINE Developers Console(developers.line.biz)— 技術設定
- LINE Official Account Manager(manager.line.biz)— 營運設定
兩邊的設定都需要確認。
在 LINE Official Account Manager 設定
- 前往 LINE Official Account Manager
- 選擇你剛才建立的帳號
- 到 設定 → 回應設定:
- 自動回應訊息 → 停用
- Webhook → 開啟
為什麼這很重要?
如果「自動回應訊息」保持開啟,會發生這個情況:
你:你好
LINE 自動回覆:感謝您的訊息!很抱歉,本帳號無法個別回覆用戶的訊息。
(OpenClaw 的回覆被自動回覆搶先了,使用者只看到罐頭回應)我們在客戶現場就遇過這個問題 — 花了好一段時間才發現是自動回覆在搶先回應。
Step 7:驗證 DM 功能
# 確認 LINE 頻道已連線
openclaw pairing list line- 用手機打開 LINE,搜尋你的 Bot ID(在 Messaging API 分頁的 Bot basic ID 可以找到,格式為
@xxx) - 加入好友
- 送一條測試訊息,例如「你好」
- 如果
dmPolicy設定為pairing,你需要核准配對請求:
openclaw pairing approve line <PAIRING_CODE>看到 Agent 回覆了?恭喜,DM 功能設定完成。接下來設定群組。
Step 8:設定群組聊天
讓 Bot 能在群組中回覆,需要完成四個地方的設定。少做任何一個,群組就不會動。
A. LINE Developers Console
- 進入 Channel 的 Messaging API 分頁
- 找到 Allow bot to join group chats → 開啟
B. LINE Official Account Manager
- 到 設定 → 回應設定
- 加入群組或多人聊天 → 接受邀請
C. OpenClaw 設定
openclaw config set channels.line.groupPolicy open
openclaw config set channels.line.groupAllowFrom '["*"]'對應的設定檔結構:
{
channels: {
line: {
enabled: true,
// ... 其他設定 ...
groupPolicy: "open",
groupAllowFrom: ["*"],
}
}
}D. 重新邀請 Bot 加入群組
如果你在開啟群組權限之前就已經把 Bot 加入群組,必須先將 Bot 踢出群組,再重新邀請。
原因:LINE 不會對已在群組中的 Bot 補發 join event。沒有 join event,OpenClaw 不會為這個群組建立 session,自然不會回覆。
這個問題很隱蔽 — 所有設定都做對了,但 Bot 就是不回覆群組訊息。
群組中如何觸發 Bot?
在群組中,Bot 預設不會回覆所有訊息(否則每則閒聊都會觸發 AI 回覆)。觸發方式:
- 直接 @ 提及:在訊息中 @ Bot 的名字
- 語音訊息:Bot 會自動處理群組中的語音訊息(需設定語音轉文字,見下方)
設定語音訊息轉文字
OpenClaw 支援將 LINE 語音訊息自動轉為文字後處理。推薦使用 Groq 的 Whisper 模型:
取得 Groq API Key
- 前往 Groq Console
- 建立帳號(免費,每日約 8 小時語音轉文字額度)
- 建立 API Key
設定 OpenClaw
openclaw config set tools.media.audio.enabled true
openclaw config set tools.media.audio.models '[{"provider":"groq","model":"whisper-large-v3-turbo"}]'設定 Groq API Key
在 ~/.openclaw/agents/main/agent/auth-profiles.json 中加入:
{
"groq": {
"apiKey": "gsk_..."
}
}或使用環境變數:
export GROQ_API_KEY="gsk_..."設定完成後,重啟 OpenClaw。在 LINE 中傳送語音訊息,Bot 會先將語音轉為文字,再根據文字內容回覆。
常見問題排除
Bot 完全不回覆 DM
依序檢查:
-
OpenClaw 是否在運行?
openclaw status -
Tailscale Funnel 是否正常?
tailscale funnel status -
LINE Webhook URL 是否正確? → 到 LINE Developers Console 確認
-
自動回覆是否已關閉? → 到 LINE Official Account Manager 確認
-
API Key 是否有效? → 檢查
~/.openclaw/agents/main/agent/auth-profiles.json -
模型是否已設定? → 如果沒有設定語言模型,Bot 會收到訊息但無法產生回覆
openclaw config get agents.defaults.model
Bot 回覆 DM 正常,但群組不回覆
-
確認四個設定都完成(見 Step 8)
-
Bot 是否在設定後重新加入群組?
-
檢查 API Rate Limit:
# 查看最近的 session 檔案 ls -la ~/.openclaw/agents/main/sessions/ # 查看最新的 session log tail -50 ~/.openclaw/agents/main/sessions/<latest>.jsonl如果看到類似以下錯誤:
stopReason: "error" errorMessage: "429 rate_limit_error: This request would exceed your organization's rate limit of 30,000 input tokens per minute"表示 API 額度不足。解決方式:
- 等待 1-2 分鐘讓 rate limit 重置
- 升級 API 方案提高額度上限
- 切換為較輕量的模型:
openclaw config set agents.defaults.model anthropic/claude-haiku-4-5
群組訊息的 system prompt(AGENTS.md、SOUL.md、TOOLS.md 等 workspace 檔案 + 對話歷史)加總容易超過免費 tier 的 30,000 input tokens/分鐘限制。如果 DM 和群組同時使用,會共用同一個 API quota。
Verify 按鈕失敗但訊息正常收發
LINE 的 Verify 功能有時會因為 DNS 快取、暫時性網路問題、Tailscale Funnel 冷啟動延遲、或 rate limit 而失敗。
如果 Verify 失敗,先用 curl 手動測試 webhook:
curl -s -o /dev/null -w "%{http_code}" -X POST https://your-funnel-url/line/webhook \
-H "Content-Type: application/json" \
-H "X-Line-Signature: test" \
-d '{"events":[]}'如果回傳 401(Invalid signature),代表 webhook endpoint 正在運作。直接從 LINE 發送訊息測試,Verify 失敗不代表 webhook 不可用。
Bot 回覆出現亂碼或翻譯
如果你的瀏覽器開啟了自動翻譯功能,可能會影響 LINE Developers Console 的操作。例如:「issue」被翻譯成「問題」,導致你找不到產生 Token 的按鈕。建議在操作 LINE Developers Console 時關閉瀏覽器自動翻譯。
LINE 的限制你該知道的
這些是文件裡不一定寫得很明顯,但實際使用一定會遇到的問題:
訊息長度分割
LINE 的單則訊息上限是 5000 字元。當 AI 的回覆超過這個長度,OpenClaw 會自動分割成多則訊息送出。使用者體驗上會看到回覆被拆成好幾段 — 不完美,但這是 LINE API 的硬限制。
沒有 Markdown 支援
LINE 的文字訊息就是純文字。AI 回覆中的 **粗體**、# 標題、`程式碼` 都會以原始文字的形式顯示。如果你需要格式化內容,得用 Flex Message(見進階章節)。
媒體下載限制
LINE 訊息中的圖片、檔案下載上限是 10MB。超過的檔案你的 Agent 無法取得。
沒有 Reactions 和 Threads
LINE 不支援訊息反應(emoji reaction)和討論串(thread)功能。每則訊息都是獨立的,這在群組對話中會讓 context 追蹤變得困難。
緩衝式串流
LINE 不支援真正的串流回應。即使 OpenClaw 設定了 streaming,在 LINE 頻道上使用者仍然要等 AI 完整生成回覆後才會收到訊息。這和 Telegram 的即時打字效果是根本性的差異。
API 是封閉的
LINE 的 API 能做的事很有限 — 你無法讀取使用者的歷史訊息、無法主動搜尋群組、無法存取使用者的聯絡人清單。所有互動都必須透過 Webhook 事件驅動。這跟 Telegram Bot API 的開放程度完全不同。
進階:Flex Message 和 Rich Menu
LINE 雖然不支援 Markdown,但提供了 Flex Message — 一種用 JSON 定義的卡片式訊息格式,可以做出漂亮的排版效果。
channelData.line
在 OpenClaw 的回覆中,你可以透過 channelData.line 物件傳送 Flex Message:
{
channelData: {
line: {
type: "flex",
altText: "查詢結果",
contents: {
// Flex Message JSON 結構
}
}
}
}/card 指令
OpenClaw 內建 /card 指令,可以快速送出預設的 Flex Message 範本。這對客服場景特別實用 — 把常見的回覆格式做成卡片範本,一鍵送出。
Quick Replies
LINE 支援在訊息底部附加快速回覆按鈕,讓使用者點選而非打字。適合用在需要使用者從有限選項中選擇的場景(例如「滿意 / 不滿意」、「轉接真人 / 繼續對話」)。
Flex Message 的設計工具推薦使用 LINE Flex Message Simulator。先在模擬器裡拉好版面,再把 JSON 貼到 OpenClaw 設定中。
完整設定檔參考
以下是一個經過實際部署驗證的完整設定範例:
~/.openclaw/config.json5(LINE 相關部分)
{
channels: {
line: {
enabled: true,
channelAccessToken: "<LINE_CHANNEL_ACCESS_TOKEN>",
channelSecret: "<LINE_CHANNEL_SECRET>",
dmPolicy: "open",
allowFrom: ["*"],
groupPolicy: "open",
groupAllowFrom: ["*"],
}
},
tools: {
media: {
audio: {
enabled: true,
models: [
{
provider: "groq",
model: "whisper-large-v3-turbo",
}
]
}
}
}
}~/.openclaw/agents/main/agent/auth-profiles.json
{
"anthropic": {
"apiKey": "<ANTHROPIC_API_KEY>"
},
"groq": {
"apiKey": "<GROQ_API_KEY>"
}
}設定 Checklist
當 Bot 不回覆時,依序檢查這份清單:
- OpenClaw Gateway 是否在運行? →
openclaw status - Tailscale Funnel 是否正常? →
tailscale funnel status - LINE Developers Console 的 Webhook URL 是否正確?
- LINE Developers Console 的 Use Webhook 是否已開啟?
- LINE Official Account Manager 的「自動回應訊息」是否已停用?
- LINE Official Account Manager 的「Webhook」是否已開啟?
- 語言模型的 API Key 是否有效? → 檢查
auth-profiles.json - 語言模型是否已設定? →
openclaw config get agents.defaults.model - 是否遇到 API Rate Limit? → 檢查 session 檔案中的
errorMessage - (群組)群組設定是否都完成? →
openclaw config get channels.line.groupPolicy - (群組)Bot 是否有群組權限? → LINE Developers Console → Allow bot to join group chats
- (群組)Bot 是否在設定完成後才加入群組?(否則需要踢掉重新邀請)
GetClaw 觀點
LINE 的坑比 Telegram 多非常多。光是「兩個獨立後台的設定不同步」這一點,就足以讓非技術背景的使用者卡住半天。再加上 Webhook 設定、Tailscale Funnel、API Rate Limit、群組權限的四重設定... 我們在客戶現場,即使有工程背景的人操作,從零到群組訊息正常回覆也花了將近兩個小時。
這也是為什麼我們提供到府設定服務 — 不是因為設定本身有多難,而是因為踩坑的成本太高。每一個沒寫在官方文件裡的小問題,對非技術人員來說都可能是一個下午的時間。
我們的建議是:把 LINE 當作「觸及通道」而不是「主力平台」。用它來接觸最多的使用者,但不要期待它能提供 Telegram 等級的互動體驗。在 LINE 上保持簡單 — 純文字對話、偶爾用 Flex Message 做重點呈現 — 反而是最穩定的策略。
想要完整的 AI 對話體驗?那就把 Telegram 也一起設定起來。