GetClaw Docs
通訊頻道

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

  1. 前往 LINE Developers Console
  2. 用你的 LINE 帳號登入
  3. 建立一個 Provider(通常用你的公司名稱或專案名稱)

Provider 名稱不會公開顯示給使用者,它只是你在 LINE Developers Console 中的組織分類。你可以用公司名稱,例如「甘樂文創」或「KryptoGO」。


Step 2:建立 Messaging API Channel

在 Provider 底下,點選 Create a new channel → 選擇 Messaging API

你需要填寫:

欄位說明範例
Channel nameBot 在 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 IDBasic Settings 分頁純數字,約 10 位
Channel SecretBasic Settings 分頁32 字元的十六進位字串
Channel Access TokenMessaging 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 18789

Tailscale Funnel 需要額外設定

  1. 登入 Tailscale Admin Console
  2. DNS → 開啟 Enable HTTPS certificates
  3. 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:

  1. 進入你的 Channel 的 Messaging API 分頁
  2. Webhook URL 欄位填入:
    https://your-domain/line/webhook
    (如果是多帳號設定,使用你自訂的 webhookPath
  3. 點選 Verify 確認連線正常
  4. Use webhook 切換為 Enabled

Verify 按鈕不一定可靠。我們在客戶現場實測時,Verify 有時成功有時失敗。原因有二:

  1. Tailscale Funnel 有冷啟動延遲(第一次請求較慢)
  2. 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 設定

  1. 前往 LINE Official Account Manager
  2. 選擇你剛才建立的帳號
  3. 設定回應設定
    • 自動回應訊息停用
    • Webhook開啟

為什麼這很重要?

如果「自動回應訊息」保持開啟,會發生這個情況:

你:你好
LINE 自動回覆:感謝您的訊息!很抱歉,本帳號無法個別回覆用戶的訊息。
(OpenClaw 的回覆被自動回覆搶先了,使用者只看到罐頭回應)

我們在客戶現場就遇過這個問題 — 花了好一段時間才發現是自動回覆在搶先回應。


Step 7:驗證 DM 功能

# 確認 LINE 頻道已連線
openclaw pairing list line
  1. 用手機打開 LINE,搜尋你的 Bot ID(在 Messaging API 分頁的 Bot basic ID 可以找到,格式為 @xxx
  2. 加入好友
  3. 送一條測試訊息,例如「你好」
  4. 如果 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

  1. 前往 Groq Console
  2. 建立帳號(免費,每日約 8 小時語音轉文字額度)
  3. 建立 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

依序檢查:

  1. OpenClaw 是否在運行?

    openclaw status
  2. Tailscale Funnel 是否正常?

    tailscale funnel status
  3. LINE Webhook URL 是否正確? → 到 LINE Developers Console 確認

  4. 自動回覆是否已關閉? → 到 LINE Official Account Manager 確認

  5. API Key 是否有效? → 檢查 ~/.openclaw/agents/main/agent/auth-profiles.json

  6. 模型是否已設定? → 如果沒有設定語言模型,Bot 會收到訊息但無法產生回覆

    openclaw config get agents.defaults.model

Bot 回覆 DM 正常,但群組不回覆

  1. 確認四個設定都完成(見 Step 8)

  2. Bot 是否在設定後重新加入群組?

  3. 檢查 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 也一起設定起來。