Getting Started

Bermigrasi dari CapMonster Cloud ke CaptchaAI

Migrasi dari CapMonster Cloud ke CaptchaAI biasanya kelar dalam 15–30 menit — format API keduanya mirip, jadi Anda cukup mengganti base URL, parameter kunci, dan cara membaca respons, tanpa menulis ulang logika bisnis. Panduan ini memetakan perbedaannya satu per satu: perubahan endpoint, pemetaan parameter per tipe CAPTCHA, kesalahan yang paling sering muncul saat migrasi, sampai contoh kode Python dan JavaScript yang bisa langsung Anda tempel ke proyek.


Apa Saja yang Berubah Saat Pindah ke CaptchaAI

Kenali enam perbedaan inti berikut — polanya konsisten di semua task type.

Komponen CapMonster Cloud CaptchaAI
Submit URL https://api.capmonster.cloud/createTask https://ocr.captchaai.com/in.php
URL hasil https://api.capmonster.cloud/getTaskResult https://ocr.captchaai.com/res.php
Parameter API key clientKey key
Format API body JSON Form-encoded (atau JSON)
Field task ID taskId request (dalam respons)
Field hasil objek solution request (string token)

Skenario ini umum di tim scraping freelance dan agensi pemantauan harga di Indonesia — API kompatibel berarti ganti penyedia tanpa menulis ulang integration layer. Saat menguji ulang integrasi pasca-migrasi, jalankan dari region yang sama dengan server produksi Anda — AWS ap-southeast-1 (Singapura) atau asia-southeast2 (Jakarta) di GCP — supaya angka latensi yang Anda amati mencerminkan kondisi nyata, bukan noise dari jarak jaringan ke endpoint.


Pemetaan Parameter API per Tipe CAPTCHA

Nama parameter CapMonster Cloud mengikuti pola berorientasi objek (task.type, task.websiteKey) yang dibungkus dalam satu objek task. CaptchaAI memakai parameter datar bergaya form-encoded — tidak ada nesting. Begitu Anda hafal pola konversi ini untuk satu tipe CAPTCHA, tipe lainnya mengikuti pola serupa.

reCAPTCHA v2

CapMonster Cloud CaptchaAI
task.type: "RecaptchaV2TaskProxyless" method: "userrecaptcha"
task.websiteKey googlekey
task.websiteURL pageurl
task.isInvisible: true invisible: "1"

Cloudflare Turnstile

CapMonster Cloud CaptchaAI
task.type: "TurnstileTaskProxyless" method: "turnstile"
task.websiteKey sitekey
task.websiteURL pageurl

CAPTCHA Gambar (Image CAPTCHA)

CapMonster Cloud CaptchaAI
task.type: "ImageToTextTask" method: "base64"
task.body body

Migrasi Kilat: Cukup Ganti Dua Baris

Kalau kode Anda pakai wrapper atau SDK sendiri, cukup ganti base URL dan kunci:

# Before (CapMonster Cloud)
API_URL = "https://api.capmonster.cloud"
CLIENT_KEY = "your_capmonster_key"

# After (CaptchaAI)
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
API_KEY = "your_captchaai_key"

Jalan pintas ini hanya berlaku kalau wrapper Anda sudah menangani parsing respons secara generik. Kalau kode Anda membaca field taskId atau objek solution secara eksplisit di banyak tempat, tetap ikuti contoh migrasi lengkap di bawah supaya tidak ada pemanggilan yang terlewat.


Migrasi Lengkap untuk reCAPTCHA v2

Contoh berikut menunjukkan alur penuh: kirim task, polling hasil, lalu ambil token — lengkap dengan penyesuaian nama field di tiap langkah.

Sebelum: CapMonster Cloud

import requests
import time

resp = requests.post("https://api.capmonster.cloud/createTask", json={
    "clientKey": "CAPMONSTER_KEY",
    "task": {
        "type": "RecaptchaV2TaskProxyless",
        "websiteURL": "https://example.com",
        "websiteKey": "6Le-SITEKEY",
    }
}).json()
task_id = resp["taskId"]

while True:
    time.sleep(5)
    result = requests.post("https://api.capmonster.cloud/getTaskResult", json={
        "clientKey": "CAPMONSTER_KEY",
        "taskId": task_id,
    }).json()
    if result["status"] == "ready":
        token = result["solution"]["gRecaptchaResponse"]
        break

Sesudah: CaptchaAI

import requests
import time

resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6Le-SITEKEY",
    "pageurl": "https://example.com",
    "json": "1",
}).json()
task_id = resp["request"]

while True:
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY",
        "action": "get",
        "id": task_id,
        "json": "1",
    }).json()
    if result["status"] == 1:
        token = result["request"]
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(result["request"])

Logika polling-nya sama persis dengan CapMonster Cloud — jeda 5 detik, cek ulang, ambil token begitu status siap. Yang berubah murni nama field dan cara membaca status.


Migrasi untuk Node.js/JavaScript

Pola konversinya sama seperti Python — yang beda hanya cara mengirim parameter dan membaca respons Axios.

Sebelum: CapMonster Cloud

const axios = require('axios');

const resp = await axios.post('https://api.capmonster.cloud/createTask', {
  clientKey: 'CAPMONSTER_KEY',
  task: {
    type: 'RecaptchaV2TaskProxyless',
    websiteURL: 'https://example.com',
    websiteKey: '6Le-SITEKEY',
  }
});
const taskId = resp.data.taskId;

Sesudah: CaptchaAI

const axios = require('axios');

const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: 'YOUR_API_KEY',
    method: 'userrecaptcha',
    googlekey: '6Le-SITEKEY',
    pageurl: 'https://example.com',
    json: 1,
  }
});
const taskId = resp.data.request;

Menyesuaikan Penanganan Kode Error

Sebagian besar kode error punya padanan langsung.

CapMonster Cloud Setara di CaptchaAI
ERROR_KEY_DOES_NOT_EXIST ERROR_KEY_DOES_NOT_EXIST
ERROR_ZERO_BALANCE ERROR_ZERO_BALANCE
ERROR_RECAPTCHA_TIMEOUT ERROR_CAPTCHA_UNSOLVABLE
ERROR_NO_SLOT_AVAILABLE ERROR_NO_SLOT_AVAILABLE
CAPTCHA_NOT_READY CAPCHA_NOT_READY

Perhatikan ejaan CAPCHA_NOT_READY tanpa huruf T — sering luput kalau pencocokan string Anda eksak, dan lolos begitu saja dari code review karena terlihat seperti typo yang tidak disengaja.


Kesalahan yang Sering Terjadi Saat Migrasi

  • Lupa mengganti format request. CapMonster Cloud menerima JSON body; CaptchaAI menerima form-encoded (atau JSON dengan parameter yang sesuai). Kirim payload lama ke endpoint baru dan Anda akan mendapat error parsing yang membingungkan, bukan pesan yang jelas.
  • Membaca field task ID yang salah. resp["taskId"] di CapMonster Cloud menjadi resp["request"] di CaptchaAI — kalau baris ini tidak diubah, kode langsung crash dengan KeyError di langkah polling.
  • Setengah-setengah mengganti nama parameter API key. clientKey di body JSON menjadi key di parameter form-encoded — pastikan kedua tempat pemanggilan diganti, bukan cuma salah satu.
  • Tidak menguji satu solve dulu. Selalu validasi satu task berhasil sebelum mengalihkan traffic produksi penuh — checklist di bawah membantu memastikan langkah ini tidak terlewat.

Cek Saldo Akun

CapMonster Cloud

resp = requests.post("https://api.capmonster.cloud/getBalance", json={
    "clientKey": "CAPMONSTER_KEY"
}).json()
balance = resp["balance"]

CaptchaAI

resp = requests.get("https://ocr.captchaai.com/res.php", params={
    "key": "YOUR_API_KEY",
    "action": "getbalance",
    "json": "1",
}).json()
balance = float(resp["request"])

Checklist Sebelum Mengalihkan Traffic Produksi

  • [ ] Dapatkan API key CaptchaAI dari captchaai.com
  • [ ] Ganti submit URL: api.capmonster.cloud/createTaskocr.captchaai.com/in.php
  • [ ] Ganti result URL: api.capmonster.cloud/getTaskResultocr.captchaai.com/res.php
  • [ ] Ubah autentikasi: clientKeykey
  • [ ] Ubah format request: JSON → form-encoded
  • [ ] Perbarui parsing respons: taskIdrequest, solution.gRecaptchaResponserequest
  • [ ] Perbarui error handling: CAPTCHA_NOT_READYCAPCHA_NOT_READY
  • [ ] Uji satu solve dulu sebelum mengalihkan traffic produksi

Pertanyaan Umum

Apakah proxy dan integrasi automation saya perlu diubah?

Tidak. Migrasi hanya menyentuh lapisan pemanggilan API. Konfigurasi proxy di Puppeteer atau Selenium tidak tersentuh.

Bisakah CapMonster Cloud dan CaptchaAI dijalankan bersamaan selama transisi?

Bisa. Arahkan sebagian traffic ke CaptchaAI dulu, CapMonster Cloud tetap sebagai cadangan, lalu pindah penuh setelah tervalidasi.

Apakah semua tipe CAPTCHA di CapMonster Cloud juga didukung CaptchaAI?

Untuk reCAPTCHA v2, Turnstile, dan image/OCR — ya, plus GeeTest v3. hCaptcha dan FunCaptcha belum didukung; task tipe itu belum bisa dimigrasikan penuh.

Berapa biaya CaptchaAI dibanding billing per-task?

CaptchaAI pakai model thread-based, bukan per-solve — solve di dalam satu slot tidak dibatasi. BASIC ($15/bulan, 5 thread) cukup untuk tim kecil; volume besar naik ke STANDARD ($30/bulan, 15 thread) atau ADVANCE ($90/bulan, 50 thread).

Apakah logika retry atau exponential backoff saya perlu diubah?

Secara struktural tidak. Pola jeda-lalu-cek-ulang antar percobaan tetap sama seperti di CapMonster Cloud. Yang berubah hanya kondisi pemicu retry: cek result["request"] != "CAPCHA_NOT_READY", bukan status CapMonster Cloud yang lama.


Mulai Migrasi ke CaptchaAI Sekarang

Ambil API key CaptchaAI dan jalankan solve pertama Anda dalam hitungan menit di captchaai.com.


Panduan Terkait

Komentar dinonaktifkan untuk artikel ini.