Mengirim Pesan Teks
Mengirim Pesan Teks
Halaman ini membahas cara mengirim balasan teks dari kotak input di panel chat. Alur pengiriman sama untuk ketiga channel (WhatsApp, Instagram DM, dan Email), tetapi ada perbedaan kecil yang perlu Anda perhatikan — terutama soal messaging window dan format yang didukung.
Rute frontend: /inbox (kotak input di bawah panel chat)

Ringkasan
Kotak input pesan menampilkan textarea multi-baris di bagian bawah panel chat. Di kiri textarea terdapat tombol untuk:
- Paperclip — lampirkan media (lihat Mengirim media)
- Zap — buka daftar quick reply (lihat Quick replies)
- Smile — buka picker emoji
- Clock — jadwalkan pesan untuk dikirim di waktu tertentu
- LayoutTemplate — kirim template WhatsApp (jika channel = WhatsApp)
Di kanan terdapat tombol Send yang akan aktif setelah Anda mengetik sesuatu atau melampirkan media.
Langkah-langkah mengirim pesan
- Buka percakapan dari inbox (lihat Membuka percakapan).
- Klik kotak input di bagian bawah.
- Ketik isi balasan. Tekan Shift + Enter untuk baris baru, Enter untuk mengirim.
- (Opsional) Klik ikon Smile untuk menambahkan emoji.
- Klik tombol Send (atau tekan Enter) untuk mengirim.
Backend akan memanggil
POST /api/conversations/{id}/messages dengan
body:
Code
Alur internal
Pesan tidak langsung dikirim ke Meta/SMTP. Secara internal:
api-gatewaymenerima permintaan, memvalidasi JWT agent, lalu menyimpan pesan ke MongoDB dengan statuspending.api-gatewaymenulis job ke satu topik Kafkachannel.outbound.jobdengan payloadOutboundMessageJob { channel: "whatsapp" | "messenger" | "instagram" | "email", ... }.message-sender(satu binary) mengonsumsichannel.outbound.job, membaca fieldchannelpada job, lalu memanggil Meta Graph API atau SMTP via modul per saluran (whatsapp.rs/messenger.rs/instagram.rs/email.rs).- Setelah sukses, status pesan diubah ke
sent, kemudiandelivereddanreadmelalui webhook status dari Meta. - Setiap perubahan status disiarkan ke browser melalui channel Redis
pub/sub
conversation_updatesdan WebSocket.
Agent tidak perlu me-refresh; status akan memperbarui diri sendiri di bubble pesan.
Format yang didukung per channel
| Fitur | Instagram DM | ||
|---|---|---|---|
| Teks biasa | Ya | Ya | Ya |
| Emoji | Ya | Ya | Ya |
Pemformatan *bold* / _italic_ / ~strike~ | Ya (WhatsApp markdown) | Tidak | Tidak (gunakan HTML) |
| Baris baru | Ya | Ya | Ya |
| Link preview | Otomatis | Otomatis | Bergantung klien email |
| Panjang maksimum | ~4096 karakter | ~1000 karakter | Tidak ada batas praktis |
Untuk email, Anda juga dapat mengirim HTML dengan menyertakan field html di
body permintaan. Frontend v1 tetap menggunakan plain text untuk kesederhanaan.
Messaging window (WhatsApp dan Instagram)
Meta mewajibkan 24-hour messaging window: Anda hanya dapat mengirim pesan teks bebas jika pelanggan mengirim pesan dalam 24 jam terakhir. Setelah window tertutup:
- Kotak input teks akan dinonaktifkan.
- Tombol Template tetap aktif — Anda dapat memilih template yang sudah disetujui (lihat WA Templates).
Sistem OmniStream menampilkan sisa waktu window di header percakapan dalam
bentuk badge 2h 15m left sehingga Anda dapat memprioritaskan respons yang
akan segera kedaluwarsa.
Menjadwalkan pesan
Klik ikon Clock di kiri textarea untuk membuka form penjadwalan:
- Pilih tanggal dan jam kirim.
- Ketik isi pesan.
- Klik Schedule.
Frontend akan memanggil
POST /api/scheduled-messages dengan
body yang berisi conversation_id, send_at, dan body. Scheduler di
api-gateway akan memeriksa antrean tiap 30 detik dan memindahkannya ke
topik channel.outbound.* bila waktu kirim tiba.
Catatan: Pesan terjadwal tetap tunduk pada messaging window. Jika window tertutup saat waktu kirim tiba, pesan akan gagal dan Anda akan melihat status
failed.
Langkah kerja khas
- Buka percakapan dari inbox.
- Ketik balasan singkat dan jelas.
- (Opsional) Gunakan quick reply
/salamatau/terimakasihuntuk balasan standar. - Klik Send.
- Pantau status pesan di bubble —
sent → delivered → read.
Baca selanjutnya: Mengirim media.