Skip to main content

title: “Team Chat” description: “Real-time team chat dengan Pusher WebSocket, channel management, direct message, file sharing via Cloudinary, dan reply threads di SNISHOP ERP.”

Team Chat

Team Chat Team Chat adalah sistem komunikasi internal terpusat untuk tim kamu. Dibangun di atas TeamChat.jsx (568 baris) dengan arsitektur Pusher WebSocket untuk messaging real-time, mendukung channel group, direct message, reply threads, pin message, dan file sharing via Cloudinary. Semua percakapan tersimpan di base44 backend dan di-scope per company, memastikan data tidak bocor antar perusahaan. Fitur ini mengurangi ketergantungan pada aplikasi chat eksternal dan menjaga semua komunikasi kerja tetap terdokumentasi dalam satu platform.

Fitur Utama


Arsitektur Komponen

Diagram Konteks Sistem


Entity Relationship Diagram


Entity Schema

TeamChat (Chat Message)

Entitas utama untuk menyimpan setiap pesan dalam channel chat. Setiap pesan terasosiasi dengan channel tertentu dan di-scope oleh company_id.

Struktur Sub-field: attachments

Struktur Sub-field: read_by


ChatChannel

Entitas yang merepresentasikan channel atau room untuk komunikasi grup. Mendukung tiga tipe channel: public, private, dan direct.

InternalMessage (Direct Message)

Entitas untuk pesan langsung 1-to-1, announcement, dan notifikasi workflow. Digunakan oleh DirectMessageInbox untuk percakapan privat antar anggota tim.

Conversation (AI Chat)

Entitas untuk percakapan AI assistant dalam platform. Berbeda dengan TeamChat — ini menyimpan riwayat percakapan user dengan AI.

Struktur Sub-field: messages


Notification

Entitas notifikasi yang terintegrasi dengan sistem chat. Dipicu otomatis saat mengirim DM atau terjadi event penting lainnya.

Enum Reference Tables

TeamChat.message_type

ChatChannel.channel_type

InternalMessage.message_type

Conversation.messages[].role

Notification.type

Notification.priority


State Diagrams

Siklus Hidup Pesan (TeamChat)

Siklus Hidup Channel (ChatChannel)

Siklus Hidup Direct Message (InternalMessage)


Sequence Diagrams

Flow 1: Mengirim Pesan Channel

Flow 2: Membuat Channel Baru

Flow 3: File Sharing (Upload Gambar)

Flow 4: Direct Message (DM)

Flow 5: Reply Thread


Real-Time Architecture

Pusher Configuration

Direct Message Fallback

DM menggunakan polling setiap 4 detik sebagai fallback karena Pusher tidak selalu tersedia untuk 1-to-1 messaging:

Message Type Handling

Image Upload Pipeline

Attachment Structure

Setiap attachment dalam field attachments memiliki struktur sebagai berikut:

Date Grouping

Pesan dikelompokkan berdasarkan tanggal dengan label otomatis: Implementasi menggunakan library date-fns dengan locale Indonesia untuk formatting yang konsisten.

Direct Message (DM)

DirectMessageInbox (345 baris) menyediakan messaging 1-to-1 dalam full-screen dialog:

Fitur DM

  • Grouping percakapan per kontak
  • Tracking read/unread status
  • Auto-create Notification entity saat mengirim pesan
  • Polling 4 detik untuk pesan baru
  • Dukungan attachment via attachment_url dan attachment_name
  • Link ke entitas terkait melalui related_entity_type dan related_entity_id

Tipe Pesan InternalMessage


Channel Management

Tipe Channel

Manajemen Anggota Channel


Message Actions


Read Receipts

Sistem read receipt memungkinkan pengirim mengetahui siapa saja yang sudah membaca pesannya: Read receipt di-update saat user membuka channel atau DM yang berisi pesan tersebut.

Scroll Behavior

Sistem mendeteksi posisi scroll dan menampilkan tombol “scroll down” jika user berada >100px dari bawah. Ini mencegah user kehilangan konteks saat pesan baru masuk.

Company Scope Security

DirectMessageInbox.companyScopePolicy.test.js (16 baris) memverifikasi bahwa semua query DM menyertakan filter company_id, memastikan data tidak bocor lintas perusahaan.

Isolasi Data per Entitas


RBAC Permission Matrix

Berikut adalah matriks hak akses berdasarkan role dalam konteks Team Chat:

Integrasi Eksternal

Detail Integrasi Cloudinary


Cara Akses

Dari sidebar, klik menu Communication > Team Chat.

Flow Penggunaan

  1. Buka Team Chat dari sidebar — pilih channel yang sudah ada atau buat baru
  2. Ketik pesan di input box dan kirim — pesan langsung muncul di semua client via Pusher
  3. Untuk kirim gambar, klik ikon attachment — gambar dikompresi otomatis sebelum upload
  4. Balas pesan tertentu dengan klik Reply — reply thread ditampilkan inline
  5. Pin pesan penting dengan klik Pin — muncul di atas channel untuk referensi cepat
  6. Untuk direct message, klik avatar user — DirectMessageInbox terbuka
  7. Gunakan search bar untuk mencari pesan lama dalam channel
  8. Edit pesan yang sudah terkirim — ditandai dengan label “edited” dan timestamp edited_at
  9. Mention anggota tim spesifik untuk menarik perhatian mereka

Tips

  • Buat channel per proyek atau divisi supaya diskusi tetap terfokus dan tidak tercampur
  • Gunakan reply thread untuk menjaga konteks percakapan — hindari pesan yang melenceng dari topik
  • Pin pesan yang berisi keputusan penting atau informasi yang sering dirujuk
  • Untuk diskusi yang perlu keputusan formal, gunakan meeting langsung — chat cocok untuk koordinasi cepat
  • Manfaatkan fitur mentions untuk menotifikasi anggota tim spesifik dalam pesan channel
  • Gunakan channel private untuk diskusi sensitif yang tidak boleh dilihat semua anggota
  • Kompresi gambar otomatis memastikan upload cepat bahkan dengan koneksi lambat
  • Untuk pesan yang berkaitan dengan entitas bisnis tertentu (task, invoice), gunakan InternalMessage dengan related_entity_type agar mudah ditelusuri

Troubleshooting