Langsung ke isigocap

Dokumentasi API

Kirim pesan pertama lewat API

Di halaman ini Anda mengirim satu pesan WhatsApp dari terminal dan melihatnya tiba di ponsel Anda.

Sebelum mulai

Alamat dasar: https://api.gocap.id. Semua endpoint memakai metode POST di alamat ini, tanpa awalan versi.

Autentikasi: header Authorization berisi token device; bentuk Bearer TOKEN_DEVICE juga diterima. Token hanya dibaca dari header Authorization; parameter dikirim di badan permintaan, bukan di query string.

Yang Anda perlukan:

  • Device berstatus terhubung di daftar device. Belum punya device? Mulai dari wizard Mulai.
  • Token device: token yang tampil sekali saat device dibuat. Bila hilang, buat token baru di pengaturan device; token lama berhenti berlaku.
  • Nomor WhatsApp Anda sendiri sebagai target pesan uji.
  • Terminal dengan curl. Di Windows PowerShell 5.1 ketik curl.exe, bukan curl: di sana curl adalah alias perintah lain.

Kirim pesan pertama

  1. Siapkan token device Anda

    Pakai token yang tampil sekali saat device dibuat. Bila hilang, buat token baru di pengaturan device; token lama berhenti berlaku. Token akun, yang berawalan gc_ (atau wv_ untuk token akun lama), tidak diterima endpoint API.

  2. Kirim pesan ke nomor WhatsApp Anda sendiri

    Kirim ke nomor yang sudah pernah berbalas pesan dengan device ini: dari WhatsApp di ponsel Anda, kirim "Halo" ke nomor device lebih dulu, lalu jalankan perintah di bawah ke nomor Anda sendiri. Pesan ke kontak yang belum pernah berbalas pesan dengan device tidak dijamin sampai (lihat OTP dan kontak pertama).

    curl
    curl -X POST https://api.gocap.id/send \
      -H 'Authorization: TOKEN_DEVICE' \
      --data-urlencode 'target=NOMOR_TUJUAN' \
      --data-urlencode 'message=Halo dari gocap.
    Simbol % + & tetap utuh.'

    Contoh ini memakai --data-urlencode agar %, +, &, dan baris baru di pesan tiba utuh; -d meneruskan data apa adanya sehingga pesan ber-% dijawab input invalid. Di Windows PowerShell 5.1 ketik curl.exe dan ganti \ di akhir baris dengan backtick (`). Command Prompt (cmd.exe) tidak mengenal kutip tunggal, jadi perintah ini tidak berjalan di sana; pakai PowerShell atau contoh bahasa lain.

    PHP
    <?php
    $pesan = "Halo dari gocap.\nSimbol % + & tetap utuh.";
    $ch = curl_init('https://api.gocap.id/send');
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => ['Authorization: TOKEN_DEVICE'],
        CURLOPT_POSTFIELDS => [
            'target' => 'NOMOR_TUJUAN',
            'message' => $pesan,
        ],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $raw = curl_exec($ch);
    if ($raw === false) {
        echo 'Koneksi gagal: ', curl_error($ch), PHP_EOL;
        exit(1);
    }
    $data = json_decode($raw, true);
    // Penolakan tetap HTTP 200: periksa status.
    if (empty($data['status'])) {
        $alasan = $data['reason'] ?? $raw;
        echo 'gocap menolak: ', $alasan, PHP_EOL;
        exit(1);
    }
    echo 'requestid ', $data['requestid'], PHP_EOL;

    Butuh ekstensi curl PHP. Array di CURLOPT_POSTFIELDS dikirim sebagai multipart/form-data, bentuk yang sama dengan contoh Fonnte.

    Node.js
    const PESAN = "Halo dari gocap.\nSimbol % + & tetap utuh.";
    
    async function main() {
      const res = await fetch("https://api.gocap.id/send", {
        method: "POST",
        headers: { Authorization: "TOKEN_DEVICE" },
        body: new URLSearchParams({
          target: "NOMOR_TUJUAN",
          message: PESAN,
        }),
        signal: AbortSignal.timeout(30000),
      });
      const data = await res.json();
      // Penolakan tetap HTTP 200: periksa status.
      if (!data.status) {
        throw new Error(`gocap menolak: ${data.reason}`);
      }
      console.log("requestid", data.requestid);
    }
    
    main().catch((err) => {
      console.error(err.message);
      process.exitCode = 1;
    });

    Node.js 18 atau lebih baru (fetch bawaan). Simpan sebagai kirim.js, lalu jalankan node kirim.js.

    Python
    import requests
    
    PESAN = "Halo dari gocap.\nSimbol % + & tetap utuh."
    
    res = requests.post(
        "https://api.gocap.id/send",
        headers={"Authorization": "TOKEN_DEVICE"},
        data={"target": "NOMOR_TUJUAN", "message": PESAN},
        timeout=30,
    )
    data = res.json()
    # Penolakan tetap HTTP 200: periksa status.
    if not data["status"]:
        raise SystemExit(f"gocap menolak: {data['reason']}")
    print("requestid", data["requestid"])

    Butuh pustaka requests (pip install requests).

    Google Apps Script
    // Token device dibaca dari Script Property
    // GOCAP_TOKEN (Project Settings > Script Properties).
    const PESAN = "Halo dari gocap.\nSimbol % + & tetap utuh.";
    
    function kirimGocap() {
      const token = PropertiesService.getScriptProperties()
        .getProperty("GOCAP_TOKEN");
      const url = "https://api.gocap.id/send";
      const res = UrlFetchApp.fetch(url, {
        method: "post",
        headers: { Authorization: token },
        payload: { target: "NOMOR_TUJUAN", message: PESAN },
        muteHttpExceptions: true,
      });
      const data = JSON.parse(res.getContentText());
      // Penolakan tetap HTTP 200: periksa status.
      if (!data.status) {
        throw new Error("gocap menolak: " + data.reason);
      }
      Logger.log("requestid %s", data.requestid);
    }

    Di editor Apps Script, buka Project Settings > Script Properties, lalu tambah properti bernama GOCAP_TOKEN berisi token device; kode membacanya dari sana, jadi token tidak tertulis di kode. Apps Script hanya dapat mengirim (mengapa Apps Script tidak bisa menerima webhook).

    Ganti TOKEN_DEVICE dengan token device Anda dan NOMOR_TUJUAN dengan nomor WhatsApp Anda sendiri, mis. 08… atau 628…; angka 0 di depan otomatis diganti 62.

    Keluaran mirip berikut:
    {
      "status": true,
      "detail": "success! message in queue",
      "id": [
        "407"
      ],
      "process": "pending",
      "requestid": 101,
      "target": [
        "628xxxxxxxxx"
      ],
      "quota": 299
    }

    "status": true berarti permintaan diterima. "process": "pending" berarti pesan sudah masuk antrian kirim dan dikirim sesudah gocap membalas. requestid adalah nomor permintaan kirim ini.

  3. Lihat pesan tiba di WhatsApp

    Buka WhatsApp di ponsel target. Bila pesan tidak muncul, lihat Kalau gagal.

  4. Opsional: periksa status koneksi device

    Lihat Cek device untuk arti device_status dan health.

Baca respons

Galat tetap dikembalikan dengan HTTP 200; periksa status dan reason, bukan kode HTTP.

  • status: true bila diterima, false bila ditolak.
  • reason: alasan penolakan, hanya bila status bernilai false. Cocokkan string-nya persis.
  • detail: ringkasan hasil.
  • id: id pesan, satu per target, berurutan sama dengan target.
  • process: selalu pending; pesan dikirim dari antrian kirim.
  • requestid: nomor permintaan kirim; sebutkan saat menghubungi gocap.
  • target: target setelah dinormalisasi, berurutan sama dengan permintaan.
  • quota: sisa kuota device; null untuk paket Pro.
Contoh penolakan, tetap dengan HTTP 200:
{
  "status": false,
  "reason": "target invalid"
}

Beberapa keadaan memakai kode lain dengan amplop yang sama: path yang tidak ada dijawab HTTP 404 dengan endpoint not available, kegagalan internal dijawab HTTP 500 dengan reason bebas yang tidak boleh dicocokkan, dan gerbang di depan API dapat menjawab:

  • HTTP 503 service unavailable: Gerbang di depan API tidak mendapat jawaban dari layanan gocap: layanan sedang dimulai ulang, terganggu, atau melewati batas waktu.
  • HTTP 400 input invalid: Gerbang menolak permintaan yang rusak sebelum sampai ke API, misalnya HTTP polos ke port HTTPS atau header terlalu besar (HTTP/1.1).
  • HTTP 413 file size must under 25MB: Badan permintaan melebihi batas ukuran gerbang.

Kalau gagal

Tabel ini memuat reason yang dapat muncul saat memanggil POST /send hari ini, termasuk jawaban gerbang di depan API dan jawaban untuk path yang salah ketik, ditambah kesalahan yang terjadi sebelum permintaan sampai ke gocap.

Galat POST /send dan kesalahan sebelum permintaan sampai ke gocap
Yang tampilHTTPArtiYang dilakukan
token invalid200Token device tidak dikenal: salah salin, sudah dibuat ulang, milik device yang sudah dihapus, atau header Authorization kosong atau berisi koma.Kirim token device di header Authorization, apa adanya atau dengan awalan Bearer. Token hanya tampil sekali; bila hilang, buat ulang di halaman device dashboard (token lama langsung tidak berlaku). Token berawalan gc_ (atau wv_ untuk token lama) adalah token akun dan tidak diterima endpoint ini.
input invalid200Parameter wajib tidak ada atau kosong, bentuk nilai salah (misalnya countryCode, delay, typing, atau schedule), message lebih dari 60.000 karakter, url dan file diisi bersamaan, parameter yang belum didukung dikirim (misalnya location), atau parameter ditaruh di query string, bukan di badan. Di /qr: type selain qr dan code, atau type=code tanpa nomor whatsapp yang sah.Kirim parameter di badan permintaan (form, multipart, atau JSON) dengan nama dan bentuk yang benar. Untuk pesan teks, target dan message wajib diisi.
JSON format invalid200Badan dengan Content-Type application/json tidak dapat diurai atau bukan objek JSON.Kirim satu objek JSON yang sah, dengan target ditulis sebagai string.
buttons and lists not supported200Parameter tombol atau daftar (buttonJSON, listJSON, templateJSON) dikirim; gocap tidak mendukungnya.Hapus parameter itu dan kirim pesan teks atau media.
file format not supported200Ekstensi atau tipe konten berkas, termasuk ekstensi pada filename, tidak termasuk format yang didukung.Kirim berkas dengan format yang didukung, atau perbaiki ekstensi pada filename.
file size must under 25MB200Berkas pada file atau url lebih besar dari 25 MB (26.214.400 byte).Perkecil berkas, atau kirim tautan ke berkas yang lebih kecil.
id group invalid200Target berakhiran @g.us bukan grup yang diikuti device ini.Pastikan nomor device sudah menjadi anggota grup itu dan ID grup disalin lengkap.
insufficient quota200Sisa kuota periode berjalan lebih kecil dari jumlah target; seluruh permintaan ditolak tanpa ada pesan yang dibuat.Periksa sisa kuota lewat POST /device, lalu kurangi jumlah target.
target invalid200Satu atau lebih target gagal dinormalisasi: mengandung huruf (termasuk NOMOR_TUJUAN yang belum diganti), panjangnya di luar 8 sampai 15 digit, ada entri kosong di antara koma, atau alamat ber-@ selain grup (@g.us) dan LID (@lid).Tulis nomor dengan kode negara atau berawalan 0, tanpa huruf, dan pisahkan beberapa target dengan koma.
url invalid200Nilai url bukan URL http atau https yang lengkap, atau memuat nama pengguna atau sandi.Kirim URL lengkap yang diawali http:// atau https://, tanpa kredensial di dalamnya.
url unreachable200Berkas di url tidak dapat diambil: gagal DNS atau koneksi, melewati batas waktu, mengarah ke alamat jaringan privat, atau dijawab selain 2xx.Pastikan URL dapat diunduh publik tanpa login, atau kirim berkasnya langsung lewat field file.
endpoint not available404Path atau metode tidak dilayani: path salah ketik, garis miring di akhir path, metode selain POST (termasuk GET /send), atau endpoint Fonnte yang belum ada di gocap.Kirim POST ke alamat dasar ditambah /send, /device, /qr, atau /disconnect, tanpa garis miring di akhir.
internal errorreason bebas: jangan dicocokkan500Kegagalan internal di sisi gocap, misalnya database tidak tersedia. Teks reason ini bebas dan dapat berubah.Jangan mencocokkan teks ini; ulangi permintaan beberapa saat kemudian.
service unavailable503Gerbang di depan API tidak mendapat jawaban dari layanan gocap: layanan sedang dimulai ulang, terganggu, atau melewati batas waktu.Ulangi beberapa saat kemudian. Bila jawaban ini datang setelah permintaan lama menunggu, permintaan mungkin sudah diterima; mengulang POST /send dapat mengirim pesan dua kali.
curl: (6) Could not resolve host—Alamat salah ketik atau tidak ada koneksi internet.Salin alamat dasar dari Sebelum mulai dan periksa koneksi.
Galat Invoke-WebRequest—Di Windows PowerShell, curl adalah alias perintah lain.Ketik curl.exe.
Keluaran HTML, keluaran kosong, atau terminal menunggu masukan—Perintah terpotong saat ditempel.Tempel ulang seluruh blok perintah; baris yang diakhiri \ bersambung ke baris berikutnya.
Token yang dipakai berawalan gc_ atau wv_—Mungkin token akun: token akun berawalan gc_ (token akun lama wv_) dan tidak diterima endpoint API (jawabannya token invalid).Pakai token device: yang tampil sekali saat device dibuat, atau token baru dari pengaturan device.
"status": true tetapi pesan tidak muncul—Pesan sudah diantrekan. Selama device tidak terhubung, pesan menunggu sampai tersambung lagi; pesan yang menunggu lebih dari 24 jam kedaluwarsa. Selama health bernilai restricted, gocap menahan pesan device itu sampai Anda memilih "Lanjutkan pengiriman" di dashboard. Pesan ke kontak baru juga tidak dijamin sampai.Periksa status koneksi device beserta health, dan pastikan target benar.

Masalah berlanjut? Kirim email ke hi@gocap.id dan sertakan requestid dari respons.

Cek device

POST /device mengembalikan keadaan device pemilik token; tidak ada parameter.

Contoh curl
curl -X POST https://api.gocap.id/device \
  -H 'Authorization: TOKEN_DEVICE'
Keluaran mirip berikut:
{
  "status": true,
  "device": "628xxxxxxxxx",
  "device_status": "connect",
  "expired": "2026-10-23T10:00:00+07:00",
  "messages": 1,
  "name": "Toko Contoh",
  "package": "Free",
  "quota": 299,
  "health": "ok",
  "restricted": false,
  "restricted_until": null
}

device_status menyatakan status koneksi ke WhatsApp:

Nilai device_status
NilaiLabelArtiYang bisa Anda lakukan
connectterhubungDevice tersambung ke WhatsApp.Tidak ada; periksa juga health.
disconnectbelum dihubungkan, sedang menghubungkan, terputus, keluar dari WhatsApp, atau menunggu pembaruanDevice tidak tersambung ke WhatsApp. Pesan baru tetap diterima dan menunggu di antrian kirim sampai device tersambung lagi (bila health bernilai restricted karena sebab selain kunci kiriman dingin, juga sampai Anda memilih "Lanjutkan pengiriman"); pesan yang menunggu lebih dari 24 jam selama device tidak tersambung kedaluwarsa.Lihat reason untuk penyebabnya. Field device kosong berarti device belum pernah dihubungkan: hubungkan dari dashboard.

health menyatakan apakah device sedang dibatasi:

Nilai health
NilaiLabelArtiYang bisa Anda lakukan
okokDevice tidak sedang dibatasi. Sesudah device tersambung atau pembatasan dilepas, kiriman dingin dapat tertunda sesaat sampai gocap memeriksa status kunci di WhatsApp.Tidak ada.
restricteddibatasiDevice sedang dibatasi: pembatasan sementara dari WhatsApp, sesi yang ditolak WhatsApp, atau jeda yang Anda pasang di dashboard. Selama itu gocap menahan semua pesan device ini: POST /send tetap diterima dan pesannya menunggu, lalu dilepas setelah Anda memilih "Lanjutkan pengiriman" di dashboard. Pesan yang sedang dikirim saat jeda dipasang tetap terkirim. Untuk ketiga sebab itu, pesan yang tertahan selama device tersambung tidak kedaluwarsa. Bila reason bernilai timelock, sebabnya kunci kiriman dingin dari WhatsApp: gocap menahan kiriman dingin, yaitu pesan perorangan ke nomor yang menurut sesi WhatsApp di device belum punya percakapan aktif, termasuk pesan yang belum sempat diperiksa. Pesan grup tetap dikirim, begitu juga pesan ke nomor yang sudah membalas: gocap memeriksanya di sesi WhatsApp device lalu mengirimnya, biasanya dalam satu menit (lebih lama bila banyak pesan tertahan). Bila WhatsApp kembali menolak pesan ke nomor yang sudah membalas sebanyak 2 kali selama kunci yang sama, semua pesan perorangan ikut ditahan sampai kunci lepas; pesan grup tetap dikirim. Kunci lepas sendiri saat WhatsApp membukanya. Kiriman dingin yang tetap dingin menurut pemeriksaan di sesi WhatsApp dan sudah tertahan lebih dari 72 jam, dihitung sejak kunci terpasang atau sejak pesan masuk antrean (mana yang lebih akhir), kedaluwarsa selama device tersambung. Kunci yang sama masih berlaku bila device tidak tersambung dengan reason logged_out dan restricted_until terisi (rantai 463 lalu 401): "Lanjutkan pengiriman" tidak melepasnya, dan sesudah device tersambung lagi kiriman dingin tetap ditahan sampai kunci lepas. restricted bernilai true; restricted_until berisi batas waktunya bila WhatsApp memberikannya; reason dan restriction_type menyebut sebabnya bila ada.Periksa health sebelum mengirim pesan yang cepat basi, misalnya OTP: pesan yang tertahan baru terkirim setelah Anda memilih "Lanjutkan pengiriman", atau, bila sebabnya kunci kiriman dingin (reason bernilai timelock, atau logged_out dengan restricted_until terisi), setelah WhatsApp membuka kunci dan device tersambung. Keterangan dan langkah pemulihannya tampil di halaman device di dashboard.

Pesan ditahan selama device dibatasi

Selama health bernilai restricted karena pembatasan sementara dari WhatsApp, sesi yang ditolak WhatsApp, atau jeda yang Anda pasang di dashboard, gocap menahan semua pesan device itu: POST /send tetap diterima dan pesannya menunggu, lalu dilepas setelah Anda memilih "Lanjutkan pengiriman" di dashboard. Pesan yang sedang dikirim saat jeda dipasang tetap terkirim. Bila reason bernilai timelock, WhatsApp mengunci kiriman dingin: gocap menahan kiriman dingin, yaitu pesan perorangan ke nomor yang menurut sesi WhatsApp di device belum punya percakapan aktif, termasuk pesan yang belum sempat diperiksa. Pesan grup tetap dikirim, begitu juga pesan ke nomor yang sudah membalas: gocap memeriksanya di sesi WhatsApp device lalu mengirimnya, biasanya dalam satu menit (lebih lama bila banyak pesan tertahan). Bila WhatsApp kembali menolak pesan ke nomor yang sudah membalas sebanyak 2 kali selama kunci yang sama, semua pesan perorangan ikut ditahan sampai kunci lepas; pesan grup tetap dikirim. Kunci lepas sendiri saat WhatsApp membukanya. Kiriman dingin yang tetap dingin menurut pemeriksaan di sesi WhatsApp dan sudah tertahan lebih dari 72 jam, dihitung sejak kunci terpasang atau sejak pesan masuk antrean (mana yang lebih akhir), kedaluwarsa selama device tersambung. Periksa health sebelum mengirim pesan yang cepat basi, misalnya OTP.

Pernyataan yang Anda setujui saat menghubungkan device:

Risiko pemblokiran (ban) oleh WhatsApp ditanggung pemilik nomor.

Arti reason dan restriction_type

reason hanya ada bila keadaan device saat ini punya penyebab.

Nilai reason di POST /device
NilaiLabelArtiYang bisa Anda lakukan
networkjaringan terputusKoneksi ke WhatsApp terputus karena jaringan.Tidak ada: gocap menyambung ulang otomatis.
engine_restartlayanan penghubung WhatsApp dimulai ulangLayanan penghubung WhatsApp dimulai ulang, misalnya saat pembaruan.Tidak ada: device tersambung lagi otomatis.
manualtindakan manual dari dashboard atau APIKeadaan device berasal dari tindakan manual: device di-logout lewat POST /disconnect atau dari dashboard (sesi WhatsApp-nya dihapus), atau device sedang disambung ulang setelah Anda memilih "Sambung ulang" di dashboard.Bila Anda baru memilih "Sambung ulang", tunggu sebentar lalu periksa lagi. Bila device di-logout, hubungkan ulang dengan QR atau pairing code dari dashboard.
logged_outsesi WhatsApp berakhirSesi WhatsApp device berakhir dan dihapus; gocap tidak menyambung ulang sendiri.Hubungkan ulang dengan QR atau pairing code dari dashboard. Bila health bernilai restricted karena sesi ditolak WhatsApp, hubungkan ulang lebih dulu, lalu pilih "Lanjutkan pengiriman"; sampai saat itu gocap menahan pesan device ini. Bila pembatasannya kunci kiriman dingin (health bernilai restricted dengan restricted_until terisi; rantai 463 lalu 401; restriction_type menyebut jenis kuncinya hanya bila WhatsApp memberikannya), Anda dapat menunggu sampai waktu di restricted_until lewat sebelum menghubungkan ulang, tetapi selama device tidak tersambung pesan yang menunggu lebih dari 24 jam kedaluwarsa.
outdatedlayanan penghubung WhatsApp belum diperbaruiLayanan penghubung WhatsApp perlu diperbarui agar diterima WhatsApp; device menunggu pembaruan dari gocap.Tidak ada: device tersambung lagi otomatis setelah pembaruan selesai.
stream_replacedsesi dipakai koneksi lainSesi WhatsApp ini dipakai koneksi lain, jadi gocap terputus dan tidak menyambung ulang sendiri.Pilih "Sambung ulang" di dashboard.
temporary_banpembatasan sementara dari WhatsAppWhatsApp memberi pembatasan sementara pada nomor ini sampai waktu di restricted_until.Tunggu sampai waktu di restricted_until lewat, lalu pilih "Lanjutkan pengiriman" dan "Sambung ulang" di halaman device di dashboard. Sampai Anda memilih "Lanjutkan pengiriman", gocap menahan pesan device ini.
passkey_requiredWhatsApp meminta passkeyWhatsApp meminta passkey saat device dihubungkan; gocap belum dapat menyelesaikan langkah itu, jadi device belum tersambung.Hubungkan lewat pairing code dari dashboard.
restricteddijeda manual karena peringatan di ponselAnda menjeda device ini di dashboard (tombol "Jeda pengiriman"), misalnya karena peringatan "account at risk" di ponsel. Selama jeda, gocap menahan semua pesan device ini: POST /send tetap diterima dan pesannya menunggu, lalu dilepas setelah Anda memilih "Lanjutkan pengiriman" di dashboard. Selama device tersambung, pesan yang tertahan tidak kedaluwarsa. Pesan yang sedang dikirim saat jeda dipasang tetap terkirim.Bila peringatan di ponsel sudah hilang, pilih "Lanjutkan pengiriman" di halaman device di dashboard; pesan yang tertahan lalu dikirim.
timelockTimelock WhatsApp (463)WhatsApp mengunci kiriman dingin nomor ini sampai sekitar waktu di restricted_until; gocap memastikannya lewat pemeriksaan berkala. Selama kunci berlaku, gocap menahan kiriman dingin, yaitu pesan perorangan ke nomor yang menurut sesi WhatsApp di device belum punya percakapan aktif, termasuk pesan yang belum sempat diperiksa. Pesan grup tetap dikirim, begitu juga pesan ke nomor yang sudah membalas: gocap memeriksanya di sesi WhatsApp device lalu mengirimnya, biasanya dalam satu menit (lebih lama bila banyak pesan tertahan). Bila WhatsApp kembali menolak pesan ke nomor yang sudah membalas sebanyak 2 kali selama kunci yang sama, semua pesan perorangan ikut ditahan sampai kunci lepas; pesan grup tetap dikirim. Kunci lepas sendiri saat WhatsApp membukanya. Kiriman dingin yang tetap dingin menurut pemeriksaan di sesi WhatsApp dan sudah tertahan lebih dari 72 jam, dihitung sejak kunci terpasang atau sejak pesan masuk antrean (mana yang lebih akhir), kedaluwarsa selama device tersambung.Tidak ada tombol untuk kunci ini: gocap memeriksa status kunci di WhatsApp secara berkala dan melepas pesan yang tertahan begitu WhatsApp membuka kuncinya. "Lanjutkan pengiriman" tidak melepasnya.

restriction_type hanya ada bila health bernilai restricted dan WhatsApp memberi kode pembatasan. Kode lain berawalan TempBan dapat muncul untuk jenis pembatasan sementara yang baru; artinya sama. Selama reason bernilai timelock, kodenya adalah jenis kunci kiriman dingin dari WhatsApp, dikirim apa adanya.

Nilai restriction_type
NilaiLabelArtiYang bisa Anda lakukan
TempBanSentToTooManyPeoplepembatasan sementara dari WhatsAppKode pembatasan sementara dari WhatsApp untuk nomor ini, dikirim apa adanya.Tunggu sampai waktu di restricted_until lewat, lalu pilih "Lanjutkan pengiriman" dan "Sambung ulang" di halaman device di dashboard. Sampai Anda memilih "Lanjutkan pengiriman", gocap menahan pesan device ini.
TempBanBlockedByUserspembatasan sementara dari WhatsAppKode pembatasan sementara dari WhatsApp untuk nomor ini, dikirim apa adanya.Tunggu sampai waktu di restricted_until lewat, lalu pilih "Lanjutkan pengiriman" dan "Sambung ulang" di halaman device di dashboard. Sampai Anda memilih "Lanjutkan pengiriman", gocap menahan pesan device ini.
TempBanCreatedTooManyGroupspembatasan sementara dari WhatsAppKode pembatasan sementara dari WhatsApp untuk nomor ini, dikirim apa adanya.Tunggu sampai waktu di restricted_until lewat, lalu pilih "Lanjutkan pengiriman" dan "Sambung ulang" di halaman device di dashboard. Sampai Anda memilih "Lanjutkan pengiriman", gocap menahan pesan device ini.
TempBanSentTooManySameMessagepembatasan sementara dari WhatsAppKode pembatasan sementara dari WhatsApp untuk nomor ini, dikirim apa adanya.Tunggu sampai waktu di restricted_until lewat, lalu pilih "Lanjutkan pengiriman" dan "Sambung ulang" di halaman device di dashboard. Sampai Anda memilih "Lanjutkan pengiriman", gocap menahan pesan device ini.
TempBanBroadcastListpembatasan sementara dari WhatsAppKode pembatasan sementara dari WhatsApp untuk nomor ini, dikirim apa adanya.Tunggu sampai waktu di restricted_until lewat, lalu pilih "Lanjutkan pengiriman" dan "Sambung ulang" di halaman device di dashboard. Sampai Anda memilih "Lanjutkan pengiriman", gocap menahan pesan device ini.

OTP dan kontak pertama

OTP dan kontak pertama tidak dijamin

OTP dan notifikasi kontak pertama bukan kasus penggunaan yang dijamin di provider WhatsApp tidak resmi. Pesan ke nomor yang belum pernah berbalas pesan dengan device Anda dapat tidak sampai.

Pola yang dianjurkan:

  • Minta pelanggan mengirim pesan lebih dulu, misalnya lewat tautan https://wa.me/NOMOR_DEVICE?text=Halo berlabel "Mulai chat" di formulir Anda. Ganti NOMOR_DEVICE dengan nomor device (field device di respons POST /device).
  • Tulis pesan yang mengundang balasan, misalnya "Balas OK untuk mengonfirmasi pesanan".
  • Sebelum mengirim OTP, periksa POST /device: device_status, health, dan restricted_until. Selama health bernilai restricted, OTP ikut ditahan sampai Anda memilih "Lanjutkan pengiriman" dan bisa sudah basi saat terkirim; pakai jalur cadangan.
  • Kirim ke kontak baru dalam jumlah kecil dan bertahap.
  • Siapkan jalur cadangan seperti SMS atau email untuk pesan yang wajib sampai.

Akun WhatsApp Business dapat mengalami pembatasan tambahan "new chat message capping" yang tidak dimodelkan gocap.

Terima pesan masuk

Isi URL webhook pesan masuk di pengaturan device (slot webhook). gocap mengirim pesan masuk ke URL itu sebagai POST JSON bertanda tangan: pesan pribadi aktif bawaan, sedangkan pesan grup hanya bila "Kirim pesan grup ke webhook" dinyalakan di pengaturan device.

  • URL wajib https dan dapat dijangkau dari internet; URL http dan alamat jaringan privat ditolak saat disimpan. Untuk pengembangan di komputer sendiri, pakai tunnel HTTPS.
  • Balas dengan kode 2xx tanpa badan dalam 10 detik, lalu proses isinya. Badan JSON berisi message atau url menjadi balasan webhook: gocap mengirimnya sebagai pesan WhatsApp ke pengirim (ke grup bila pesan berasal dari grup) dan memakai kuota.
  • Kode selain 2xx, termasuk pengalihan 3xx, dan batas waktu yang terlewati dihitung gagal. gocap mencoba lagi dengan jeda 1, 5, 15, lalu 40 menit antar-percobaan: total 5 percobaan dalam ±61 menit, lalu berhenti.
  • Pesan yang sama dapat terkirim lebih dari sekali; pakai inboxid untuk membuang duplikat.
  • Tombol "Uji webhook" di pengaturan device mengirim satu payload contoh bertanda tangan ke URL yang tersimpan. Tombol ini mengabaikan badan jawaban penerima, jadi tidak dapat dipakai untuk menguji balasan webhook.

Slot webhook koneksi dan status pesan dapat diisi, tetapi belum mengirim event.

Verifikasi tanda tangan

Setiap pengiriman webhook membawa header X-Gocap-Signature dan X-Gocap-Timestamp. Periksa keduanya sebelum memproses isi.

Verifikasi tanda tangan webhook (bagian 4.6)

Langkah, contoh PHP, Node.js, dan Python, kesalahan umum, dan vektor uji.

Langkah berikutnya