# Manual Login: siapkan di Meta

Halaman ini untuk Anda yang memilih jalur **Manual Login**: bisnis Anda memiliki Meta app sendiri. Kerjakan semuanya di sisi Meta lebih dulu, baru lanjut ke [WhatsApp: Manual Login](/hubungkan-channel/whatsapp-manual) untuk menyambungkan ke tumbuh.ai.

Bila Anda tidak butuh kendali penuh atas Meta app, pakai [Embedded Signup](/hubungkan-channel/whatsapp). Jalur itu tidak membutuhkan halaman ini.

> Nama menu Meta sering berubah. Contoh perintah di bawah memakai Graph API `v23.0`. Pakai versi terbaru yang tertulis di dokumentasi Meta bila berbeda.

## Urutan kerja

1. Selesaikan [Persiapan Meta Business](/hubungkan-channel/persiapan-meta) (portfolio, pembayaran, nomor, kebijakan).
2. Buat Meta app dan tambahkan produk WhatsApp.
3. Daftarkan nomor di Cloud API.
4. Buat System User dan token yang tidak kedaluwarsa.
5. Uji token dengan dua perintah sederhana.
6. Sambungkan ke tumbuh.ai ([panduan](/hubungkan-channel/whatsapp-manual)).
7. Atur webhook di Meta dan berlangganan WABA ke app Anda.
8. Uji dari ujung ke ujung.

## 1. Buat Meta app

1. Buka Meta for Developers, lalu **My Apps** > **Create App**.
2. Pilih use case **Connect with customers through WhatsApp**.
3. Saat diminta, pilih **Business Portfolio** yang sama dengan portfolio bisnis Anda.
4. Setelah app jadi, buka **App settings > Basic**. Catat **App ID**. **App Secret** bersifat rahasia dan **tidak perlu diberikan ke tumbuh.ai**.
5. Pastikan app terhubung ke Business Portfolio Anda. Hubungan ini juga yang dipakai saat Business Verification.

**Apakah perlu App Review?** Menurut dokumentasi Meta, app yang hanya melayani bisnis Anda sendiri umumnya tidak membutuhkan App Review atau Advanced Access. Bila app Anda juga melayani bisnis lain, Advanced Access dan Business Verification menjadi wajib.

**Mode app.** Selama app berstatus **Development**, sebagian webhook tidak dikirim oleh Meta. Ubah app ke **Live** setelah webhook Anda terverifikasi (langkah 7). Meta dapat meminta data dasar app saat beralih ke Live, misalnya URL kebijakan privasi, ikon, dan kategori. Isi sesuai formulir Meta.

## 2. Daftarkan nomor di Cloud API

tumbuh.ai **tidak mendaftarkan nomor dan tidak mengatur PIN** untuk jalur Manual Login. Nomor harus sudah aktif di Cloud API sebelum Anda menyambungkannya.

1. Di App Dashboard, buka **WhatsApp > API Setup**, lalu tambahkan nomor telepon Anda.
2. Verifikasi nomor dengan kode yang dikirim lewat SMS atau panggilan telepon.
3. Isi **display name** sesuai pedoman Meta dan tunggu persetujuannya.
4. Daftarkan nomor ke Cloud API dengan PIN verifikasi dua langkah 6 digit:

```bash
curl -X POST "https://graph.facebook.com/v23.0/<PHONE_NUMBER_ID>/register" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"messaging_product":"whatsapp","pin":"<PIN_6_DIGIT>"}'
```

Catatan:

- Bila verifikasi dua langkah sudah aktif di nomor itu, pakai PIN yang sudah ada. Bila belum, PIN yang Anda kirim menjadi PIN verifikasi dua langkah. **Simpan PIN ini** di tempat aman.
- Meta membatasi permintaan register: 10 kali per nomor dalam 72 jam. Bila terlampaui, Meta menjawab error `133016`.
- Menambahkan nomor ke WABA saja belum menyelesaikan pendaftaran ke Cloud API. Langkah register tetap perlu.

Periksa hasilnya:

```bash
curl -G "https://graph.facebook.com/v23.0/<PHONE_NUMBER_ID>" \
  -d "fields=display_phone_number,status,name_status,quality_rating" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
```

Yang Anda inginkan: `status` bernilai `CONNECTED` dan `name_status` bernilai `APPROVED` (atau `AVAILABLE_WITHOUT_REVIEW`). Bila `name_status` masih menunggu review, atau nomornya ditolak atau kedaluwarsa, selesaikan dulu di WhatsApp Manager.

## 3. Buat System User dan token

Gunakan **System User**, bukan token pribadi Anda. Token pribadi Meta kedaluwarsa dalam hitungan jam, dan tumbuh.ai **tidak memperbarui token Manual Login secara otomatis**. Token yang kedaluwarsa memutus koneksi.

1. Buka **Business Settings > Users > System Users** lalu **Add**.
2. Beri nama (misalnya `tumbuh-ai`) dan pilih peran **Admin**. Admin otomatis mengakses semua WABA di portfolio. Peran Employee juga bisa, tetapi akses ke WABA harus diberikan satu per satu.
3. Pilih System User itu, klik **Add Assets**, lalu berikan akses **Full control** ke dua aset:
   - **Apps**: Meta app yang Anda buat.
   - **WhatsApp accounts**: WABA yang akan dihubungkan.
4. Klik **Generate token**, lalu:
   - Pilih Meta app Anda.
   - Pilih masa berlaku yang **tidak kedaluwarsa** bila Meta menyediakannya. Bila hanya ada opsi dengan masa berlaku, catat tanggalnya dan jadwalkan penggantian sebelum itu.
   - Centang izin `whatsapp_business_management`, `whatsapp_business_messaging`, dan `business_management`.
5. Salin token segera dan simpan di pengelola rahasia perusahaan Anda. Perlakukan seperti kata sandi.

### Periksa token

Buka Access Token Debugger milik Meta dan tempel token Anda. Pastikan:

- **App** adalah Meta app Anda.
- **Type** adalah System User.
- **Expires** adalah Never (atau tanggal yang Anda catat tadi).
- **Scopes** memuat `whatsapp_business_management` dan `whatsapp_business_messaging`.

## 4. Uji dengan dua perintah

Saat Anda menyambungkan di tumbuh.ai, sistem memeriksa dua hal ini ke Meta: apakah WABA bisa dibaca, dan apakah daftar nomornya bisa dibaca. Jalankan keduanya sendiri lebih dulu. Bila keduanya berhasil, koneksi di tumbuh.ai lolos validasi.

```bash
curl -G "https://graph.facebook.com/v23.0/<WABA_ID>" \
  -d "fields=id,name" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

curl -G "https://graph.facebook.com/v23.0/<WABA_ID>/phone_numbers" \
  -d "fields=id,display_phone_number,status" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
```

Hasil dan artinya:

| Hasil | Arti | Perbaikan |
| --- | --- | --- |
| Data WABA dan daftar nomor muncul | Siap disambungkan | Lanjut ke langkah 5 |
| Error `190` | Token tidak valid atau kedaluwarsa | Buat token baru (langkah 3) |
| Error `200` atau `10` | System User belum diberi akses ke WABA, atau izin kurang | Ulangi **Add Assets** dan periksa izin token |
| Daftar nomor kosong | WABA valid tetapi belum ada nomor | Selesaikan langkah 2 |

## 5. Sambungkan ke tumbuh.ai

Lanjut ke [WhatsApp: Manual Login](/hubungkan-channel/whatsapp-manual). Anda memasukkan **WABA ID** dan **Access Token** langsung di dashboard tumbuh.ai, lalu mendapat **Webhook URL** dan **Verify Token**.

Satu WABA hanya bisa terhubung ke satu bisnis di tumbuh.ai. Bila WABA itu sudah dipakai akun lain, koneksi ditolak dengan `WABA_ALREADY_CONNECTED`.

## 6. Atur webhook di Meta

Setelah tumbuh.ai memberi Webhook URL dan Verify Token:

1. Di App Dashboard buka **WhatsApp > Configuration**.
2. Pada bagian **Webhook**, klik **Edit**.
3. Tempel **Callback URL** (Webhook URL dari tumbuh.ai) dan **Verify Token**, lalu klik **Verify and Save**.
4. Pada **Webhook fields**, berlangganan field **`messages`**.

Beberapa hal yang perlu Anda tahu:

- **Callback URL sama untuk semua pelanggan** tumbuh.ai. Yang membedakan akun Anda adalah Verify Token, yang unik per akun. Salin keduanya dari dashboard, jangan menebak URL.
- Field **`messages`** cukup untuk pesan masuk dan status pengiriman. Perubahan status template diperbarui lewat tombol **Sync from Meta** di halaman [Template](/fitur-utama/template).
- Meta memanggil URL Anda dengan permintaan GET berisi `hub.mode`, `hub.challenge`, dan `hub.verify_token`. tumbuh.ai menjawabnya otomatis. Bila **Verify and Save** gagal, lihat [Masalah Setup Meta](/troubleshooting/setup-meta).

## 7. Berlangganan WABA ke app Anda

Selain field webhook di App Dashboard, WABA harus berlangganan ke Meta app Anda. tumbuh.ai memeriksa dan mendaftarkannya otomatis sekitar satu jam setelah koneksi. Untuk langsung aktif, lakukan sendiri:

```bash
curl -X POST "https://graph.facebook.com/v23.0/<WABA_ID>/subscribed_apps" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
```

Periksa bahwa app Anda terdaftar:

```bash
curl "https://graph.facebook.com/v23.0/<WABA_ID>/subscribed_apps" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
```

Setelah itu, bila app Anda masih berstatus Development, ubah ke **Live** (lihat langkah 1).

## 8. Uji dari ujung ke ujung

Lakukan pengujian di [WhatsApp: Manual Login](/hubungkan-channel/whatsapp-manual#uji-dari-ujung-ke-ujung).

## Checklist siap produksi (sisi Meta)

- [ ] Business Portfolio Anda admin, dan Business Verification sudah diajukan.
- [ ] Metode pembayaran WhatsApp Business Platform aktif.
- [ ] Meta app terhubung ke Business Portfolio dan berstatus **Live**.
- [ ] Nomor berstatus `CONNECTED`, display name disetujui, dan PIN verifikasi dua langkah tersimpan.
- [ ] System User punya **Full control** atas app dan WABA.
- [ ] Token tidak kedaluwarsa (atau tanggal penggantian sudah dijadwalkan), dan lolos Access Token Debugger.
- [ ] Callback URL tervalidasi (**Verify and Save** berhasil) dan field `messages` berlangganan.
- [ ] WABA berlangganan ke app Anda (`subscribed_apps`).
- [ ] App Secret dan token tersimpan di pengelola rahasia, tidak dibagikan lewat chat atau email.

## Sumber resmi Meta

- [Access token System User](https://developers.facebook.com/documentation/business-messaging/whatsapp/access-tokens)
- [Webhook WhatsApp](https://developers.facebook.com/docs/whatsapp/cloud-api/guides/set-up-webhooks)
- [Registrasi nomor](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/registration)
- [Nomor telepon](https://developers.facebook.com/docs/whatsapp/cloud-api/phone-numbers)
- [Kode error](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes)
