จัดการ Agent (👥) — สร้าง / แก้ไข / ลบบัญชี←
หน้าที่ของ Admin: บริหารบัญชี Agent ที่จะ login เข้าตอบแชท ตั้ง role (admin/agent) + reset password
ภาพรวม←

หมายเลขในรูป:
- หัวข้อ "👥 จัดการ Agent"
- ปุ่ม "+ สร้าง Agent" — เปิด modal กรอก ชื่อ + username + password + role
- หัวตาราง: ชื่อ / Username / Role / สร้างเมื่อ / actions
- แต่ละ row = 1 บัญชี — admin role badge สีเหลือง · agent badge สีฟ้า
- 2 ปุ่มต่อ row: "แก้ไข" + "ลบ" (Admin override ตัวเองมีแค่ "แก้ไข")
ในแต่ละ tenant ของ mergchat มี Agent หลายคนที่ login เข้ามาตอบแชท แต่ละ Agent มี:
name— ชื่อแสดงemailหรือusername— สำหรับ loginpassword_hash— รหัสผ่าน (เก็บเป็น bcrypt)role—adminหรือagent
Role ต่างกันยังไง?
| Action | admin | agent |
|---|---|---|
| Login + ตอบแชท | ✅ | ✅ |
| ดู Quick Replies / Tags | ✅ | ✅ |
| ดู / แก้ OA list | ✅ | ❌ (read-only) |
| สร้าง / ลบ Agent คนอื่น | ✅ | ❌ (403 "Admin only") |
| ตั้งค่า AI Bot | ✅ | ❌ |
| Reports / Dashboard | ✅ | ✅ |
วิธีสร้าง Agent ใหม่←
- เข้า Settings (⚙️) → tab 👥 จัดการ Agent
- กด
+ สร้าง Agent - กรอก 4 ฟิลด์:
- ชื่อ — แสดงในแชท
- Username / ID — ใช้ login (email หรือ string ตามต้องการ)
- รหัสผ่าน — อย่างน้อย 6 ตัวอักษร (แนะนำ 8+ ตัว)
- Role — เลือก
Agent(default) หรือAdmin - กด
สร้าง Agentในกล่อง
✅ สำเร็จ → ตารางแสดงรายการเพิ่ม 1 row ใหม่ Agent ที่สร้างสามารถ login ได้ทันที
วิธีแก้ไข Agent←
- ใน tab 👥 จัดการ Agent กด แก้ไข ของ row ที่ต้องการ
- เปลี่ยนชื่อ / role / รหัสผ่านได้ — รหัสผ่านเดิมไม่จำเป็นต้องกรอกถ้าไม่เปลี่ยน
- กดบันทึก
ห้าม downgrade ตัวเอง
ระบบไม่อนุญาตให้ admin แก้ role ตัวเองเป็น agent (กันลืม role admin จนล็อกตัวเอง) — ถ้าจำเป็น ให้ admin คนอื่นแก้ให้
วิธีลบ Agent←
- กด ลบ ของ row นั้น → confirmation dialog
- ยืนยัน → 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
สาเหตุ←
- User เคย login เป็น account A ที่มี role=admin → JWT ถูก save ไว้ใน
localStorage - Admin คนอื่น ลบ account A ออกจาก DB หรือเปลี่ยน role A เป็น
agent - JWT เดิมของ A ยังอยู่ใน browser —
signedถูก, ยังไม่หมดอายุ - Backend middleware verify JWT →
req.agentRole = payload.role(จาก JWT, ไม่ re-check DB) - POST
/api/agents→ middlewareadminOnlyเช็ค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:
ถ้า 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— searchrouter.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