البدء السريع

الترحيل من CapMonster Cloud إلى CaptchaAI خطوة بخطوة

الانتقال من CapMonster Cloud إلى CaptchaAI لا يفرض إعادة كتابة منطق الأتمتة لديك؛ في معظم المشاريع يكفي تبديل عنوان نقطة النهاية ومفتاح الـ API وتعديل طريقة قراءة الاستجابة. يعتمد CaptchaAI أسلوب طلبات مألوفاً عبر نقطتَي in.php وres.php، لذا ينهي فريق الأتمتة الترحيل عادةً في أقل من نصف ساعة. يبدأ هذا الدليل من دافع التبديل، ثم يمشي بك عبر أمثلة عملية بلغتَي Python وJavaScript، ويختم بجداول مرجعية سريعة وقائمة تحقق نهائية قبل تحويل حركة الإنتاج بالكامل.


لماذا تنتقل إلى CaptchaAI؟

الفرق الجوهري بين الخدمتين ليس في الشيفرة بل في نموذج التكلفة. يعتمد CaptchaAI على الاشتراك حسب عدد الـ Threads المتزامنة، مع حلول غير محدودة لكل Thread طوال الشهر، بدلاً من الدفع مقابل كل عملية حل على حدة. تبدأ الباقات من BASIC بسعر 15 دولاراً شهرياً و5 Threads، ثم STANDARD بسعر 30 دولاراً و15 Thread، وصولاً إلى الباقات المؤسسية الأعلى. لا توجد حدود يومية ولا رسوم لكل CAPTCHA ولا فروق سعرية حسب نوع التحدي داخل الباقة الواحدة.

يجعل هذا النموذج التكلفة الشهرية ثابتة وقابلة للتنبؤ. تخيّل فريقاً في القاهرة يدير أدوات مراقبة أسعار على متاجر إلكترونية ويعالج آلاف طلبات reCAPTCHA v2 يومياً؛ مع التسعير القائم على الـ Threads يظل الرصيد الشهري مستقراً حتى لو تضاعف حجم الحلول في موسم الذروة، لأن ما تدفع مقابله هو عدد الطلبات المتزامنة لا إجماليها. هذا الاستقرار في الميزانية هو الدافع الأكثر شيوعاً للتبديل من النموذج القائم على الرصيد.


الترحيل السريع: تبديل سطرين

إذا كان الكود لديك يعتمد على غلاف أو SDK، فالمسار الأسرع هو استبدال العنوان الأساسي والمفتاح فقط:

# 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"

الترحيل الكامل: reCAPTCHA v2

يوضّح المثالان التاليان الفرق الكامل في دورة الإرسال ثم الاستطلاع الدوري للنتيجة. لاحظ كيف يتحوّل جسم JSON المتداخل في CapMonster إلى معلمات مسطّحة في CaptchaAI.

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

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"])

الفرق العملي أن المعرّف يصل في حقل request عند الإرسال، ثم تُستطلَع النتيجة من res.php حتى يعود status بالقيمة 1، فتقرأ الرمز من الحقل request نفسه.


ترحيل شيفرة JavaScript

المنطق ذاته ينطبق على بيئة Node.js عبر Axios؛ تُمرَّر المعلمات في كائن params بدلاً من جسم JSON، ويُقرأ المعرّف من resp.data.request.

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;

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;

التحقق من الرصيد

استعلام الرصيد يتحول من طلب POST مخصص في CapMonster إلى إجراء getbalance عبر res.php في CaptchaAI:

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"])

مرجع سريع: ما الذي يتغيّر

بعد أن رأيت الأمثلة، يلخّص هذا الجدول نقاط التحويل الأساسية التي ستحتاج إلى ضبطها في الكود:

المكوّن CapMonster Cloud CaptchaAI
عنوان الإرسال https://api.capmonster.cloud/createTask https://ocr.captchaai.com/in.php
عنوان النتيجة https://api.capmonster.cloud/getTaskResult https://ocr.captchaai.com/res.php
معلمة مفتاح API clientKey key
تنسيق الطلب JSON body مشفّر بالنموذج — أو JSON
حقل معرّف المهمة taskId request في الاستجابة
حقل النتيجة كائن solution request — سلسلة الرمز

خريطة تحويل المعلمات

بدل حفظ كل التفاصيل، استعن بجداول التحويل التالية لكل نوع من الأنواع التي تنقلها.

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

التحقق بالصور — Image / OCR

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

مطابقة رموز الأخطاء

معظم رموز الأخطاء متطابقة بين الخدمتين، ما يقلّل من تعديلات معالجة الاستثناءات. انتبه فقط إلى الفروق القليلة التالية:

CapMonster Cloud ما يقابله في 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

انتبه إلى الفرق الإملائي: يستخدم CaptchaAI CAPCHA_NOT_READY بدون حرف T. تجاهل هذا التفصيل يجعل حلقة الاستطلاع الدوري تتوقف قبل الأوان أو ترفع استثناءً خاطئاً، لذا حدّثه في منطق إعادة المحاولة أولاً.


ملاحظة قبل التبديل: هل جميع أنواعك مدعومة؟

قبل تحويل حركة الإنتاج، تأكد أن الأنواع التي تحلها حالياً في CapMonster مدعومة في CaptchaAI. تُحَل عبر CaptchaAI أنواع reCAPTCHA v2 وv2 Invisible وv2 Enterprise وv3، إضافةً إلى Cloudflare Turnstile وCloudflare Challenge وGeeTest v3 وصور OCR والشبكات الصورية وBLS، مع دعم CaptchaFox وFriendly Captcha وLemin في مرحلة beta. أما hCaptcha وFunCaptcha — Arkose Labs — فغير مدعومة حالياً، وGeeTest v4 قيد الإعداد ولم يُطرح بعد. إذا كان سير عملك في CapMonster يعتمد على أحد هذه الأنواع غير المدعومة، فخطّط لمعالجته أو أبقِ مساراً بديلاً له قبل التبديل الكامل.


قائمة تحقق الترحيل

  • [ ] احصل على مفتاح CaptchaAI API من captchaai.com
  • [ ] استبدل عنوان الإرسال: api.capmonster.cloud/createTaskocr.captchaai.com/in.php
  • [ ] استبدل عنوان النتيجة: api.capmonster.cloud/getTaskResultocr.captchaai.com/res.php
  • [ ] غيّر المصادقة: clientKeykey
  • [ ] حوّل تنسيق الطلب: كائن مهمة JSON ← معلمات مشفّرة بالنموذج
  • [ ] عدّل تحليل الاستجابة: taskIdrequest، وsolution.gRecaptchaResponserequest
  • [ ] حدّث معالجة الأخطاء: CAPTCHA_NOT_READYCAPCHA_NOT_READY
  • [ ] اختبر بحل واحد قبل تحويل حركة الإنتاج

الأسئلة الشائعة

ما الفرق في نموذج التسعير بين CapMonster Cloud وCaptchaAI؟

يعتمد CaptchaAI على الاشتراك حسب عدد الـ Threads المتزامنة مع حلول غير محدودة لكل Thread طوال الشهر، بدلاً من خصم رصيد لكل عملية حل. النتيجة تكلفة شهرية ثابتة تبدأ من باقة BASIC بسعر 15 دولاراً و5 Threads، بلا حدود يومية أو رسوم إضافية حسب نوع CAPTCHA.

هل تُدعم جميع أنواع CAPTCHA التي أستخدمها في CapMonster؟

تُدعم أنواع reCAPTCHA v2/v3 وCloudflare Turnstile وChallenge وGeeTest v3 وصور OCR والشبكات الصورية وBLS، مع CaptchaFox وFriendly Captcha وLemin في مرحلة beta. لكن hCaptcha وFunCaptcha غير مدعومين حالياً، وGeeTest v4 قيد الإعداد، لذا راجع أنواعك قبل الترحيل.

لماذا يستخدم CaptchaAI معلمات مشفّرة بالنموذج بدلاً من JSON؟

النمط المشفّر بالنموذج هو الأسلوب المتوافق مع نقطتَي in.php وres.php، وهو ما يجعل الترحيل من واجهات مشابهة أسهل. ومع ذلك يقبل CaptchaAI أيضاً تمرير json: "1" لاستقبال الاستجابة بصيغة JSON، فتحصل على أفضل ما في الأسلوبين.

كيف أختبر الترحيل دون التأثير على الإنتاج؟

وجّه نسبة صغيرة من الطلبات إلى CaptchaAI أولاً وراقب معدل الحل ووقت الاستجابة، ثم زد النسبة تدريجياً حتى تتحقق من صحة النتائج قبل التحويل الكامل. ابدأ دائماً بحل واحد ناجح للتأكد من سلامة المصادقة وتحليل الاستجابة.


ابدأ الترحيل الآن

أنشئ مفتاح API الخاص بك على captchaai.com وابدأ بترحيل أول طلب اليوم.


أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.