搭建 LINE 或 KakaoTalk AI 客服機器人,最實用的方式是把 Webhook 部署在自己的 VPS 上:面向 LINE 選日本東京(Tokyo, Japan),面向 KakaoTalk 選韓國首爾(Seoul, South Korea),再由伺服器呼叫 OpenAI、Claude 或 Gemini 等大模型 API 生成回覆。JUSTG 提供東京、首爾雲伺服器,配本地原生 IP,$19.99/月起,含 1 個 IPv4 + 免費 IPv6,付款後自動開通,一台伺服器就能同時承載 HTTPS 介面、自動化工具和對話資料庫。本文給出兩種方案:自建 n8n(低程式碼)和輕量 Python Webhook,並講清 HTTPS、延遲、速率限制、日本 APPI 與韓國 PIPA 下的本地日誌,以及人工客服轉接。
- 機房:日本東京(靠近 LINE 使用者)、韓國首爾(KT 網路,靠近 KakaoTalk 使用者)。
- IP 類型:日本或韓國原生 IPv4 + 免費 IPv6,可作為固定出口 IP 加入白名單。
- AI API:OpenAI、Claude、Gemini 在日韓均官方可用;JUSTG 於 2026 年 10 月用東京、首爾 IP 實測三者均可使用。
- 價格:JUSTG Tokyo Cloud VPS、JUSTG Seoul Cloud VPS $19.99/月起,最高 7 核 / 24 GB,$169.99/月。
- 俄羅斯莫斯科(Moscow, Russia)不適合呼叫這些 AI API 的機器人(俄羅斯不在支援範圍內)。
LINE / KakaoTalk AI 機器人的工作原理
即時通訊平台把每條使用者訊息推送到你的 HTTPS Webhook,伺服器向大模型要回復,再經平台 API 發回給使用者。
- 客戶給你的 LINE 官方帳號或 Kakao Talk 頻道發訊息。
- LINE(Messaging API)或 Kakao(Kakao i Open Builder 技能)向你的地址 POST JSON,例如
https://api.example.com/line。 - 伺服器校驗請求、儲存訊息、補充 FAQ 或商品資訊,然後呼叫大模型 API。
- 回覆發回:LINE 透過回覆 API 並使用短時有效的 reply token;Kakao 要求直接在 HTTP 響應裡返回答案。
- 命中關鍵詞或置信度低時,轉給人工客服。
| 專案 | LINE(日本) | KakaoTalk(韓國) |
|---|---|---|
| 機器人框架 | LINE Messaging API、LINE 官方帳號 | Kakao i Open Builder 技能伺服器、Kakao Talk 頻道 |
| 回覆方式 | 先立即返回 HTTP 200,再用 reply token 呼叫回覆 API | 在 Webhook 響應中直接返回答案(技能 JSON 2.0 版) |
| 時間要求 | reply token 很快過期,模型生成完立即回覆 | 每次技能請求約 5 秒;較長回答需使用 Kakao 提供的回撥功能(如已開通) |
| 請求校驗 | X-Line-Signature 中的 HMAC-SHA256 簽名 | 限制路徑、增加金鑰請求頭或 token、校驗 bot ID |
| 推薦 JUSTG 機房 | JUSTG Tokyo Cloud VPS | JUSTG Seoul Cloud VPS |
為什麼把機器人放在東京或首爾
部署在通訊平台和使用者附近能縮短往返時間,而且日韓都是主流大模型 API 的支援地區。
- 延遲預算。大模型呼叫通常要 1-4 秒,每一跳到 LINE 或 Kakao 伺服器省下 100-200 毫秒都很關鍵,在 Kakao 約 5 秒的限制下尤其如此。
- AI API 可用性。OpenAI、Anthropic、Google 都支援日本和韓國;莫斯科不適合這個機器人,因為這些 API 不對俄羅斯開放。服務商政策隨時可能變化,帳號與付款檢查依然適用。
- 固定原生 IP。VPS 有穩定的日本或韓國 IP,可以加入你自己的 CRM、訂單系統或資料庫防火牆白名單。
- 資料就近存放。對話日誌存放在與客戶同一國家的伺服器上,隱私宣告更好寫。
方案 A:用 Docker Compose 自建 n8n
如果需要讓非開發人員在視覺化編輯器裡修改流程、提示詞和整合,n8n 是很好的選擇。
在已安裝 Docker 的 JUSTG 東京或首爾雲伺服器上,把 bot.example.com 解析到伺服器 IP(例如 203.0.113.20),然後執行:
mkdir -p /opt/n8n && cd /opt/n8n
echo "N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)" > .env && chmod 600 .env
cat > docker-compose.yml <<'YML'
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
env_file: .env
environment:
- N8N_HOST=bot.example.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://bot.example.com/
- GENERIC_TIMEZONE=Asia/Tokyo
- TZ=Asia/Tokyo
ports: ["127.0.0.1:5678:5678"]
volumes: ["n8n_data:/home/node/.n8n"]
restart: unless-stopped
volumes:
n8n_data:
YML
docker compose up -d
再用 Caddy 給 n8n 和 Python 應用(方案 B)做反向代理,它會自動申請 Let's Encrypt 證書:
apt install -y caddy
cat > /etc/caddy/Caddyfile <<'CFG'
bot.example.com {
reverse_proxy 127.0.0.1:5678
}
api.example.com {
reverse_proxy 127.0.0.1:8000
}
CFG
systemctl reload caddy
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable
在 n8n 編輯器中搭建流程:Webhook 節點(POST,路徑 line)→ Code 節點校驗 LINE 簽名 → IF 節點判斷轉人工關鍵詞 → OpenAI 或 Anthropic 對話節點(寫入系統提示詞)→ HTTP Request 節點請求 https://api.line.me/v2/bot/message/reply。把 Webhook 節點設為立即響應,讓 LINE 馬上收到 HTTP 200。Kakao 則在流程末尾用 "Respond to Webhook" 返回技能 JSON。API 金鑰只儲存在 n8n 憑證中,憑證會用 N8N_ENCRYPTION_KEY 加密。
方案 B:輕量 Python Webhook 骨架
約 70 行的 FastAPI 應用更便於版本管理和測試,同時支援 LINE 與 Kakao。
# app.py - pip install fastapi uvicorn httpx openai
import base64, hashlib, hmac, os, sqlite3, time
import httpx
from fastapi import FastAPI, Request, BackgroundTasks, HTTPException
from openai import OpenAI
LINE_SECRET = os.environ["LINE_CHANNEL_SECRET"].encode()
LINE_TOKEN = os.environ["LINE_CHANNEL_TOKEN"]
llm = OpenAI() # reads OPENAI_API_KEY
db = sqlite3.connect("/data/chat.db", check_same_thread=False)
db.execute("CREATE TABLE IF NOT EXISTS log(ts, channel, user_id, role, text)")
SYSTEM = "You are the support assistant of Example Shop. Answer briefly in the user's language. If unsure, say a staff member will follow up."
HANDOFF = ("担当者", "オペレーター", "상담원", "human", "staff")
app = FastAPI()
def log(ch, uid, role, text):
db.execute("INSERT INTO log VALUES (?,?,?,?,?)", (time.time(), ch, uid, role, text)); db.commit()
def answer(text):
r = llm.chat.completions.create(model="gpt-4o-mini", max_tokens=400,
messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": text}])
return r.choices[0].message.content
def handle_line(event):
uid, text = event["source"]["userId"], event["message"]["text"]
log("line", uid, "user", text)
if any(k in text for k in HANDOFF):
reply = "スタッフにおつなぎします。少々お待ちください。"
else:
reply = answer(text)
log("line", uid, "bot", reply)
httpx.post("https://api.line.me/v2/bot/message/reply", timeout=10,
headers={"Authorization": f"Bearer {LINE_TOKEN}"},
json={"replyToken": event["replyToken"], "messages": [{"type": "text", "text": reply[:4900]}]})
@app.post("/line")
async def line_webhook(req: Request, bg: BackgroundTasks):
body = await req.body()
sig = base64.b64encode(hmac.new(LINE_SECRET, body, hashlib.sha256).digest()).decode()
if not hmac.compare_digest(sig, req.headers.get("x-line-signature", "")):
raise HTTPException(403)
for ev in (await req.json()).get("events", []):
if ev.get("type") == "message" and ev["message"].get("type") == "text":
bg.add_task(handle_line, ev) # return 200 at once, work in background
return "OK"
@app.post("/kakao")
async def kakao_skill(req: Request):
data = await req.json()
uid = data["userRequest"]["user"]["id"]; text = data["userRequest"]["utterance"]
log("kakao", uid, "user", text)
reply = answer(text) # must finish within Kakao's ~5 s skill timeout
log("kakao", uid, "bot", reply)
return {"version": "2.0", "template": {"outputs": [{"simpleText": {"text": reply[:1000]}}]}}
用 systemd 執行,只監聽本機地址:
mkdir -p /data && chmod 700 /data
python3 -m venv /opt/bot/venv && /opt/bot/venv/bin/pip install fastapi uvicorn httpx openai
# put LINE_CHANNEL_SECRET, LINE_CHANNEL_TOKEN, OPENAI_API_KEY in /opt/bot/.env (chmod 600)
cat > /etc/systemd/system/bot.service <<'UNIT'
[Unit]
Description=LINE/Kakao AI bot
After=network-online.target
[Service]
WorkingDirectory=/opt/bot
EnvironmentFile=/opt/bot/.env
ExecStart=/opt/bot/venv/bin/uvicorn app:app --host 127.0.0.1 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
UNIT
systemctl daemon-reload && systemctl enable --now bot
在 LINE Developers 控制檯把 Webhook URL 設為 https://api.example.com/line 並點選 Verify;在 Kakao i Open Builder 中把 https://api.example.com/kakao 註冊為技能並關聯到兜底塊。確認錯誤簽名會被快速拒絕:
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" -X POST https://api.example.com/line \
-H "x-line-signature: invalid" -d '{"events":[]}'
# expected: 403 and a time well under 1 s
journalctl -u bot -fHTTPS、延遲與速率限制
兩個平台都要求公網 HTTPS 地址和有效證書,也都對慢響應不友好。
- 證書:使用真實域名和受信任證書(Caddy 自動申請 Let's Encrypt),自簽證書和裸 IP 不能作為 Webhook 地址。
- 快速應答:LINE Webhook 要立即確認,大模型處理放到後台;Kakao 要選響應快的模型、限制
max_tokens、精簡提示詞,確保在時限內返回。 - 平台限制:LINE Messaging API 各介面有速率限制,主動推送(push)會計入方案的月度訊息額度,而回複使用者訊息不計入,因此儘量用回覆而不是推送。
- 大模型限制:遇到 HTTP 429 時返回禮貌的兜底文案並指數退避重試,同時在廠商後台設定預算和告警。
- 防濫用:在程式碼裡限制每個使用者每分鐘的訊息數,呼叫大模型前截斷過長輸入。
對話日誌本地儲存:APPI 與 PIPA 基礎
聊天記錄包含個人資訊,應存放在自己的伺服器上、只保留必要期限,並告知客戶 AI 的使用方式。
- 日本 APPI(個人資訊保護法):明確利用目的、做好安全管理;向境外服務商(例如美國的大模型 API)提供個人資料時,需履行額外的告知或取得同意等義務。
- 韓國 PIPA(個人資訊保護法):只收集必要資訊並清楚告知或取得同意,披露境外傳輸和受託處理方,儲存期滿後刪除。
- 儘量在傳送給大模型前對手機號、郵箱、訂單號做脫敏。
- 加密磁碟備份、限制 SSH,SQLite 或 Postgres 資料庫不要暴露在公網。
- 以上為一般資訊,不構成法律意見,具體情況請諮詢當地律師。
讓客戶滿意的人工轉接
好的機器人知道何時停下:客戶要求、投訴、涉及金錢或帳號的問題,都應轉給真人。
- 觸發條件:出現 "担当者"、"オペレーター"、"상담원"、"人工" 等關鍵詞,連續多次答不上來,或涉及退款、支付。
- 在資料庫中把該使用者標記為 "人工模式",機器人停止回答,並透過郵件、Slack 或 LINE WORKS 通知客服。
- 客服在 LINE Official Account Manager 的聊天功能或 Kakao 頻道的諮詢聊天中回覆,處理完再切回機器人模式。
- 在轉接訊息中告訴客戶服務時間和預計等待時長。
選哪個 JUSTG 方案
客服機器人對 CPU 要求不高,記憶體取決於是否同時執行 n8n 和資料庫。
| 部署方式 | 建議記憶體 | 機房 |
|---|---|---|
| Python Webhook + SQLite,單個渠道 | 1-2 GB | LINE 選東京,Kakao 選首爾 |
| n8n + Webhook + Postgres | 2-4 GB | 與多數客戶同一國家 |
| LINE 與 Kakao 同時接入,並基於商品文件做 RAG | 4-8 GB | 每個國家一台,或統一放東京 |
面向日本 LINE 使用者可從 JUSTG 東京雲伺服器 起步,面向韓國 KakaoTalk 使用者可選 JUSTG 首爾雲伺服器;兩者均為亞洲最佳化線路,之後也可以在服務頁面的升級選項中隨時新增 IP。支援定製配置(更多 CPU、記憶體、硬碟、頻寬或 IP),請透過工單聯絡銷售獲取報價。更多 AI 部署場景見 AI VPS 專題頁。
常見問題
LINE 聊天機器人的伺服器放在哪裡最好?
首選日本東京:LINE 的主要使用者在日本,而且主流大模型 API 在日本官方可用。JUSTG 東京雲伺服器提供日本原生 IP,$19.99/月起,足夠執行 Webhook 加 n8n。
KakaoTalk 聊天機器人能接入 ChatGPT 或 Claude 嗎?
可以。Kakao i Open Builder 的技能伺服器可以呼叫 OpenAI、Claude 或 Gemini API,並在 Kakao 約 5 秒的時限內返回答案。部署在 JUSTG 首爾雲伺服器上,到 Kakao 的往返更短。
LINE Webhook 必須使用 HTTPS 嗎?
是的。LINE 只接受帶有效證書的 HTTPS Webhook 地址。在 VPS 上配好域名,用 Caddy 或 Nginx 申請免費的 Let's Encrypt 證書即可。
可以把機器人放在莫斯科 VPS 上嗎?
如果要呼叫 OpenAI、Claude 或 Gemini 就不行,這些 API 不對俄羅斯開放。機器人請放在 JUSTG 東京或首爾;JUSTG 莫斯科雲伺服器更適合不依賴這些 API 的俄羅斯市場業務。
上線你的機器人
一台小型 VPS 就能 7×24 小時接待 LINE 和 KakaoTalk 客戶,日誌也完全掌握在自己手裡。訂購 JUSTG 東京雲伺服器 或 JUSTG 首爾雲伺服器,按上面的步驟部署,遇到問題可隨時透過工單聯絡 7×24 小時技術支援。