ข้ามไปที่เนื้อหา

จัดการ Agent (👥) — สร้าง / แก้ไข / ลบบัญชี

หน้าที่ของ Admin: บริหารบัญชี Agent ที่จะ login เข้าตอบแชท ตั้ง role (admin/agent) + reset password

ภาพรวม

หมายเลขในรูป:

  1. หัวข้อ "👥 จัดการ Agent"
  2. ปุ่ม "+ สร้าง Agent" — เปิด modal กรอก ชื่อ + username + password + role
  3. หัวตาราง: ชื่อ / Username / Role / สร้างเมื่อ / actions
  4. แต่ละ row = 1 บัญชี — admin role badge สีเหลือง · agent badge สีฟ้า
  5. 2 ปุ่มต่อ row: "แก้ไข" + "ลบ" (Admin override ตัวเองมีแค่ "แก้ไข")

ในแต่ละ tenant ของ mergchat มี Agent หลายคนที่ login เข้ามาตอบแชท แต่ละ Agent มี:

  • name — ชื่อแสดง
  • email หรือ username — สำหรับ login
  • password_hash — รหัสผ่าน (เก็บเป็น bcrypt)
  • roleadmin หรือ agent

Role ต่างกันยังไง?

Action admin agent
Login + ตอบแชท
ดู Quick Replies / Tags
ดู / แก้ OA list ❌ (read-only)
สร้าง / ลบ Agent คนอื่น ❌ (403 "Admin only")
ตั้งค่า AI Bot
Reports / Dashboard

วิธีสร้าง Agent ใหม่

  1. เข้า Settings (⚙️) → tab 👥 จัดการ Agent
  2. กด + สร้าง Agent
  3. กรอก 4 ฟิลด์:
  4. ชื่อ — แสดงในแชท
  5. Username / ID — ใช้ login (email หรือ string ตามต้องการ)
  6. รหัสผ่าน — อย่างน้อย 6 ตัวอักษร (แนะนำ 8+ ตัว)
  7. Role — เลือก Agent (default) หรือ Admin
  8. กด สร้าง Agent ในกล่อง

✅ สำเร็จ → ตารางแสดงรายการเพิ่ม 1 row ใหม่ Agent ที่สร้างสามารถ login ได้ทันที

วิธีแก้ไข Agent

  1. ใน tab 👥 จัดการ Agent กด แก้ไข ของ row ที่ต้องการ
  2. เปลี่ยนชื่อ / role / รหัสผ่านได้ — รหัสผ่านเดิมไม่จำเป็นต้องกรอกถ้าไม่เปลี่ยน
  3. กดบันทึก

ห้าม downgrade ตัวเอง

ระบบไม่อนุญาตให้ admin แก้ role ตัวเองเป็น agent (กันลืม role admin จนล็อกตัวเอง) — ถ้าจำเป็น ให้ admin คนอื่นแก้ให้

วิธีลบ Agent

  1. กด ลบ ของ row นั้น → confirmation dialog
  2. ยืนยัน → row หายจากตาราง + บัญชีถูก delete จาก DB ทันที

ลบแล้ว Agent ที่ login อยู่ติดแน่นเลย

JWT ของ Agent ที่ถูกลบยังใช้ได้ (signed valid + 7d expiry) แต่ทุก action จะคืน 403 → จะอธิบายในข้อ "stale-token" ด้านล่าง

🐛 ปัญหา UX สำคัญ — Stale Token (เกิดขึ้นแล้วบน production)

ค้นพบเมื่อ 2026-05-04 ที่ chat.aurora1688.vip — เก็บไว้เป็นบทเรียน

อาการ

User คลิก + สร้าง Agent → กรอกฟอร์ม → กดบันทึก → ขึ้น alert "Admin only" → console เห็น 403

สาเหตุ

  1. User เคย login เป็น account A ที่มี role=admin → JWT ถูก save ไว้ใน localStorage
  2. Admin คนอื่น ลบ account A ออกจาก DB หรือเปลี่ยน role A เป็น agent
  3. JWT เดิมของ A ยังอยู่ใน browser — signed ถูก, ยังไม่หมดอายุ
  4. Backend middleware verify JWT → req.agentRole = payload.role (จาก JWT, ไม่ re-check DB)
  5. POST /api/agents → middleware adminOnly เช็ค req.agentRole !== 'admin' → ถ้า payload เก่ามี role agent → 403 "Admin only"

วิธีแก้

ผู้ใช้ที่เจอปัญหา: กดปุ่ม "ออก" (logout) มุมล่างซ้าย → login ใหม่ด้วย email/password — token ใหม่จะมี role ปัจจุบันจาก DB

สำหรับ Dev (long-term fix): ดู docs/dev-reports/2026-05-04-mergchat-upstream-prs.md — เสนอแก้ AuthContext ให้ force logout เมื่อ /api/auth/me คืน 404 (Trello ARGOS #293 → Milo Lalee)

วิธีตรวจ stale-token

เปิด browser DevTools → Application → Local Storage → key agent:

{"id":1,"name":"Super Admin","email":"admin@chat.aurora1688.vip","role":"admin",...}

ถ้า role ใน localStorage ขัดกับสิ่งที่ admin ตั้งไว้ใน DB ปัจจุบัน → stale-token confirmed

API ที่เกี่ยวข้อง

Endpoint Method Auth คำอธิบาย
/api/agents GET login required ดึงรายการ agent ทั้งหมด
/api/agents POST admin only สร้าง agent ใหม่
/api/agents/:id PUT admin only แก้ไข agent
/api/agents/:id DELETE admin only ลบ agent
/api/auth/me GET login required refresh role/info จาก DB (PR #3)

ที่อ้างอิง

  • Source backend: mergchat:line-inbox-backend/src/routes/index.js — search router.post('/agents'
  • Source frontend: mergchat:line-inbox-frontend/src/pages/Settings/AgentManagement.tsx
  • DB table: agents (id, name, email, password_hash, role, is_online, created_at)
  • Bug post-mortem: memory/deploy-mergechat.md (in monorepo root) → Recent Changes 2026-05-04