# Pesan audio WhatsApp

Pesan audio membawa URL publik yang diambil WhatsApp saat pengiriman. Pesan ini tidak memiliki caption, dan secara opsional dapat ditampilkan sebagai voice note.

## Mengirim pesan audio

Atur `audio.url`:

**TypeScript**

```typescript
const msg = await bird.whatsapp.send({
  to: "+16505551234",
  from: "+13124495648",
  audio: { url: "https://cdn.example.com/vm/9f2.ogg" },
});
console.log(msg.id, msg.status);
```

Examples: [TypeScript](/id-id/dokumentasi/guides/whatsapp/message-types/audio.ts.md) · [Python](/id-id/dokumentasi/guides/whatsapp/message-types/audio.py.md) · [Go](/id-id/dokumentasi/guides/whatsapp/message-types/audio.go.md) · [PHP](/id-id/dokumentasi/guides/whatsapp/message-types/audio.php.md) · [CLI](/id-id/dokumentasi/guides/whatsapp/message-types/audio.cli.md) · [MCP](/id-id/dokumentasi/guides/whatsapp/message-types/audio.mcp.md) · [cURL](/id-id/dokumentasi/guides/whatsapp/message-types/audio.curl.md)

Bentuk lengkapnya menambahkan flag opsional `voice`, satu-satunya field lain yang dimiliki `audio`:

```json
{
  "to": "+16505551234",
  "from": "+13124495648",
  "audio": { "url": "https://cdn.example.com/voice/9f2e4a.ogg", "voice": true }
}
```

`audio` sama sekali tidak memiliki field `caption`. `from` wajib ada di setiap service message: nomor yang dimiliki workspace Anda, bukan nomor yang dikelola Bird.

## Batas

| Field         | Batas                                                                | Diterapkan oleh                            |
| ------------- | -------------------------------------------------------------------- | ------------------------------------------ |
| Ukuran file   | 16 MB                                                                | WhatsApp saja, saat fetch (async)          |
| Format        | AAC, AMR, MP3, M4A, atau OGG dengan codec OPUS, mono                 | WhatsApp saja, saat fetch (async)          |
| `voice: true` | membutuhkan `.ogg`/OPUS, mono; format lain membuat transkripsi gagal | WhatsApp saja, saat fetch (async)          |
| `caption`     | bukan field yang valid                                               | Bird, saat accept (`422`, penolakan skema) |
| `url`         | absolut, `https`, memiliki host, tanpa spasi mentah                  | Bird, saat accept (`422`)                  |

Bird memeriksa bentuk URL sebelum apa pun masuk antrean; tidak memeriksa ukuran file yang sebenarnya, format, atau codec, dan tidak memeriksa apakah pengiriman `voice: true` benar-benar `.ogg`/OPUS. Hanya fetch WhatsApp sendiri saat pengiriman yang bisa memeriksanya. Mengirim `caption` pada pesan audio bukan kesalahan panjang; field tersebut tidak ada di skema arm ini, sehingga gagal sebagai properti yang tidak dikenali. Lihat [mengirim media melalui URL](/docs/guides/whatsapp/message-types#sending-media-by-url) dan [ketika media gagal](/docs/guides/whatsapp/message-types#when-media-fails) di hub.

## Membaca pesan audio masuk

Pesan audio masuk membawa objek `audio` yang sama, ditambah `id` dan `mime_type` yang dipelajari Bird dengan mengambil file tersebut, dan tanpa `caption` di kedua arah. Lihat [Menerima audio WhatsApp](/docs/guides/whatsapp/receiving-whatsapp/audio) untuk pembacaan masuk secara lengkap, payload `whatsapp.received`, dan hal-hal yang perlu diperhatikan.

## Batas dan mode kegagalan

- **Customer service window harus terbuka.** Audio adalah service message, hanya dapat dikirim di dalam window yang terbuka; lihat [customer service window](/docs/guides/whatsapp/message-types#the-customer-service-window) di hub.
- **Bird menolak `http`; WhatsApp sendiri yang akan mengambilnya.** Lihat [mengirim media melalui URL](/docs/guides/whatsapp/message-types#sending-media-by-url) di hub untuk pemeriksaan bentuk lengkapnya.
- **Fetch yang ditolak tetap dikenakan biaya.** Lihat [ketika media gagal](/docs/guides/whatsapp/message-types#when-media-fails) di hub. Teks penolakan khusus audio dari WhatsApp belum diukur secara independen, jadi perlakukan pemetaannya sebagai kesimpulan dari simetri, bukan dikonfirmasi per penyebab.
- **Flag `voice` mengubah cara klien penerima menampilkan pesan, bukan apa yang divalidasi Bird.** `voice: true` menampilkannya sebagai voice note: otomatis mengunduh, menampilkan ikon mikrofon inline, dan dapat ditranskripsikan. Agar berfungsi dengan benar, dibutuhkan file `.ogg` yang di-encode dengan OPUS, mono; format lain tetap terkirim, tetapi transkripsi gagal di sisi penerima. `voice` secara default bernilai `false`.
- **Ambang batas ikon putar WhatsApp dan sinyal "played" bukan sesuatu yang dimunculkan Bird.** WhatsApp mendokumentasikan perilaku klien seputar voice note kecil dan status sudah diputar, tetapi Bird tidak memodelkan keduanya; jangan membangun integrasi yang mengharapkan bisa membaca keduanya kembali dari API.
- **WhatsApp meng-cache URL yang diambil selama sekitar 10 menit.** Mengirim ulang URL yang sama dalam jangka waktu tersebut akan menyajikan kembali hasil fetch pertama; variasikan URL untuk memaksa fetch baru.

## Langkah selanjutnya

- [Service message WhatsApp](/docs/guides/whatsapp/message-types): customer service window dan model yang digunakan bersama oleh setiap service message
- [Video](/docs/guides/whatsapp/message-types/video): untuk klip video, bukan audio
- [Stiker](/docs/guides/whatsapp/message-types/stickers): arm media lain tanpa field caption
- [Mengirim pesan WhatsApp](/docs/guides/whatsapp/sending-whatsapp): request envelope, model `202`, dan cara coba lagi yang aman

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/products/whatsapp) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
