Zapier में timeout से टकराए बिना कैप्चा कैसे हल करें

Zapier में कैप्चा वाला step जिस वजह से फेल होता है उसका कैप्चा से कोई लेना देना नहीं: एक Code step को डिफ़ॉल्ट रूप से 10 या 30 सेकंड मिलते हैं, और एक solve उससे ज़्यादा समय लेता है। submit और poll एक ही step में किया, तो timeout हो जाएगा। जो शक्ल काम करती है वह है दो steps और उनके बीच एक delay, और ऐसा सॉल्वर जिस तक Zapier के सर्वरों की पहुँच हो, यानी loopback पते के बजाय Server mode। समस्या पता चल जाने के बाद ये दोनों पाँच मिनट के बदलाव हैं।
आपको क्या चाहिए
- किसी भी ऐसे प्लान पर Zapier खाता जिसमें Code by Zapier शामिल हो।
- CapSkip किसी ऐसी मशीन पर Server mode में चल रहा हो जहाँ Zapier पहुँच सके, और उसका static public IP हो। देखें: कनेक्शन सेटिंग्स.
- key validation चालू हो, और इस Zap के लिए एक API key जारी की गई हो।
- सुरक्षित form का sitekey और पेज URL, जिस भी trigger step से वे मिलते हों।
यहाँ Server mode वैकल्पिक नहीं है
इस ब्लॉग की बाकी हर गाइड सॉल्वर को 127.0.0.1:8080पर चलाती है, और आपकी अपनी मशीन पर यह बिलकुल सही भी है। Zapier आपकी मशीन पर नहीं है। आपका Zap, Zapier के infrastructure पर चलता है, इसलिए Code step से 127.0.0.1 पर भेजी गई request Zapier के अपने container तक ही पहुँचती है और उसे कुछ नहीं मिलता।
CapSkip की connection settings में इसके लिए एक दूसरा mode है। लोकल 127.0.0.1 से bind होता है और सिर्फ़ उसी डिवाइस से पहुँच में रहता है। सर्वर आपके नेटवर्क या public IP से bind होता है, जिससे कोई hosted platform उसे उसी 2captcha compatible API के ज़रिए कॉल कर सकता है। static public IP की सलाह इसलिए दी जाती है कि यही पता आपके Zap में जाता है और आप नहीं चाहेंगे कि वह बदलता रहे।
हार्डवेयर तब भी आपका ही है और तब भी बिना मीटर के। Server mode सिर्फ़ यह बदलता है कि सॉल्वर कहाँ सुनता है, न यह कि उसका मालिक कौन है और न यह कि बिलिंग कैसे होती है। जो चीज़ यह सचमुच बदलता है वह है exposure, इसलिए port खोलने से पहले key validation चालू करें, और Zap को उसकी अपनी key दें ताकि आप बाकी किसी चीज़ को छेड़े बिना उसे रद्द कर सकें।
वह timeout जो आपके Zap की शक्ल तय करता है
Code by Zapier आपके Python या JavaScript को एक runtime सीमा के साथ चलाता है। Starter पर वह सीमा 10 सेकंड है। Pro, Team और Company पर 30 सेकंड। Zapier extended runtimes भी देता है, जो एक Code step को 10 मिनट तक ले जा सकते हैं, और जिन्हें आप उसी step पर configure करते हैं।
अब इसकी तुलना एक solve से करें। image कैप्चा आम तौर पर चंद सेकंड का होता है। reCAPTCHA v2 का जवाब आम तौर पर 15 से 45 सेकंड के बीच आता है, और polling की सलाह यह है कि पहली जाँच से पहले लगभग 15 से 20 सेकंड रुकें। यानी submit फिर poll वाला loop 10 सेकंड में नहीं समाता, 30 सेकंड में भी अक्सर नहीं समाता, और extended runtime में आराम से समा जाता है।
इससे आपको दो design मिलते हैं, और सही कौन सा है यह इस पर निर्भर करता है कि extended runtimes चालू हैं या नहीं:
- दो steps और एक delay। हर प्लान पर काम करता है। submit करें, रुकें, poll करें। Zap history साफ़ पढ़ी जाती है और धीमा solve पूरे run को नहीं मारता।
- extended runtime वाला एक ही step। कम हिस्से हिलते डुलते हैं, और पूरा solve एक ही जगह रहता है। इसके लिए उस step पर लंबा runtime चालू होना ज़रूरी है।
Step 1: कैप्चा submit करें और ID संभालकर रखें
एक Code by Zapier action जोड़ें, Python चुनें, और sitekey तथा पेज URL को step के input fields में map करें। Input values हमेशा strings के रूप में input_dataमें आते हैं, जो यहाँ ठीक है क्योंकि आप जो कुछ भेज रहे हैं वह वैसे भी string ही है।
# Code by Zapier, Python. requests is available; nothing to install.
SOLVER = "http://YOUR_SERVER_IP:8080"
r = requests.post(SOLVER + "/in.php", data={
"key": input_data["api_key"],
"method": "userrecaptcha",
"googlekey": input_data["sitekey"],
"pageurl": input_data["pageurl"],
"json": 1,
})
body = r.json()
if body["status"] != 1:
raise Exception("Submit rejected: " + body["request"])
# Hand the id to the next step.
output = {"captcha_id": body["request"]}submit ठुकराए जाने पर exception उठाना ही सही कदम है। Zapier उस run को errored मार्क कर देता है और संदेश Zap history में दिखा देता है, जो किसी error string को आगे की कड़ी में भेजकर तीन steps बाद पता चलने से बेहतर है।
Step 2: delay लगाएँ, फिर token के लिए poll करें
एक Delay by Zapier step जोड़ें और छोटे interval के साथ Delay For इस्तेमाल करें। reCAPTCHA v2 के लिए बीस सेकंड एक समझदार न्यूनतम है, क्योंकि उससे पहले poll करने पर सिर्फ़ CAPCHA_NOT_READY लौटता है और आपके Code step का बजट ऐसी requests पर जलता है जो कभी सफल होने ही नहीं वाली थीं।
फिर एक दूसरा Code step जोड़ें जो poll करे। loop को छोटा रखें: बीच में sleep के साथ गिनती के कुछ attempts 30 सेकंड में समा जाते हैं, और अगर तब तक जवाब तैयार नहीं है तो Zap error दे देता है और आप लंबे loop में बैठे रहने के बजाय Autoreplay चालू कर सकते हैं।
# Code by Zapier, Python. Second step, after Delay For 20 seconds.
import time
SOLVER = "http://YOUR_SERVER_IP:8080"
params = {
"key": input_data["api_key"],
"action": "get",
"id": input_data["captcha_id"],
"json": 1,
}
token = None
# Five tries at 5s stays inside a 30 second step.
for _ in range(5):
body = requests.get(SOLVER + "/res.php", params=params).json()
if body["status"] == 1:
token = body["request"]
break
if body["request"] != "CAPCHA_NOT_READY":
raise Exception(body["request"])
time.sleep(5)
if not token:
raise Exception("Not solved yet. Lengthen the delay ahead of this step.")
output = {"token": token}CAPCHA_NOT_READY में T नहीं है, और यह इस पोस्ट की टाइपिंग ग़लती नहीं बल्कि API की अपनी spelling है। इसके अलावा जो भी response आपको वापस मिले वह असली error है और उसे Zap रोक देना चाहिए। पूरी सूची यहाँ है: CapSkip API डॉक्यूमेंटेशन.
एक step वाला रूप
उस step पर extended runtimes चालू होने पर दोनों हिस्से एक ही action में सिमट जाते हैं और Delay ग़ायब हो जाता है। कोड वही ऊपर वाले दो blocks हैं, बस poll loop चौड़ा कर दिया जाता है, और ध्यान सिर्फ़ इतना रखना है कि आपके loop की अपनी सीमा उस runtime से नीचे रहे जो आपने configure किया है, ताकि step आपका लिखा हुआ संदेश उठाए, न कि request के बीच में मारा जाए।
window को बहुत बड़ा बनाने के ख़िलाफ़ एक चेतावनी: हल हो चुके token की अपनी उम्र भी सीमित होती है। reCAPTCHA token एक ही बार इस्तेमाल होता है और लगभग दो मिनट बाद स्वीकार होना बंद हो जाता है, इसलिए जो Zap solve करके फिर पाँच मिनट कतार में बैठा रहता है, वह ऐसी चीज़ submit करेगा जिसे साइट पहले ही मानना छोड़ चुकी है। Token की समय सीमा सटीक आँकड़े देती है। Zap में जितनी देर से हो सके solve करें, और token इस्तेमाल करने वाले step को ठीक उसके बाद रखें।
इसके बजाय Webhooks by Zapier का इस्तेमाल
submit आप Webhooks by Zapier से भी कर सकते हैं, बिना कोई कोड लिखे। Custom Request या POST चुनें, उसे /in.phpपर point करें, और वही fields form data के रूप में भेजें। response इस रूप में वापस आता है: {"status": 1, "request": "<id>"} और Zapier उसे ऐसे fields में parse कर देता है जिन्हें आप आगे map कर सकते हैं।
{
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "YOUR_SITEKEY",
"pageurl": "https://example.com/page-with-recaptcha",
"json": 1
}यह तरीका poll पर आकर अटपटा हो जाता है। एक webhook एक ही request करता है, इसलिए यह तय करने के लिए कि जवाब आया या नहीं, आपको एक Delay और एक Filter चाहिए, और Zap आसानी से पीछे लौटकर दोबारा कोशिश नहीं कर सकता। उस आधे हिस्से के लिए Code step बेहतर पढ़ा जाता है। अगर आपको टाइप करने से ज़्यादा क्लिक करना पसंद है तो submit के लिए Webhooks इस्तेमाल करें, और poll के लिए हर हाल में Code।
आम errors और उनका मतलब
| आप जो देखते हैं | कारण | फिक्स |
|---|---|---|
| आपका कोड timeout हो गया | 10 या 30 सेकंड की सीमा में submit और poll एक ही step में | एक Delay के साथ दो steps में बाँटें, या extended runtimes चालू करें |
| Connection refused या अटकी हुई request | step 127.0.0.1 को कॉल कर रहा है, जो Zapier का अपना container है | सॉल्वर को Server mode में करें और उसका public IP इस्तेमाल करें |
| ERROR_KEY_DOES_NOT_EXIST | key validation चालू है और इस Zap की key रजिस्टर नहीं है | ऐप की settings में Zap के लिए एक key जारी करें |
| हर attempt पर CAPCHA_NOT_READY | polling बहुत जल्दी शुरू हुई, या loop बहुत छोटा है | poll step से पहले वाले Delay को लंबा करें |
| ERROR_GOOGLEKEY | sitekey field trigger से ख़ाली आया | step के input fields में mapping जाँचें |
| लक्षित साइट ने token ठुकरा दिया | solve और उसके इस्तेमाल के बीच वह पुराना पड़ गया | solve को बाद में ले जाएँ, उस step के ठीक बगल में जो उसे submit करता है |
FAQ
क्या मैं Code step में CapSkip SDK इंस्टॉल कर सकता हूँ?
नहीं। Code by Zapier एक sandbox में चलता है जिसमें libraries का एक तय सेट होता है और कोई package इंस्टॉल नहीं होता, इसलिए Python और Node SDKs बाहर हो जाते हैं। हाँ, उसमें requests library ज़रूर शामिल है, और API दो endpoints के साथ 2captcha compatible है, इसलिए ऊपर वाला कोड वही सब कर देता है जो SDK करता। अगर आपकी pipeline का कोई हिस्सा ऐसी जगह चलता है जो आपके नियंत्रण में है, तो CAPTCHA solving SDK पेज चारों आधिकारिक clients को कवर करता है।
Zapier hosted है। वह मेरी मशीन पर चल रहे सॉल्वर तक कैसे पहुँचेगा?
Server mode के ज़रिए। सॉल्वर loopback पते के बजाय आपके नेटवर्क या public IP से bind होता है, और Zapier उसे किसी भी दूसरे public API की तरह कॉल करता है। उसे एक static public IP दें ताकि आपके Zap में लिखा पता वैध बना रहे, port खोलने से पहले key validation चालू करें, और Zap को उसकी अपनी key जारी करें।
Delay step कितना लंबा होना चाहिए?
reCAPTCHA v2 के लिए 20 सेकंड से शुरू करें और GeeTest के लिए लगभग 5 से। image कैप्चा इतनी जल्दी वापस आते हैं कि एक सेकंड की poll वाला एक ही step आम तौर पर काफ़ी होता है। लंबा होना अपने आप सुरक्षित नहीं होता, क्योंकि token जारी होते ही पुराना पड़ना शुरू कर देता है, इसलिए delay को तब तक घटाते जाएँ जब तक कभी कभार एक retry दिखने न लगे, न कि तब तक बढ़ाते जाएँ जब तक retry दिखना ही बंद हो जाए।
इसके लिए मुझे Zapier इस्तेमाल करना चाहिए या कोई self-hosted टूल?
Zapier तब सही चुनाव है जब बाकी workflow पहले से वहीं रहता हो। अगर कैप्चा वाला काम ही मुख्य काम है, तो ख़ुद अपने यहाँ होस्ट किया गया टूल runtime की सीमा से पूरी तरह बच जाता है और सॉल्वर से किसी निजी पते पर बात कर सकता है। n8n वॉकथ्रू उसी शक्ल को कवर करता है, और उसके Wait node पर ऐसी कोई सीमा नहीं है।
संक्षेप में
सॉल्वर को Server mode में चलाएँ ताकि Zapier उस तक पहुँच सके, एक Code step में submit करें, लगभग 20 सेकंड का delay दें, और दूसरे step में poll करें। अगर आपको एक ही step ज़्यादा भाता है तो extended runtimes चालू कर लें। पूरी चीज़ कसी हुई रखें, क्योंकि token आपकी Zap history से बहुत पहले ख़त्म हो जाता है। आप कोई भी design चुनें, लागत सपाट रहती है: आपकी पहले से अपनी मशीन पर चल रहा कैप्चा सॉल्वर आपसे प्रति-हल शुल्क नहीं लेता, इसलिए दिन में चार सौ बार चलने वाले Zap की कीमत ठीक उतनी ही है जितनी चार बार चलने वाले की।
