帮助中心

服务器、网络和账户的分步教程。

应用场景与解决方案

在东京或首尔 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, South…
AlipayUnionPayVISAMastercardPayPalUSDTstripe