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:
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
| Field | Tipe | Index | Catatan |
|---|---|---|---|
id | String | ✅ | ID pesan (UUID) |
pesan | String | — | Isi pesan teks |
caption | String | — | Caption media |
nohp | String | ✅ | Nomor HP pengirim/penerima |
waktu | String | — | Timestamp (string) |
jenis | String | — | Jenis pesan |
status | Number | — | Status pesan |
id_user | String | — | ID user |
id_cs | String | — | ID customer service |
id_gudang | [String] | — | Array ID gudang |
id_team | String | — | ID team |
instance | String | ✅ | instanceId — key ke sesi WhatsApp |
nama | String | — | Nama pengirim |
chatid | String | — | ID chat |
role | String | — | Role pengirim (cs, user, dll.) |
profilepic | String | — | URL foto profil |
tipe | String | — | Tipe pesan |
status_ack | String | — | Status ACK (pending/sent/delivered/viewed/played) |
quotemsgbody | String | — | Isi pesan yang dibalas (quote) |
kategori | String | — | Kategori pesan |
groupname | String | — | Nama grup (bila dari grup) |
pesan_id | String | ✅ | ID pesan WhatsApp (dari Baileys key.id) — dipakai engine untuk lookup |
temp_id | String | ✅ | ID sementara — dicari engine saat status ACK |
chat_list_id | String | — | ID chat list |
chat_status | String | — | Status chat |
is_read | Number | — | Flag sudah dibaca |
is_start | Number | — | Flag pesan awal |
jalur | String | — | Jalur pesan |
_id | ObjectId | auto | Mongo default |
Cara engine memakai
Engine hanya membaca — tidak menulis ke chat_inbox. Saat memproses messages.update (status ACK):
src/service/whatsappService.ts:283-286:
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
| Service | Akses |
|---|---|
backend-go | Writer — create/update pesan |
engine-whatsapp | Read-only — cari temp_id by pesan_id + instance |
dazoapp | Mungkin read — verifikasi |
Contoh dokumen
{
"_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
chat_histories? Baca chat_histories.devices? Baca devices.- Cara status ACK diproses? Baca Message Flow.