# Manajemen Pengguna


## Ringkasan

Halaman **User Management** (`/user-management`) adalah pusat kontrol akun di OmniStream. Admin menggunakan halaman ini untuk membuat akun agent baru, mengubah peran (role), mengatur batasan concurrent chats, mengaktifkan/menonaktifkan akun, dan menelusuri aktivitas mereka. Halaman ini memiliki tiga tab:

1. **Users** — CRUD akun agent
2. **Divisions** — pengelompokan agent ke unit bisnis
3. **Activity** — audit trail tindakan pengguna

:::info
**Hak akses:** Halaman `/user-management` hanya dapat diakses oleh **admin** dan **supervisor**. Namun beberapa aksi seperti *create agent*, *update role*, dan *delete agent* dibatasi khusus ke peran **admin** di sisi backend.
:::

## Peran (RBAC)

OmniStream mendukung tiga peran yang diurutkan dari yang paling terbatas ke yang paling luas:

| Peran | Kemampuan |
|---|---|
| **agent** | Menangani percakapan yang ditugaskan; mengirim pesan; membuat catatan internal; mentransfer percakapan miliknya. |
| **supervisor** | Semua kemampuan agent + akses Analytics, Dashboard supervisor, SLA Policies, Campaign, Transfer/Takeover, dan melihat semua percakapan (bukan hanya miliknya). |
| **admin** | Semua kemampuan supervisor + CRUD agent, manajemen divisi, integrasi kanal, outgoing webhooks, CSAT, dan konfigurasi sistem lainnya. |

Satu pengguna hanya boleh memiliki satu peran pada satu waktu.

## Langkah-langkah: CRUD agent

### Membuat akun baru

1. Buka `/user-management`, klik tab **Users**.
2. Klik tombol **+ New User**.
3. Isi form:
   - **Email** (wajib, unik)
   - **Password** (minimal 8 karakter)
   - **Full Name**
   - **Role** — `agent`, `supervisor`, atau `admin`
   - **Can Broadcast** — flag khusus, aktifkan hanya untuk akun yang perlu mengirim kampanye
   - **Max Concurrent Chats** — batas atas percakapan aktif. `0` berarti tidak dibatasi.
4. Klik **Save**. Password disimpan dengan aman.

### Mengubah detail agent

1. Klik ikon **pensil** pada baris agent yang ingin diubah.
2. Ubah `full_name`, `email`, `role`, `can_broadcast`, atau `max_concurrent_chats`.
3. Klik **Save**. Frontend memanggil `PUT /api/agents/{id}`.
4. Perubahan peran akan langsung berlaku pada JWT yang diterbitkan berikutnya. Token lama tetap valid hingga kedaluwarsa — untuk pencabutan segera, minta agent logout atau hapus akun.

### Mengubah status online/offline manual

1. Klik indikator status (titik hijau/abu) di kolom Status.
2. Backend memanggil `PATCH /api/agents/{id}/status` dengan `{ is_online: boolean }`.
3. Menonaktifkan agent secara manual berguna saat agent offline tanpa logout (mis. browser crash) agar tidak menerima auto-assignment baru.

### Menghapus akun

1. Klik ikon **trash**.
2. Konfirmasi penghapusan. Endpoint `DELETE /api/agents/{id}` akan dipanggil.
3. Percakapan yang sebelumnya di-assign ke agent tersebut akan kehilangan reference `assigned_to` (tetap tersimpan sebagai `NULL` agar tidak hilang).

:::warning
Menghapus akun tidak bisa di-undo. Untuk menonaktifkan sementara, lebih baik setel `is_online = false` atau ubah peran ke `agent` dengan `max_concurrent_chats = 0` sehingga tidak menerima tugas baru.
:::

## Pengelolaan divisi

Klik tab **Divisions** untuk mengelola divisi. Lihat halaman [Divisi](/panduan/admin/divisi) untuk panduan lengkap.

## Audit aktivitas

Klik tab **Activity** untuk melihat activity logs lintas pengguna. Kolom yang ditampilkan: timestamp, agent, action, target resource, dan detail. Filter tersedia untuk `agent_id` dan `action`. Lihat halaman [Activity Logs](/panduan/admin/activity-logs) untuk daftar action lengkap.

![Screenshot halaman user management](/screenshots/user-management.png)

## Endpoint (tag **Agents**)

| Aksi | Endpoint |
|---|---|
| List semua agent | `GET /api/agents` |
| Detail agent | `GET /api/agents/{id}` |
| Buat agent | `POST /api/agents` |
| Update agent | `PUT /api/agents/{id}` |
| Update status online | `PATCH /api/agents/{id}/status` |
| Hapus agent | `DELETE /api/agents/{id}` |

Skema lengkap di [API Reference — Agents](/api).

## Rute terkait

- [Profile](/panduan/admin/profile) — mengubah nama sendiri
- [Change Password](/panduan/admin/change-password) — mengubah password sendiri
- [Divisi](/panduan/admin/divisi) — mengelompokkan agent
- [Activity Logs](/panduan/admin/activity-logs) — audit trail
