Chatera Docs
API & Integrasi

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/typing

Scope 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

FieldWajibTipeKeterangan
tostringNomor pelanggan (E.164)
channel_idstring (UUID)Saluran WhatsApp yang menerima pesan pelanggan. Wajib jika kamu punya lebih dari satu saluran aktif.
message_idstringwhatsappMessageId (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"
  }
}
FieldKeterangan
statusSelalu typing bila berhasil
toNomor pelanggan dalam E.164 (dengan +)
whatsappMessageIdPesan pelanggan yang ditandai dibaca
expiresInSecondsPerkiraan lama indikator tampil sebelum hilang sendiri
timestampWaktu 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

KodePenyebabSolusi
VALIDATION_INVALID_PHONEFormat to salahPakai E.164
VALIDATION_INVALID_FIELDmessage_id bukan wamid.xxxPakai whatsappMessageId dari webhook
VALIDATION_MISSING_FIELD (details.field: "channel_id")Kamu punya lebih dari satu saluran aktif tapi tidak menyertakan channel_idSertakan channel_id
WHATSAPP_CHANNEL_NOT_FOUNDchannel_id tidak valid / tidak aktif, atau belum ada saluran WhatsApp aktifCek saluran di dashboard
WHATSAPP_SESSION_CLOSEDPesan terakhir pelanggan lebih dari 24 jam laluTidak perlu indikator; kirim template
RESOURCE_NOT_FOUNDBelum ada pesan masuk dari nomor itu di saluran tersebutPastikan to dan channel_id benar, atau kirim message_id
WHATSAPP_SEND_FAILEDMeta menolak request (mis. message_id bukan milik saluran ini)Lihat details untuk detail

On this page