# Konsep Inti


Sebelum mulai menggunakan OmniStream, pahami beberapa istilah kunci
yang akan sering Anda temui di antarmuka dan dokumentasi ini.

## Kontak (Contact)

**Kontak** adalah seorang pelanggan yang pernah berinteraksi dengan
workspace Anda melalui salah satu channel. Setiap kontak memiliki:

- **ID unik** — UUID yang dihasilkan saat interaksi pertama.
- **Nama** — diambil dari Meta (WhatsApp/Instagram) atau header email;
  dapat diedit agent.
- **Identitas channel** — nomor telepon (WhatsApp), Instagram ID, atau
  alamat email.
- **Tag** — label untuk kategorisasi jangka panjang (mis. `vip`).
- **Custom fields** — metadata tambahan (alamat, preferensi bahasa).

Satu kontak dapat terhubung ke banyak percakapan lintas channel.

## Percakapan (Conversation)

**Percakapan** adalah sebuah thread komunikasi antara seorang kontak
dan workspace Anda. Sebuah percakapan selalu terikat ke:

- Satu kontak
- Satu channel (WhatsApp, Instagram, atau Email)
- Satu agent penanggung jawab (opsional — bisa unassigned)
- Satu divisi (opsional)

Percakapan memiliki status `open` atau `resolved`. Percakapan baru
otomatis dibuat saat sebuah kontak mengirim pesan pertama ke
workspace Anda.

> **Catatan:** Jika kontak yang sama menghubungi Anda dua kali dari
> channel yang sama dalam waktu &lt;24 jam, OmniStream akan melanjutkan
> percakapan `open` yang sudah ada, bukan membuat percakapan baru.

## Pesan (Message)

**Pesan** adalah satu unit komunikasi di dalam percakapan. Pesan
dapat berupa:

- **Teks** — string dengan panjang bervariasi per channel.
- **Media** — gambar, video, dokumen, audio.
- **Lokasi** — koordinat GPS (khusus WhatsApp).
- **Kontak** — kartu kontak vCard (khusus WhatsApp).
- **Reaksi** — emoji reaksi ke pesan lain (khusus WhatsApp).
- **Template** — pesan WhatsApp berbasis template yang disetujui.

Pesan memiliki `direction`:

- `inbound` — pesan dari kontak ke workspace Anda.
- `outbound` — pesan dari agent ke kontak.

Dan `status` (untuk outbound):

`pending → sent → delivered → read` (atau `failed` bila gagal kirim).

## Agent

**Agent** adalah pengguna aplikasi OmniStream yang menerima dan
membalas pesan. Setiap agent memiliki:

- Nama, email, password (hash Argon2)
- **Peran** — `admin`, `supervisor`, atau `agent`
- **Divisi** — satu atau banyak divisi (via tabel `agent_divisions`)
- **Status presence** — `online`, `away`, atau `offline`

## Peran (Role)

Tiga peran dengan akses berbeda:

| Peran | Akses |
|-------|-------|
| **Agent** | Membaca dan membalas percakapan yang ditugaskan kepadanya saja. |
| **Supervisor** | Membaca/membalas semua percakapan di divisi yang disupervisi; melihat dashboard analytics. |
| **Admin** | Akses penuh: kelola agent, divisi, integrasi, kebijakan SLA, CSAT, campaigns, webhooks. |

Detail lengkap di [Peran pengguna](/panduan/pengenalan/peran-pengguna).

## Divisi (Division)

**Divisi** adalah kelompok agent yang bertanggung jawab atas sebagian
percakapan — biasanya diorganisir berdasarkan fungsi bisnis
(`Sales`, `Technical Support`, `Billing`). Divisi memiliki antrean
percakapan tersendiri dan kebijakan SLA yang dapat dibedakan.

## Channel

**Channel** adalah jalur komunikasi: `whatsapp`, `instagram`, atau
`email`. Setiap channel memiliki kredensial integrasi yang dikelola
admin (akses token Meta, konfigurasi SMTP) di halaman
[Integrations](/panduan/integrasi/integrations-overview).

## Messaging window

Meta Platform (WhatsApp dan Instagram) membatasi pengiriman pesan
bebas hanya dalam **24 jam** setelah pesan terakhir pelanggan. Setelah
window tertutup:

- WhatsApp: hanya template yang disetujui yang boleh dikirim.
- Instagram: hanya pesan sesuai kebijakan **Human Agent Tag** yang
  boleh dikirim.

OmniStream menampilkan sisa waktu window di header percakapan dan di
kartu daftar inbox.

## Tag

**Tag** adalah label pendek yang melekat pada:

- **Tag percakapan** — untuk mengelompokkan berdasarkan topik atau
  kategori (mis. `refund`, `escalated`).
- **Tag kontak** — untuk status jangka panjang (mis. `vip`, `opt-out`).

Tag membantu filter, pelaporan, dan routing.

## SLA policy

**Service Level Agreement** — kebijakan waktu respon dan waktu
penyelesaian yang harus dipenuhi agent:

- **First Response Time (FRT)** — waktu dari pesan inbound pertama
  hingga agent membalas.
- **Resolution Time** — waktu dari percakapan dibuka hingga
  di-resolve.

Kebijakan dapat dikonfigurasi per channel dan/atau per divisi. Detail
di [Kebijakan SLA](/panduan/admin/kebijakan-sla).

## Quick reply dan template

- **Quick reply** — teks pendek yang dapat disisipkan di kotak input
  agent via perintah `/`. Tersimpan di PostgreSQL.
- **Template WhatsApp** — pesan berbasis template Meta yang
  disetujui, digunakan untuk mengirim pesan di luar messaging window.
  Dikelola di halaman [WA Templates](/panduan/integrasi/wa-templates).

## Event-driven architecture (EDA)

Di balik layar, setiap pesan masuk/keluar melewati sebuah topologi
event yang terdiri dari:

1. **Webhook ingestor** menerima payload dari Meta/email provider.
2. **Kafka (Redpanda)** menampung event untuk diproses asinkron.
3. **Chat engine** mem-parse, meng-upsert kontak/percakapan, menyimpan
   ke PostgreSQL + MongoDB, lalu mempublikasikan ke Redis pub/sub.
4. **WebSocket server** mendengarkan Redis dan meneruskan ke browser
   agent.
5. **Message sender** mengambil pesan outbound dari Kafka dan mengirim
   ke Meta/SMTP.

Dari sudut pandang pengguna akhir, semua kompleksitas ini transparan — Anda
tinggal membuka inbox dan membalas.

## Di mana istilah ini dipakai

Istilah di atas muncul di:

- **API Reference** — `contact_id`, `conversation_id`, `message_id`
  adalah UUID yang dipakai di semua endpoint REST.
- **Antarmuka web** — label di inbox, daftar kontak, dashboard, dan
  halaman pengaturan mengikuti konvensi istilah ini dalam Bahasa
  Indonesia.

---

Baca selanjutnya: [Peran pengguna](/panduan/pengenalan/peran-pengguna).
