D
Engineering

chat_inbox Collection

Koleksi chat_inbox untuk pesan masuk/keluar. Dibaca engine untuk cari temp_id berdasarkan pesan_id dan instance. Menggunakan strict false sehingga field tambahan dari backend-go tersimpan tanpa validasi.

Koleksi chat_inbox menyimpan pesan masuk dan keluar. Engine WhatsApp membaca koleksi ini (read-only) untuk mencari temp_id berdasarkan pesan_id + instance saat memproses status ACK.

Model

src/model/chatInbox.model.ts:

ts
const ChatInboxSchema = new Schema<ChatInboxCollection>(
  {
    id: { type: String, index: true },
    pesan: { type: String },
    caption: { type: String },
    nohp: { type: String, index: true },
    waktu: { type: String },
    jenis: { type: String },
    status: { type: Number },
    id_user: { type: String },
    id_cs: { type: String },
    id_gudang: { type: [String] },
    id_team: { type: String },
    instance: { type: String, index: true },
    nama: { type: String },
    chatid: { type: String },
    role: { type: String },
    profilepic: { type: String },
    tipe: { type: String },
    status_ack: { type: String },
    quotemsgbody: { type: String },
    kategori: { type: String },
    groupname: { type: String },
    pesan_id: { type: String, index: true },
    temp_id: { type: String, index: true },
    chat_list_id: { type: String },
    chat_status: { type: String },
    is_read: { type: Number },
    is_start: { type: Number },
    jalur: { type: String },
  },
  { strict: false }   // ← field tambahan dari writer tetap tersimpan
);

export const ChatInboxModel = model<ChatInboxCollection>(
  'chat_inbox',
  ChatInboxSchema,
  'chat_inbox',   // nama koleksi eksplisit
);

Field

FieldTipeIndexCatatan
idString✅ID pesan (UUID)
pesanString—Isi pesan teks
captionString—Caption media
nohpString✅Nomor HP pengirim/penerima
waktuString—Timestamp (string)
jenisString—Jenis pesan
statusNumber—Status pesan
id_userString—ID user
id_csString—ID customer service
id_gudang[String]—Array ID gudang
id_teamString—ID team
instanceString✅instanceId — key ke sesi WhatsApp
namaString—Nama pengirim
chatidString—ID chat
roleString—Role pengirim (cs, user, dll.)
profilepicString—URL foto profil
tipeString—Tipe pesan
status_ackString—Status ACK (pending/sent/delivered/viewed/played)
quotemsgbodyString—Isi pesan yang dibalas (quote)
kategoriString—Kategori pesan
groupnameString—Nama grup (bila dari grup)
pesan_idString✅ID pesan WhatsApp (dari Baileys key.id) — dipakai engine untuk lookup
temp_idString✅ID sementara — dicari engine saat status ACK
chat_list_idString—ID chat list
chat_statusString—Status chat
is_readNumber—Flag sudah dibaca
is_startNumber—Flag pesan awal
jalurString—Jalur pesan
_idObjectIdautoMongo default

Cara engine memakai

Engine hanya membaca — tidak menulis ke chat_inbox. Saat memproses messages.update (status ACK):

src/service/whatsappService.ts:283-286:

ts
const inbox = await ChatInboxModel.findOne({
  pesan_id: update.key.id,      // ID pesan WhatsApp
  instance: instanceId,         // instanceId sesi
});

const payload = {
  result: true,
  report: true,
  number: from,
  temp_id: inbox?.temp_id ?? null,   // ← ambil temp_id jika ada
  id: update.key.id,
  status: statusStr,                 // pending/sent/delivered/viewed/played
  instanceID: instanceId,
};

Writer — backend-go

backend-go menulis pesan masuk dan keluar ke chat_inbox. Karena strict: false, backend-go dapat menambah field tanpa update schema engine. Tapi jika backend-go mengubah field pesan_id atau instance, engine akan gagal lookup temp_id.

Shared dengan

ServiceAkses
backend-goWriter — create/update pesan
engine-whatsappRead-only — cari temp_id by pesan_id + instance
dazoappMungkin read — verifikasi

Contoh dokumen

json
{
  "_id": "65a1b2c3d4e5f6a7b8c9d0e3",
  "id": "inbox-uuid-123",
  "pesan": "Halo, saya mau tanya produk",
  "caption": "",
  "nohp": "628123456789",
  "waktu": "2024-01-15 10:30:00",
  "jenis": "text",
  "status": 1,
  "id_user": "user-123",
  "id_cs": "cs-456",
  "id_gudang": [],
  "id_team": "team-1",
  "instance": "0c1a968c-7918-4c29-a524-0ad7c445ee7f",
  "nama": "Budi",
  "chatid": "chat-1",
  "role": "user",
  "profilepic": "https://...",
  "tipe": "text",
  "status_ack": "delivered",
  "quotemsgbody": "",
  "kategori": "",
  "groupname": "",
  "pesan_id": "3EB0...",
  "temp_id": "temp-abc-123",
  "chat_list_id": "cl-1",
  "chat_status": "open",
  "is_read": 0,
  "is_start": 1,
  "jalur": "whatsapp",
  "__v": 0
}

Langkah berikutnya