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

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 olehcompany_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 olehDirectMessageInbox 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 fieldattachments 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_urldanattachment_name - Link ke entitas terkait melalui
related_entity_typedanrelated_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
- Buka Team Chat dari sidebar — pilih channel yang sudah ada atau buat baru
- Ketik pesan di input box dan kirim — pesan langsung muncul di semua client via Pusher
- Untuk kirim gambar, klik ikon attachment — gambar dikompresi otomatis sebelum upload
- Balas pesan tertentu dengan klik Reply — reply thread ditampilkan inline
- Pin pesan penting dengan klik Pin — muncul di atas channel untuk referensi cepat
- Untuk direct message, klik avatar user — DirectMessageInbox terbuka
- Gunakan search bar untuk mencari pesan lama dalam channel
- Edit pesan yang sudah terkirim — ditandai dengan label “edited” dan timestamp
edited_at - 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
mentionsuntuk menotifikasi anggota tim spesifik dalam pesan channel - Gunakan channel
privateuntuk 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
InternalMessagedenganrelated_entity_typeagar mudah ditelusuri
