# Aturan keyword

Bird menyediakan katalog keyword, sehingga penerima yang membalas `STOP` ke salah satu nomor Anda yang mendukung pesan masuk langsung ter-opt-out tanpa perlu pengaturan dari Anda. `START` membatalkannya. Aturan buatan Anda menggantikan default Bird untuk cakupan yang ditentukan aturan tersebut.

Halaman ini membahas apa yang dikenali Bird, cara pesan masuk dicocokkan, dan cara mengubah kata balasan atau menambahkan keyword. Halaman [**Keywords**](https://bird.com/dashboard/w/whatsapp/keyword-rules) adalah padanannya di dashboard.

![Daftar aturan kata kunci, dengan aturan workspace di atas aturan default yang ditimpanya](/images/docs/dashboard-whatsapp-keyword-rules.png)

## Apa yang dikenali Bird secara default

Sembilan kata mencatat opt-out:

`stop`, `stop all`, `stopall`, `unsubscribe`, `cancel`, `end`, `quit`, `revoke`, `optout`

Dua kata membatalkannya: `start` dan `unstop`.

Pencocokan dilakukan pada keseluruhan pesan, bukan pada substring. Karena `cancel` dan `end` adalah keyword, perbedaan ini penting: "cancel my 3pm delivery" adalah pesan biasa, bukan pencabutan persetujuan. Huruf besar-kecil, aksen, spasi berulang, dan tanda baca di akhir diabaikan, sehingga `Stop!` dan `STOP` keduanya cocok. Tanda baca sebelum atau di dalam kata tidak diabaikan, sehingga `#stop` tidak cocok.

## Di mana keyword tidak dicocokkan

Keyword di dalam pesan grup dilewati, sehingga peserta tidak bisa opt-out dengan membalas di sana. Hormati opt-out yang dinyatakan anggota grup dalam logika pengiriman Anda sendiri.

## Kapan preferensi dicatat

Klasifikasi berjalan bersamaan dengan event `whatsapp.received`, bukan mendahuluinya. Integrasi yang memantau event tersebut bisa melihat `STOP` tiba sebelum preferensi yang dicatatnya ada. Jika handler Anda bereaksi terhadap pesan masuk dengan mengirim sesuatu, baca ulang data penerima daripada mengasumsikan urutan event.

## Melihat aturan yang berlaku

`GET /v1/whatsapp/keyword-rules` menjelaskan cara balasan ke nomor Anda ditangani. Tanpa filter, endpoint ini mengembalikan katalog Bird bersama aturan yang telah Anda buat. Persempit dengan `country`, `waba`, `operation`, atau `scope`:

- `scope=system` mengembalikan katalog Bird, termasuk default yang digantikan oleh aturan Anda.
- `scope=workspace` mengembalikan aturan buatan Anda.

**TypeScript**

```typescript
const rules = await bird.whatsapp.keywordRules.list({ operation: "opt_out" });
for (const rule of rules.data ?? []) {
  console.log(rule.scope, rule.effective_keywords);
}
```

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

Aturan dikembalikan dari yang paling spesifik, yaitu urutan yang digunakan untuk mencocokkan pesan masuk. Setiap aturan membawa `effective_keywords`: kumpulan Bird untuk operasi dan negara tersebut, ditambah keyword yang Anda tambahkan.

Untuk aturan buatan Anda tanpa `country`, `effective_keywords` menampilkan kumpulan seluruh dunia Bird, karena aturan tersebut tidak memiliki negara dan negara pengirim tidak diketahui hingga pesan tiba. Aturan tersebut dicocokkan terhadap kumpulan Bird untuk negara pengirim, yang bisa merupakan kumpulan lebih besar. Tetapkan `country` pada aturan Anda untuk melihat persis apa yang dicocokkan pengirim tersebut.

`country` adalah negara pengirim, yang ditentukan dari nomor telepon pengirim sendiri, bukan nomor yang mereka kirimi pesan. Ini adalah sinyal negara yang dikirim WhatsApp. Pengirim yang diidentifikasi oleh user ID berskala bisnis tidak membawa negara, sehingga pesan dari pengirim tersebut melewati aturan berskala negara dan cocok dengan aturan seluruh dunia.

## Mengubah balasan

Balasan default Bird sudah benar tetapi bersifat umum. Untuk menjawab atas nama Anda sendiri, buat aturan:

**TypeScript**

```typescript
const rule = await bird.whatsapp.keywordRules.create({
  operation: "opt_out",
  country: "US", // the SENDER's country, from their own number
  reply: "You're off the list. ACME Courier won't message you again.",
});
// effective_keywords is Bird's set plus any of your own.
console.log(rule.id, rule.effective_keywords);
```

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

Aturan Anda menggantikan balasan Bird untuk cakupan tersebut dan mempertahankan keyword Bird. `keywords` Anda adalah tambahan, bukan pengganti, sehingga keyword yang dikirimkan Bird di kemudian hari langsung cocok tanpa perubahan dari Anda.

Untuk tidak mengirim apa pun sambil tetap mencatat opt-out, hilangkan `reply` saat Anda membuat aturan. Untuk membisukan aturan yang sudah ada, atur `reply` ke `null` dalam body JSON pada update di bawah; flag CLI tidak bisa membawa `null`.

![Dialog untuk menambahkan aturan kata kunci, dengan kolom untuk kata kunci tambahan dan balasan](/images/docs/dashboard-whatsapp-keyword-rule-dialog.png)

## Menambahkan keyword Anda sendiri

**TypeScript**

```typescript
// Omitting keywords leaves the set alone; an empty array clears your additions
// back to Bird's. reply: null switches the auto-reply off and still records
// the opt-out.
const rule = await bird.whatsapp.keywordRules.update("wkr_01m2kj8x4te9p0rr7e5w2n1abc", {
  keywords: ["no more texts", "remove me"],
});
console.log(rule.effective_keywords);
```

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

Menghilangkan `keywords` membiarkan tambahan Anda tetap ada. Mengirim array kosong mengembalikannya ke kumpulan Bird.

## Cakupan aturan dan duplikat

Sebuah aturan bisa dipersempit ke satu WhatsApp Business Account dengan `waba`, ke satu negara pengirim dengan `country`, ke keduanya, atau tidak keduanya. Anda hanya memiliki satu aturan per kombinasi operasi, negara, dan akun. Penulisan kedua untuk kombinasi yang sama mengembalikan error duplikat.

Bird menolak aturan yang mengikat `stop` ke `opt_in`, baik kata tersebut berasal dari katalog Bird maupun dari aturan Anda yang lain, sehingga kata opt-out tidak bisa dijadikan pemberi persetujuan.

## Menghapus aturan

Menghapus aturan Anda menyerahkan cakupan tersebut ke aturan berikutnya dalam urutan pencocokan, yang tidak selalu milik Anda. Urutannya adalah:

1. Aturan Anda untuk akun dan negara.
2. Aturan Anda untuk akun.
3. Aturan Anda untuk negara.
4. Aturan Bird untuk negara pengirim.
5. Aturan seluruh dunia Anda.
6. Aturan seluruh dunia Bird.

Menghapus aturan Anda untuk suatu negara menyerahkan cakupan ke aturan Bird untuk negara tersebut sebelum aturan seluruh dunia Anda:

**TypeScript**

```typescript
// The next rule in the ladder answers the scope, which is another rule of yours if you hold a less specific one; STOP never stops working.
await bird.whatsapp.keywordRules.delete("wkr_01m2kj8x4te9p0rr7e5w2n1abc");
```

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

Menghapus aturan tidak menghentikan `STOP`. Kata balasan dan kumpulan keyword dikembalikan ke aturan mana pun yang berikutnya dalam urutan tersebut.

## Langkah selanjutnya

- [Preferensi](/docs/guides/whatsapp/opt-outs/preferences): catatan yang dibuat keyword, dan mana yang bisa Anda batalkan.
- [Supresi](/docs/guides/whatsapp/opt-outs/suppressions): alamat yang diblokir langsung oleh workspace Anda.
- [Opt-out dan keyword untuk SMS](/docs/guides/sms/opt-outs-and-keywords): mekanisme yang sama pada channel lain, yang juga membawa keyword help dan campaign.

## 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](/whatsapp-api) (product)

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