Indikator Mengetik
Tampilkan status "mengetik…" di WhatsApp pelanggan selagi sistem kamu menyiapkan balasan.
Saat bot atau sistem kamu butuh beberapa detik untuk menyiapkan balasan (mis. memanggil AI, mengecek stok, atau mencari data pesanan), pelanggan bisa mengira pesannya diabaikan. Endpoint ini menampilkan status "mengetik…" di aplikasi WhatsApp pelanggan, sehingga mereka tahu balasan sedang disiapkan.
POST /v1/whatsapp/typingScope yang dibutuhkan: whatsapp:send
Semua path di halaman ini relatif terhadap base URL https://api.chatera.id/v1.
Pesan juga ditandai sudah dibaca
WhatsApp menampilkan indikator mengetik bersamaan dengan tanda baca. Memanggil endpoint ini membuat pesan pelanggan bertanda centang biru (sudah dibaca). Ini perilaku WhatsApp dan tidak bisa dipisahkan.
Body request
| Field | Wajib | Tipe | Keterangan |
|---|---|---|---|
to | ✅ | string | Nomor pelanggan (E.164) |
channel_id | — | string (UUID) | Saluran WhatsApp yang menerima pesan pelanggan. Wajib jika kamu punya lebih dari satu saluran aktif. |
message_id | — | string | whatsappMessageId (wamid.xxx) dari pesan pelanggan yang sedang kamu balas. Jika kosong, Chatera memakai pesan masuk terakhir dari nomor tersebut di saluran itu. |
{
"to": "628123456789",
"channel_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"message_id": "wamid.HBgNNjI4MTIzNDU2Nzg5FQIAERgSRDM0NEU3RkY1..."
}Nilai message_id dan channel_id tersedia langsung di payload webhook
message.inbound (data.whatsappMessageId
dan data.channelId).
Pola yang disarankan
Terima webhook message.inbound dari Chatera.
Panggil POST /v1/whatsapp/typing dengan message_id dan channel_id
dari webhook tersebut.
Siapkan balasan di sistem kamu.
Kirim balasan lewat POST /v1/whatsapp/messages.
Indikator mengetik otomatis hilang begitu balasan terkirim.
Contoh
curl -X POST https://api.chatera.id/v1/whatsapp/typing \
-H "Authorization: Bearer chatera_sk_xxx" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"message_id": "wamid.HBgNNjI4MTIzNDU2Nzg5FQIAERgSRDM0NEU3RkY1..."
}'// Di handler webhook message.inbound
const { whatsappMessageId, channelId, sender } = event.data
await fetch('https://api.chatera.id/v1/whatsapp/typing', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CHATERA_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: sender.phone,
channel_id: channelId,
message_id: whatsappMessageId,
}),
})
const reply = await generateReply(event.data) // proses di sistem kamu
await fetch('https://api.chatera.id/v1/whatsapp/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CHATERA_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: sender.phone,
channel_id: channelId,
type: 'text',
text: { body: reply },
}),
})Response
{
"success": true,
"data": {
"status": "typing",
"to": "+628123456789",
"whatsappMessageId": "wamid.HBgNNjI4MTIzNDU2Nzg5FQIAERgSRDM0NEU3RkY1...",
"expiresInSeconds": 25,
"timestamp": "2026-09-24T10:51:33.228Z"
}
}| Field | Keterangan |
|---|---|
status | Selalu typing bila berhasil |
to | Nomor pelanggan dalam E.164 (dengan +) |
whatsappMessageId | Pesan pelanggan yang ditandai dibaca |
expiresInSeconds | Perkiraan lama indikator tampil sebelum hilang sendiri |
timestamp | Waktu request diproses (ISO 8601) |
Batasan
- Indikator hilang sendiri setelah ±25 detik atau saat balasan terkirim, mana yang lebih dulu. Tidak ada endpoint untuk menghentikannya.
- Untuk proses lebih dari 25 detik, panggil ulang endpoint ini — cukup sekali setiap ±20 detik. Setiap panggilan dihitung ke rate limit API key kamu.
- Hanya bisa dipakai saat jendela 24 jam masih terbuka, karena di luar itu kamu tidak bisa membalas dengan pesan biasa.
- Hanya berlaku ke arah pelanggan. WhatsApp tidak memberi tahu saat pelanggan sedang mengetik, jadi tidak ada webhook untuk itu.
Pesan error
| Kode | Penyebab | Solusi |
|---|---|---|
VALIDATION_INVALID_PHONE | Format to salah | Pakai E.164 |
VALIDATION_INVALID_FIELD | message_id bukan wamid.xxx | Pakai whatsappMessageId dari webhook |
VALIDATION_MISSING_FIELD (details.field: "channel_id") | Kamu punya lebih dari satu saluran aktif tapi tidak menyertakan channel_id | Sertakan channel_id |
WHATSAPP_CHANNEL_NOT_FOUND | channel_id tidak valid / tidak aktif, atau belum ada saluran WhatsApp aktif | Cek saluran di dashboard |
WHATSAPP_SESSION_CLOSED | Pesan terakhir pelanggan lebih dari 24 jam lalu | Tidak perlu indikator; kirim template |
RESOURCE_NOT_FOUND | Belum ada pesan masuk dari nomor itu di saluran tersebut | Pastikan to dan channel_id benar, atau kirim message_id |
WHATSAPP_SEND_FAILED | Meta menolak request (mis. message_id bukan milik saluran ini) | Lihat details untuk detail |