幫助中心

伺服器、網路和帳戶的分步教程。

應用場景與解決方案

在東京或首爾 VPS 上搭建 LINE / KakaoTalk AI 客服機器人

搭建 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 發回給使用者。

  1. 客戶給你的 LINE 官方帳號或 Kakao Talk 頻道發訊息。
  2. LINE(Messaging API)或 Kakao(Kakao i Open Builder 技能)向你的地址 POST JSON,例如 https://api.example.com/line。
  3. 伺服器校驗請求、儲存訊息、補充 FAQ 或商品資訊,然後呼叫大模型 API。
  4. 回覆發回:LINE 透過回覆 API 並使用短時有效的 reply token;Kakao 要求直接在 HTTP 響應裡返回答案。
  5. 命中關鍵詞或置信度低時,轉給人工客服。
專案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 VPSJUSTG 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 -f

HTTPS、延遲與速率限制

兩個平台都要求公網 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 GBLINE 選東京,Kakao 選首爾
n8n + Webhook + Postgres2-4 GB與多數客戶同一國家
LINE 與 Kakao 同時接入,並基於商品文件做 RAG4-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 小時技術支援。

這篇文章有幫助嗎?
幫助中心
應用場景與解決方案 在東京 VPS 架設日文網站與 Web App:日本原生 IP 實戰設定指南 要在東京 VPS 架設日文網站,最直接的做法是:把網站放在位於日本東京、具備日本原生 IP 的伺服器上,用 Nginx 提供 HTTPS,全站採用 UTF-8,時區設為 Asia/Tokyo,並以 hreflang ja-JP 標示日文頁面。JUSTG 提供具日本原生 IP 的… 應用場景與解決方案 東京原生 IP VPS 用於日本影音平台:TVer、ABEMA、U-NEXT 測試方法與限制 一台具日本原生 IP 的東京 VPS,會被 TVer、ABEMA、U-NEXT、Niconico、DMM TV、radiko 等日本影音平台視為位於日本,適合人在海外的合法訂閱者、監測日本影片廣告與排行的行銷團隊,以及測試日本地區限定 App 的 QA 團隊。JUSTG… 應用場景與解決方案 首爾 VPS 韓國原生 IP:Wavve、TVING、Naver、Melon 測試方法、본인인증 與限制 具韓國原生 IP 的首爾 VPS,會被 Wavve、TVING、Coupang Play、Naver 與 Chzzk、SOOP、Melon 等韓國服務視為位於南韓,對韓流內容與行銷團隊、人在海外的訂閱者,以及測試韓國網站與 App 體驗的開發者都很有價值。JUSTG… 應用場景與解決方案 在東京或首爾 VPS 自建 AI 聊天工作台(Open WebUI、LibreChat、Dify) 想給團隊搭一個私有的 自建 AI 聊天工作台,最省事的做法是把 Open WebUI、LibreChat 或 Dify 部署在日本東京(Tokyo, Japan)或韓國首爾(Seoul, South Korea)的 VPS 上,再用你自己的金鑰接入… 應用場景與解決方案 在 VPS 上 7×24 執行 AI 自動化工作流:面向日韓俄的資訊摘要、商品翻譯與價格監控 想 7×24 小時執行 AI 自動化工作流(每日資訊摘要、商品文案翻譯、價格提醒等),最簡單的做法是準備一台常開的小型 VPS,用 n8n、cron 和 Python 指令碼呼叫大模型 API。JUSTG 在日本東京(Tokyo, Japan)和韓國首爾(Seoul,…
AlipayUnionPayVISAMastercardPayPalUSDTstripe