📱 LINE CRM · OPEN SOURCE · DOCKER + TRAEFIK

SMLLineCRM
ระบบ CRM + Call Center สำหรับ LINE

เก็บแชตลูกค้า วัดเวลาตอบกลับ ดูงานค้างแบบ real-time และให้ AI สรุปปัญหาลูกค้ารายวัน — สำหรับธุรกิจไทยที่ดูแลลูกค้าผ่าน LINE OA และ LINE กลุ่ม

2
SERVICES
11
MENU PAGES
10+
AI PROVIDERS
24/7
MONITORING
FREE
OPEN SOURCE
01 · คืออะไร

SMLLineCRM คืออะไร?

ระบบ open source สำหรับธุรกิจที่ดูแลลูกค้าผ่าน LINE OA หรือ LINE กลุ่ม โดยเปลี่ยนการทำงานจาก "เฝ้าแชต" มาเป็น "บริหารด้วยตัวเลข"

ก่อนมีระบบนี้

😰
ลูกค้าถามแล้วไม่มีใครตอบ
ทีมคิดว่าคนอื่นตอบแล้ว ลูกค้ารอจนหงุดหงิดและหายไป
📊
ไม่รู้ว่าทีมตอบช้าแค่ไหน
รู้แค่ "ความรู้สึก" ว่าช้า แต่ไม่มีตัวเลขจริงมายืนยัน
📱
ข้อมูลลูกค้าอยู่ในมือถือพนักงาน
พนักงานลาออก ประวัติแชตหาย เจ้าของตรวจย้อนหลังไม่ได้
📖
อ่านแชตทุกกลุ่มไม่ทัน
มี 10 กลุ่ม เจ้าของต้องไล่เปิดทุกกลุ่มเองทุกวัน เหนื่อยมาก

หลังติดตั้ง SMLLineCRM

🖥️
จอ Monitor เห็นงานค้างทันที
หน้าเดียวบอกได้ว่ากลุ่มไหนรอตอบ กลุ่มไหนช้า กลุ่มไหนปกติ
⏱️
ตัวเลข Response Time จริง
รู้ว่าทีมตอบเร็วกี่นาที ใครตอบช้าที่สุด เคสไหนรอนานสุด
🗄️
แชตทุกข้อความอยู่ใน Database
ค้นหาย้อนหลังได้ทุกเวลา ใครส่งอะไร เมื่อไหร่ กลุ่มไหน
🤖
AI สรุปปัญหาให้ทุกคืน
ไม่ต้องอ่านแชตเอง AI วิเคราะห์และสรุปหมวดปัญหาให้รายวัน
02 · ฟีเจอร์

ทำอะไรได้บ้าง?

ฟีเจอร์ทั้งหมดออกแบบมาสำหรับธุรกิจที่ใช้ LINE เป็นช่องทางหลักในการดูแลลูกค้า

📨
CORE

รับ Webhook LINE OA

รับข้อความจาก LINE OA และกลุ่ม LINE แบบ real-time รองรับหลาย OA พร้อมกัน ตรวจ HMAC-SHA256 Signature ป้องกัน request ปลอม ตอบกลับ LINE ภายใน 200ms

🗂️
CORE

เก็บแชตเป็นฐานข้อมูล

บันทึกทุกข้อความ: text, image, sticker, file, audio, video, location พร้อม LINE user ID, group ID, timestamp และ raw event ย้อนหลังได้ตลอด

👥
CORE

แยกลูกค้า vs พนักงาน

ตรวจ LINE user ID อัตโนมัติ — ถ้าเป็นพนักงานที่ลงทะเบียนไว้ = ข้อความพนักงาน, ถ้าไม่ใช่ = ข้อความลูกค้า ระบบรู้ทันทีว่ามีคนตอบหรือยัง

💬
CORE

รวมข้อความเป็นเคส (Conversation)

รวมข้อความต่อเนื่องเป็นเคสเดียวอัตโนมัติ ถ้าเงียบเกิน 4 ชั่วโมงแล้วมีข้อความใหม่ = ขึ้นเคสใหม่ ปรับเวลาได้ตาม business ของคุณ

⏱️
KPI

วัดเวลาตอบกลับ

First response time / Average response time / Max response time ต่อทุกเคส รู้ว่าช้าหรือเร็วเป็นตัวเลขจริง ไม่ใช่ความรู้สึก

🖥️
MONITOR

จอ Monitor Real-time

Refresh ทุก 30 วินาที แสดงสถานะทุกกลุ่ม: 🔴 ช้า (slow) / 🟡 รอตอบ (waiting) / 🟢 ปกติ (normal) และสถานะพนักงาน: Active / Idle / Away

🤖
AI

AI สรุปปัญหารายวัน

ทุกคืน 23:00 AI ดึงแชตทั้งวัน วิเคราะห์ และจัดหมวดปัญหา ดูรายงานในเช้าวันถัดไปผ่านเมนู "สรุปรายวัน" ไม่ต้องอ่านแชตเองทุกกลุ่ม

🔀
AI FAILOVER

รองรับ AI หลายเจ้า

OpenAI, Claude, Gemini, Mistral, Groq, DeepSeek, OpenRouter ฯลฯ ถ้า provider หลักพัง/quota หมด → ลอง provider ถัดไปอัตโนมัติ ไม่สะดุด

🏷️
AI

หมวดปัญหาปรับได้

10 หมวดเริ่มต้น เปิด/ปิด หรือตั้งชื่อใหม่ให้ตรงธุรกิจ AI ใช้หมวดนี้จัดกลุ่มปัญหาลูกค้าในรายงานรายวัน

🔐
MANAGEMENT

จัดการสิทธิ์ผู้ใช้

สร้างกลุ่มสิทธิ์ได้เอง กำหนดว่าใครดูเมนูไหนได้บ้าง เจ้าของดูทุกอย่าง / หัวหน้าดู monitor+report / พนักงานดูเฉพาะที่กำหนด

🖼️
STORAGE

เก็บรูปภาพจาก LINE

ลูกค้าส่งรูปสินค้า / สลิป / หน้าจอ error ระบบดาวน์โหลดและเก็บใน Cloudflare R2 หรือ AWS S3 พร้อม URL ดูย้อนหลัง

🌐
MULTI-OA

รองรับหลาย LINE OA

เพิ่ม LINE OA ได้หลายตัว แต่ละ OA มี Channel ID, Secret, Token แยกกัน กลุ่มลูกค้า auto-register ทันทีที่มีข้อความเข้า

03 · Architecture

โครงสร้างระบบ

ทำงานบน Docker Compose 2 services ผ่าน Traefik เป็น reverse proxy พร้อม SSL อัตโนมัติ

Request Flow
📱 LINE
OA / Group
🔀 Traefik
SSL + Routing
⚙️ Backend
Express.js :3001
🗄️ MongoDB
Atlas Cloud
LINE
🔀 Traefik
SSL + Routing
🖥️ Admin UI
Next.js :3000
🤖 AI API
OpenAI/Gemini/etc

Domain Routing
linecrm-api.domain.com → Backend (port 3001)
→ รับ Webhook จาก LINE
→ REST API สำหรับ Admin UI

linecrm.domain.com → Admin UI (port 3000)
→ Dashboard, Monitor, Reports
Tech Stack
Backend: Node.js + Express.js + TypeScript
Frontend: Next.js 14 + Tailwind + shadcn/ui
Database: MongoDB (Atlas Cloud)
Proxy: Traefik v2 (SSL อัตโนมัติ)
Container: Docker + Docker Compose
OS: Ubuntu 22.04/24.04 LTS
ℹ️Traefik ต้องรันอยู่ก่อนในฐานะ service หลักของ server และต้องมี external network root_default เพื่อให้ service อื่นต่อเข้าได้
04 · สิ่งที่ต้องมี

เตรียมอะไรก่อนติดตั้ง

ตรวจสอบให้ครบก่อนเริ่ม Step แรก

🖥️
VPS Server
Ubuntu 22.04/24.04 LTS
RAM ≥ 2GB (แนะนำ 4GB)
Disk ≥ 20GB
จำเป็น
🐳
Docker + Docker Compose
Docker Engine CE
Docker Compose Plugin v2+
จำเป็น
🔀
Traefik (รันอยู่แล้ว)
Traefik v2 พร้อม certresolver
network: root_default
จำเป็น
🌐
Domain Name
2 subdomains:
linecrm.domain.com
linecrm-api.domain.com
จำเป็น
📱
LINE Official Account
Channel ID
Channel Secret
Channel Access Token
จำเป็น
🗄️
MongoDB
MongoDB Atlas Free (M0)
หรือ self-hosted MongoDB
จำเป็น
🤖
AI API Key
OpenRouter (มี free models)
หรือ OpenAI / Gemini
จำเป็น
🔑
JWT Secret
สร้างด้วย:
openssl rand -base64 32
สร้างได้เองในขั้นตอน
☁️
Cloudflare R2 / AWS S3
สำหรับเก็บรูปภาพจาก LINE
ถ้าไม่ต้องการ ข้ามได้
ไม่บังคับ
⚠️MongoDB Atlas Free (M0) ข้อจำกัด: 512MB storage, shared cluster ถ้าใช้งานจริงและมีข้อมูลมาก แนะนำ upgrade เป็น M10 ($0.08/hour) หรือใช้ self-hosted MongoDB บน VPS
05 · ติดตั้ง

ขั้นตอนติดตั้งบน VPS

ทำตามลำดับ Step 1–7 ไม่ข้ามขั้นตอนครับ

1
สร้าง Folder และ Clone Repository
สร้าง folder สำหรับเก็บโปรเจ็คและดาวน์โหลด source code จาก GitHub
# SSH เข้า VPS แล้วรันคำสั่งนี้
mkdir -p ~/apps && cd ~/apps
git clone https://github.com/smlsoft/SMLLineCRM.git
cd SMLLineCRM

# ตรวจสอบว่า folder ครบ
ls -la
💡ควรเก็บไว้ใน ~/apps/ เพื่อให้จัดการง่าย ถ้ามีโปรเจ็คหลายตัวในอนาคต
2
สร้าง JWT Secret และ API Key
สร้าง secret keys ที่แข็งแกร่งสำหรับ authentication ทั้งสองค่านี้ต้องเหมือนกันทั้ง backend และ admin
# สร้าง JWT Secret (32 bytes base64)
openssl rand -base64 32

# ตัวอย่างผลลัพธ์ (ของคุณจะต่างกัน):
YQuVr7jCtAPxu0dbeZC91mOYScMdXQ57wdlZTsGXrTg=

# สร้าง API Key (32 bytes hex)
openssl rand -hex 32
บันทึกค่าทั้งสองไว้ก่อน เพราะต้องใส่ซ้ำในขั้นตอนถัดไป และต้องตรงกันทุกตัวอักษร
3
ตั้งค่า MongoDB Atlas
สร้างฐานข้อมูลบน MongoDB Atlas (ฟรี) สำหรับเก็บข้อมูลทั้งหมด
  • เปิด mongodb.com/atlas → สมัคร / Login
  • Create Cluster → เลือก M0 Free → Region: Singapore
  • Database Access → Add User → ตั้ง username/password → เลือก "Read and write to any database"
  • Network Access → Add IP → ใส่ IP ของ VPS หรือ 0.0.0.0/0 (allow all)
  • Connect → Drivers → Copy connection string
ตัวอย่าง Connection String
mongodb+srv://smluser:YOUR_PASSWORD@cluster.mongodb.net/smllinecrm?retryWrites=true&w=majority

# หมายเหตุ: ถ้า password มีอักขระพิเศษ เช่น @ ต้อง URL-encode ก่อน
# @ → %40  |  # → %23  |  $ → %24  |  ! → %21
⚠️ถ้า password มีสัญลักษณ์ @ ต้องเปลี่ยนเป็น %40 ใน connection string ไม่งั้น URI parser จะงงและ connect ไม่ได้
4
สร้างไฟล์ docker-compose.yml
ไฟล์นี้กำหนดทั้ง 2 services (backend + admin) พร้อม Traefik labels สำหรับ routing และ SSL
cd ~/apps/SMLLineCRM
nano docker-compose.yml
docker-compose.yml — วางเนื้อหานี้ลงไป
services:
  backend:
    image: ghcr.io/smlsoft/smllinecrm-backend:latest
    environment:
      - PORT=3001
      - NODE_ENV=production
      - MONGODB_URI=mongodb+srv://user:pass@cluster.mongodb.net/smllinecrm
      - API_KEY=your-api-key-here
      - JWT_SECRET=your-jwt-secret-here
      - CONVERSATION_GAP_HOURS=4
      - TZ=Asia/Bangkok
      - AI_PROVIDER=openrouter
      - OPENROUTER_API_KEY=sk-or-xxxxxxxxxxxx
      - OPENROUTER_MODEL=mistralai/mistral-7b-instruct:free
      - OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
      - CRON_CLOSE_CONVERSATIONS=0 22 * * *
      - CRON_DAILY_EVALUATION=0 23 * * *
      - EVALUATE_PREVIOUS_DAY=true
    labels:
      - traefik.enable=true
      - traefik.http.routers.smllinecrm-api.rule=Host(`linecrm-api.domain.com`)
      - traefik.http.routers.smllinecrm-api.entrypoints=websecure
      - traefik.http.routers.smllinecrm-api.tls.certresolver=mytlschallenge
      - traefik.http.services.smllinecrm-api.loadbalancer.server.port=3001
    restart: unless-stopped
    networks:
      - root_default

  admin:
    image: ghcr.io/smlsoft/smllinecrm-admin:latest
    environment:
      - NODE_ENV=production
      - BACKEND_URL=http://backend:3001
      - API_KEY=your-api-key-here      # ต้องตรงกับ backend
      - JWT_SECRET=your-jwt-secret-here  # ต้องตรงกับ backend
    labels:
      - traefik.enable=true
      - traefik.http.routers.smllinecrm.rule=Host(`linecrm.domain.com`)
      - traefik.http.routers.smllinecrm.entrypoints=websecure
      - traefik.http.routers.smllinecrm.tls.certresolver=mytlschallenge
      - traefik.http.services.smllinecrm.loadbalancer.server.port=3000
    depends_on:
      - backend
    restart: unless-stopped
    networks:
      - root_default

networks:
  root_default:
    external: true   # ใช้ network เดียวกับ Traefik
💡บันทึกไฟล์: Ctrl+O → Enter → Ctrl+X
Environment Variables — คำอธิบาย
ตัวแปรค่าตัวอย่างหมายเหตุสถานะ
MONGODB_URImongodb+srv://...Connection string จาก Atlasจำเป็น
API_KEYrandom-hex-32Key สำหรับทุก API requestจำเป็น
JWT_SECRETbase64-32-bytesสำหรับ sign JWT tokenจำเป็น
CONVERSATION_GAP_HOURS4ชั่วโมงที่ถือว่าเป็นเคสใหม่ปรับได้
AI_PROVIDERopenrouterตั้ง provider หลักปรับได้
OPENROUTER_API_KEYsk-or-...API key จาก openrouter.aiจำเป็น (ถ้าใช้ AI)
CRON_DAILY_EVALUATION0 23 * * *เวลารัน AI สรุปรายวันปรับได้
TZAsia/BangkokTimezone สำหรับ cron และ logปรับได้
5
ตั้งค่า DNS สำหรับ 2 Subdomains
เพิ่ม A record ใน DNS provider ของคุณ (Cloudflare, Route53 ฯลฯ) ให้ชี้มาที่ IP ของ VPS
TypeNameValueTTL
AlinecrmIP ของ VPS เช่น 72.60.195.159Auto
Alinecrm-apiIP ของ VPS เช่น 72.60.195.159Auto
💡ถ้าใช้ Cloudflare DNS ปิด Proxy (ปุ่มส้ม) ไว้ก่อนให้เป็น DNS only (ปุ่มเทา) ระหว่างตั้งค่า Traefik ครั้งแรก หรือใช้ Cloudflare Full SSL mode
6
รัน Docker Compose
ดาวน์โหลด Docker images และเริ่มรัน services ทั้งสอง
# อยู่ใน folder ~/apps/SMLLineCRM
cd ~/apps/SMLLineCRM

# ดาวน์โหลด images ล่าสุด
docker compose pull

# รัน services ในโหมด background
docker compose up -d

# ตรวจสอบสถานะ
docker compose ps
ผลที่ควรเห็น
NAME                     STATUS    PORTS
smllinecrm-backend-1     Up        (ไม่มี port เพราะใช้ network ของ Traefik)
smllinecrm-admin-1       Up
# ดู logs backend — ต้องเห็นบรรทัดเหล่านี้
docker compose logs backend --tail=20
[DB] MongoDB connected
[AdminUser] Seeded default superadmin user
[MasterIdCache] Loaded 0 employees
[OaRegistry] Loaded 0 LINE OAs
[Scheduler] Cron jobs scheduled
[App] LINE KPI System running on port 3001
ถ้าเห็น [DB] MongoDB disconnected ให้ตรวจ MONGODB_URI — ดูว่า URL-encode อักขระพิเศษใน password ครบไหม และ IP ของ VPS อยู่ใน Atlas Network Access list หรือยัง
7
ตั้งค่า LINE Webhook
เชื่อม LINE OA เข้ากับระบบผ่าน Webhook URL
  • เปิด LINE Developers Console → เลือก Channel ของคุณ
  • แท็บ Messaging API → Webhook settings
  • ใส่ Webhook URL:
https://linecrm-api.domain.com/webhook/YOUR_CHANNEL_ID

# ตัวอย่าง: Channel ID คือ 2010553888
https://linecrm-api.sara-n8n.work/webhook/2010553888
  • คลิก Verify → ต้องได้ Success ✅
  • เปิด Use webhook → ON
  • ปิด Auto-reply และ Greeting messages (ถ้าไม่ต้องการ)
💡ถ้า Verify ไม่ผ่านให้ทดสอบด้วย curl https://linecrm-api.domain.com/health ก่อน ถ้าได้ JSON กลับมา = backend ทำงานปกติ แล้วตรวจ Channel ID อีกครั้ง
8
ทดสอบระบบ
ตรวจสอบทุกส่วนทำงานถูกต้องก่อนใช้งานจริง
# ทดสอบ Backend health
curl https://linecrm-api.domain.com/health

# ทดสอบ Admin UI
# เปิด browser: https://linecrm.domain.com
# ควรเห็นหน้า Login

# ดู logs real-time
docker compose logs -f
💡เพิ่ม LINE OA เป็นเพื่อนแล้วส่งข้อความ "ทดสอบ" → เปิด docker compose logs backend -f → ควรเห็น log การรับข้อความเข้ามา
06 · ใช้งานครั้งแรก

Setup ครั้งแรกใน Admin Dashboard

หลัง deploy สำเร็จ ทำตามลำดับนี้ใน https://linecrm.domain.com

A
Login และเปลี่ยนรหัสผ่าน superadmin
รหัสผ่านเริ่มต้นเป็นที่รู้กันใน repo public — ต้องเปลี่ยนทันที
  • เปิด https://linecrm.domain.com → Login ด้วย superadmin / superadmin
  • เมนู ผู้ใช้งาน → คลิกไอคอนแก้ไขที่แถว superadmin
  • ตั้งรหัสผ่านใหม่ที่แข็งแกร่ง → บันทึก → Login ใหม่
อย่าข้ามขั้นตอนนี้ รหัสผ่าน superadmin เป็น default ที่ทุกคนรู้
B
ตั้งค่า AI — เมนู "ตั้งค่าระบบ"
ระบบต้องมี AI Provider ก่อนถึงจะสรุปรายวันได้
  • Provider Groups → คลิก "กลุ่มใหม่" → ตั้งชื่อ เช่น "กลุ่มหลัก"
  • คลิก "เพิ่ม Provider" → เลือก Provider เช่น OpenRouter → ใส่ API Key → คลิก "ดึง Models" → เลือก model
  • คลิก บันทึกกลุ่ม Provider
  • Task Routing → เลือกกลุ่มที่สร้าง → คลิก "ทดสอบ" → ต้องเห็น "เชื่อมต่อสำเร็จ" → บันทึก
  • Cron Jobs → เปิด Toggle "วิเคราะห์บทสนทนารายวัน" (สีฟ้า)
C
เพิ่ม LINE OA — เมนู "LINE OA"
เพิ่ม OA ที่ต้องการติดตาม (ทำได้หลาย OA)
ช่องค่าที่ต้องกรอกหาได้จาก
ชื่อ OAตั้งเองได้ เช่น "OA หลัก"ตั้งเอง
Channel IDตัวเลข เช่น 2010553888LINE Developers → Basic Settings
Channel Secretstring 32 ตัวLINE Developers → Basic Settings
Channel Access Tokentoken ยาว ๆLINE Developers → Messaging API → Issue
D
เพิ่มพนักงาน — เมนู "พนักงาน"
สำคัญมาก — ถ้าไม่เพิ่ม ระบบจะมองทุกข้อความเป็นลูกค้าหมด
  • คลิก + เพิ่ม → ใส่ชื่อ, รหัสพนักงาน, แผนก (ไม่บังคับ)
  • LINE User ID ขึ้นต้นด้วย U ตามด้วย 32 ตัวอักษร
  • วิธีหา LINE User ID: ให้พนักงานส่งข้อความในกลุ่มที่ OA อยู่ → ดูใน docker compose logs backend -f
E
ปรับหมวดปัญหา — เมนู "ประเภทปัญหา"
ระบบมี 10 หมวดเริ่มต้น ปรับให้ตรงธุรกิจคุณ
  • เปิด/ปิดหมวดที่ไม่ใช้
  • แก้ชื่อหมวดให้ตรงปัญหาจริงของลูกค้า เช่น "สอบถามเมนู", "จองโต๊ะ", "ติดตามออเดอร์"
  • AI จะใช้หมวดเหล่านี้ในการจัดกลุ่มปัญหาทุกคืน
F
ทดสอบรับข้อความจริง
ตรวจสอบว่าระบบทำงานครบวงจร
  • เพิ่ม LINE OA เข้ากลุ่ม LINE ที่มีลูกค้า
  • ให้ลูกค้า (หรือตัวเอง) ส่งข้อความในกลุ่ม
  • เปิดเมนู กลุ่มลูกค้า → กลุ่มนั้นควรปรากฏอัตโนมัติ
  • เปิดเมนู บทสนทนา → ควรเห็น conversation
  • เปิดเมนู จอ Monitor → ดูสถานะ real-time
Checklist ก่อนใช้งานจริง:
  • เปลี่ยนรหัสผ่าน superadmin แล้ว
  • ตั้งค่า AI Provider และทดสอบสำเร็จ
  • เพิ่ม LINE OA และ Webhook Verify ผ่านแล้ว
  • เพิ่มพนักงานทุกคนพร้อม LINE User ID
  • ปรับหมวดปัญหาให้ตรงธุรกิจ
  • ทดสอบส่งข้อความและเห็นใน Dashboard
  • Cron Job เปิดอยู่ในหน้าตั้งค่าระบบ
07 · Dashboard

คู่มือการใช้งาน Admin Dashboard

เมนูทั้งหมด 11 หน้า แต่ละหน้าใช้ทำอะไร และควรดูบ่อยแค่ไหน


สถานะใน Monitor — อ่านค่าอย่างไร

🔴
slow — ด่วน!
ลูกค้าส่งข้อความล่าสุดนานกว่า 15 นาที ยังไม่มีพนักงานตอบ

ต้องแก้ไขทันที
🟡
waiting — รอตอบ
ลูกค้าส่งข้อความล่าสุดภายใน 15 นาที ยังไม่มีคนตอบ

ปกติ แต่ต้องรีบตอบ
🟢
normal — ปกติ
พนักงานตอบล่าสุด หรือถูก mark ว่าปกติแล้ว

ไม่ต้องดำเนินการ

สถานะพนักงาน

สถานะเกณฑ์ความหมาย
🟢 Activeตอบภายใน 30 นาทีทำงานอยู่
🟡 Idle30–120 นาทีเริ่มเงียบ
⚫ Awayมากกว่า 120 นาทีออกไปแล้ว

Cron Jobs อัตโนมัติ

เวลางาน
22:00 ทุกคืนปิดเคสค้างที่ไม่มีกิจกรรม
23:00 ทุกคืนAI วิเคราะห์แชตทั้งวัน สรุปปัญหา
ℹ️ผลรายงาน AI จะปรากฏในเมนู "สรุปรายวัน" ตั้งแต่เช้าวันถัดไป
08 · การดูแลระบบ

คำสั่งที่ใช้บ่อยบน VPS

คำสั่ง Docker Compose สำหรับดูแลระบบประจำวัน

📊 ตรวจสอบสถานะ
# ดูสถานะ containers ทั้งหมด
docker compose ps

# ดู resource (CPU/RAM) real-time
docker stats

# ตรวจ health endpoint
curl http://localhost:3102/health
📋 ดู Logs
# ดู logs backend แบบ real-time
docker compose logs backend -f

# ดู logs 50 บรรทัดล่าสุด
docker compose logs backend --tail=50

# ดู logs ทุก service
docker compose logs -f
🔄 Restart และ Update
# Restart ทุก service
docker compose restart

# Restart เฉพาะ backend
docker compose restart backend

# อัปเดตเป็น version ใหม่
docker compose pull
docker compose up -d
⏹️ หยุดและเริ่มใหม่
# หยุดระบบ (ข้อมูลไม่หาย)
docker compose down

# เริ่มใหม่
docker compose up -d

# หยุดพร้อมลบ volumes (ระวัง!)
docker compose down -v
🐛 Debug
# เข้าไปใน backend container
docker compose exec backend sh

# ดู environment variables
docker compose exec backend env

# ดู network ที่ container ใช้
docker network ls
🔧 Maintenance
# ลบ images เก่าที่ไม่ใช้
docker image prune -f

# Auto-update ทุกอาทิตย์ (crontab)
crontab -e
0 3 * * 0 cd ~/apps/SMLLineCRM && \
  docker compose pull && \
  docker compose up -d

ความปลอดภัยที่ต้องทำ

ห้าม commit ไฟล์ที่มี credentials ขึ้น Git — docker-compose.yml ที่มี API Key, JWT Secret, MongoDB URI ต้องอยู่บน server เท่านั้น ถ้าจะใช้ Git ให้ใช้ .env files แยกและเพิ่มใน .gitignore
⚠️Rotate credentials ทุก 90 วัน — API Key, JWT Secret และ LINE Access Token ควรเปลี่ยนเป็นประจำ หลังเปลี่ยน restart ทั้ง backend และ admin
💡Backup MongoDB เป็นประจำ — ถ้าใช้ Atlas ตั้ง Scheduled Backup ใน Atlas ได้เลย ถ้า self-hosted ตั้ง mongodump cron job ทุกวัน
09 · FAQ

ปัญหาที่พบบ่อยและวิธีแก้

❌ LINE Webhook Verify ไม่ผ่าน (307 / 404 / 500)
1. ตรวจ Channel ID ใน URL ว่าตรงกับ LINE OA จริงไหม
2. รัน curl https://linecrm-api.domain.com/health — ถ้าไม่ได้ JSON แปลว่า backend ยังไม่ขึ้น
3. ตรวจ Traefik labels ว่า domain ถูกต้อง และ root_default network มีอยู่จริง (docker network ls)
4. ดู logs: docker compose logs backend --tail=30
❌ MongoDB connected ไม่ได้ (EBADNAME / Authentication failed)
1. ตรวจ password มีอักขระพิเศษไหม — @ ต้องเป็น %40, # ต้องเป็น %23
2. ตรวจ IP ของ VPS อยู่ใน Atlas Network Access list หรือเปล่า
3. ตรวจชื่อ database ปลาย URI ว่ามี /smllinecrm หรือไม่
⚠️ AI สรุปรายวันไม่ทำงาน
1. ตรวจหน้า "ตั้งค่าระบบ" → Cron Jobs → Toggle เปิดอยู่ไหม
2. ตรวจ Task Routing → เลือก Provider Group แล้วหรือยัง
3. คลิกปุ่ม "ทดสอบ" ใน Task Routing — ถ้าขึ้น error แสดงว่า AI API Key ผิด
4. AI จะรันหลัง 23:00 เท่านั้น ถ้าอยากทดสอบเร็วกว่านั้น ต้องแก้ cron schedule
⚠️ ข้อความลูกค้าไม่เข้าระบบ
1. ตรวจว่า LINE OA ถูกเพิ่มเข้ากลุ่มหรือยัง
2. ตรวจ Webhook URL ใน LINE Console ว่าถูกต้องและ Verify ผ่าน
3. ตรวจว่า "Use webhook" เปิดอยู่
4. ดู logs real-time: docker compose logs backend -f แล้วส่งข้อความดู
ℹ️ จะเพิ่ม LINE OA หลายตัวได้ไหม?
ได้ครับ — เพิ่มได้ไม่จำกัดจำนวน แต่ละ OA มี Channel ID, Secret, Token แยกกัน และ Webhook URL ก็แยกกัน เช่น /webhook/OA_ID_1 และ /webhook/OA_ID_2
ℹ️ Traefik certresolver ชื่อ mytlschallenge ถูกไหม?
ขึ้นอยู่กับที่คุณตั้ง Traefik ไว้ ถ้า certresolver ของคุณชื่ออื่น เช่น letsencrypt ให้แก้ทุก label ที่มี mytlschallenge ให้ตรงกัน ตรวจสอบจาก Traefik config ของคุณ
💡 วิธีหา LINE User ID ของพนักงาน
ให้พนักงานส่งข้อความในกลุ่ม LINE ที่มี OA อยู่ด้วย → รัน docker compose logs backend -f → ดูบรรทัดที่มี lineUserId → ค่านั้นขึ้นต้นด้วย U ตามด้วย 32 ตัวอักษร
10 · สรุป

ตาราง Checklist ครบวงจร

#งานทำที่ไหนสถานะ
1Clone repositoryVPS terminal☐ ทำแล้ว
2สร้าง JWT Secret + API KeyVPS terminal☐ ทำแล้ว
3ตั้งค่า MongoDB Atlas + รับ connection stringatlas.mongodb.com☐ ทำแล้ว
4สร้าง docker-compose.yml ใส่ค่าครบVPS terminal☐ ทำแล้ว
5เพิ่ม DNS A record 2 subdomainsDNS provider☐ ทำแล้ว
6docker compose pull && up -dVPS terminal☐ ทำแล้ว
7logs backend → MongoDB connectedVPS terminal☐ ทำแล้ว
8ตั้ง LINE Webhook URL + VerifyLINE Developers Console☐ ทำแล้ว
9Login Admin + เปลี่ยนรหัส superadminAdmin Dashboard☐ ทำแล้ว
10ตั้งค่า AI Provider + Task Routing + ทดสอบAdmin → ตั้งค่าระบบ☐ ทำแล้ว
11เพิ่ม LINE OA + ใส่ credentials ครบAdmin → LINE OA☐ ทำแล้ว
12เพิ่มพนักงานทุกคน + LINE User IDAdmin → พนักงาน☐ ทำแล้ว
13ปรับหมวดปัญหาให้ตรงธุรกิจAdmin → ประเภทปัญหา☐ ทำแล้ว
14ทดสอบส่งข้อความจริง → เห็นใน MonitorLINE + Admin☐ ทำแล้ว
15เปิด Cron Job AI รายวันAdmin → ตั้งค่าระบบ☐ ทำแล้ว
📱 SMLLineCRM — Open Source LINE CRM System
GitHub: github.com/smlsoft/SMLLineCRM · คู่มือนี้จัดทำโดย Claude AI

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้

  • คุกกี้เพื่อการวิเคราะห์

    คุกกี้ประเภทนี้จะทำการเก็บข้อมูลการใช้งานเว็บไซต์ของคุณ เพื่อเป็นประโยชน์ในการวัดผล ปรับปรุง และพัฒนาประสบการณ์ที่ดีในการใช้งานเว็บไซต์ ถ้าหากท่านไม่ยินยอมให้เราใช้คุกกี้นี้ เราจะไม่สามารถวัดผล ปรับปรุงและพัฒนาเว็บไซต์ได้
    รายละเอียดคุกกี้

  • คุกกี้เพื่อปรับเนื้อหาให้เข้ากับกลุ่มเป้าหมาย

    คุกกี้ประเภทนี้จะเก็บข้อมูลต่าง ๆ รวมทั้งข้อมูลส่วนบุคคลเกี่ยวกับตัวคุณเพื่อเราสามารถนำมาวิเคราะห์ และนำเสนอเนื้อหา ให้ตรงกับความเหมาะสมกับความสนใจของคุณ ถ้าหากคุณไม่ยินยอมเราจะไม่สามารถนำเสนอเนื้อหาและโฆษณาได้ไม่ตรงกับความสนใจของคุณ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า