claude-channel-line
把 LINE Messaging API 串到 Claude Code 做雙向訊息互動的 channel plugin。
- Claude 可主動透過 LINE 發訊息給你
- 你在 LINE 傳的訊息會被推進 Claude session,由 Claude 看到並回覆
- 內建白名單(pair / allowlist / disabled 三種 policy)
- 使用者身份:每個白名單 user 可標 暱稱 / 稱謂 / 角色,Claude 會用你給的名字稱呼、依角色調整信任度
- 整合 Cloudflare Named Tunnel,URL 永久固定(亦支援 quick / external 模式)
架構
LINE 用戶 ──► LINE Platform
│ HTTPS webhook
▼
Cloudflare Tunnel (HTTPS)
│
▼
localhost:8788 (Bun + Hono)
│ 簽章驗證 → access policy
▼
MCP notification ──► Claude Code session
│
▼
line_reply / line_push tool
│
LINE Platform ◄──────┘
Channel 是一個 MCP server 子進程(透過 claude --dangerously-load-development-channels 啟動),同時在本機跑 webhook server 接收 LINE 推送,並暴露 MCP tools 讓 Claude 對 LINE 發訊息。
Prerequisites
裝這幾個工具:
- Bun 1.x — 建議
npm install -g bun(或 brew install oven-sh/bun/bun)
- Claude Code 2.1.123+
cloudflared — brew install cloudflared
- 一組 LINE Messaging API channel 的 access token 與 channel secret
- 一個指向 Cloudflare 的網域(例如
casper.tw),用來建立永久固定的 webhook URL
Concepts
LINE 帳號層級對照:
| 層級 | 說明 |
|---|
| Business ID | 你的 LINE 商業帳號 |
| Provider | 在 Business ID 之下的「服務提供者」(一旦選定不能改) |
| Messaging API channel | 對應一個官方帳號(Official Account),這就是 bot 本身。token / secret 在這裡取得 |
兩種容易混淆的設定:
- Channel access token(長期)→ 用來呼叫 LINE API 發訊息
- Channel secret → 用來驗證 LINE webhook 的簽章
Quick Start
預設走 named tunnel——URL 永久固定,LINE Console webhook URL 設一次就好。
1. 申請 LINE Messaging API channel
- LINE Business ID 登入或註冊
- LINE Official Account Manager 建立官方帳號
- 帳號頁右上角 Settings → Messaging API → Enable(會自動建一個 Provider 與 channel)
- Settings → Response settings:
- 「Chat (聊天)」→ Off(很多人卡這——詳見 Troubleshooting)
- 「Webhook」→ On
- 「Auto-response messages」→ Off
- 「Greeting messages」→ Off
- 進入 LINE Developers Console → 點選剛建立的 channel:
- Basic settings 分頁底部複製 Channel secret
- Messaging API 分頁底部 Issue + 複製 Channel access token (long-lived)
2. 設 Cloudflare Named Tunnel(做完一次永久不用再動)
需要:Cloudflare 帳號 + 一個指向 Cloudflare DNS 的網域。
# 一、登入(瀏覽器跳出選網域、Authorize)
cloudflared tunnel login
# 二、建 tunnel(記下回傳的 tunnel ID)
cloudflared tunnel create line-bot-channel
# 三、把子網域路由到 tunnel
cloudflared tunnel route dns line-bot-channel line-bot.example.com
# 四、寫 ~/.cloudflared/config.yml:
cat > ~/.cloudflared/config.yml <<EOF
tunnel: <剛建的 tunnel id>
credentials-file: $HOME/.cloudflared/<tunnel-id>.json
ingress:
- hostname: line-bot.example.com
service: http://localhost:8788
- service: http_status:404
EOF
驗證 tunnel 設定 OK(不需要持續跑著,只是測試一次):
# 啟動 tunnel
cloudflared tunnel run line-bot-channel &
# 另外一個終端起一個假 server
( printf 'HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\ntunnel ok!\n' | nc -l 8788 ) &
sleep 1
curl -s https://line-bot.example.com/
# 看到 "tunnel ok!" 即通了
pkill -f "cloudflared tunnel run"
3. 安裝 plugin
claude plugin marketplace add wcc723/2026-line-bot-channel-mcp
claude plugin install line@line-bot-channel
claude plugin list # 應看到 line@line-bot-channel ✔ enabled
或一鍵:
curl -fsSL https://raw.githubusercontent.com/wcc723/2026-line-bot-channel-mcp/main/install.sh | bash
4. 寫 channel 設定檔
mkdir -p ~/.claude/channels/line
cat > ~/.claude/channels/line/.env <<EOF
LINE_CHANNEL_ACCESS_TOKEN=<貼你的>
LINE_CHANNEL_SECRET=<貼你的>
LINE_WEBHOOK_PORT=8788
LINE_TUNNEL_MODE=named
LINE_TUNNEL_NAME=line-bot-channel
LINE_PUBLIC_URL=https://line-bot.example.com
EOF
chmod 600 ~/.claude/channels/line/.env
設定 LINE_TUNNEL_NAME 後,channel 啟動時會自動 spawn cloudflared tunnel run line-bot-channel,你不用另外開終端。
5. 啟動 channel session
claude --dangerously-load-development-channels plugin:line@line-bot-channel
進去後 /mcp 應顯示 plugin:line:line · ✔ connected。/line:tunnel status 應看到 state: running、url 是你的 named domain。
6. 設定 LINE webhook URL(一次性)
LINE Console UI 偶爾 400,用 API 最穩:
TOKEN=$(grep '^LINE_CHANNEL_ACCESS_TOKEN=' ~/.claude/channels/line/.env | cut -d= -f2-)
WEBHOOK="https://line-bot.example.com/webhook"
curl -X PUT https://api.line.me/v2/bot/channel/webhook/endpoint \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"endpoint\":\"$WEBHOOK\"}"