CAPTCHA ardışık düzeniniz geniş ölçekte başarısız olmaya başladığında, bunu hemen bilmeniz gerekir - saatler sonra kazıma sonuçları boşaldığında. Bu kılavuz, hatalar, düşük bakiye ve anormal hata oranları için Slack bildirimlerini ayarlar.
Kurulum: Slack web kancası oluşturma
- Gitapi.slack.com/apps→ Yeni Uygulama Oluştur
- Gelen Web Kancaları'nı seçin †' Etkinleştirin
- Çalışma Alanına Yeni Web Kancası Ekle'yi tıklayın → Bir kanal seçin
- Web kancası URL'sini kopyalayın
Python: Slack bildirim yardımcısı
import requests
import json
from datetime import datetime
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/T00/B00/xxx"
def send_slack_alert(title, message, color="#ff0000", fields=None):
"""Send a formatted Slack alert."""
attachment = {
"color": color,
"title": title,
"text": message,
"ts": int(datetime.now().timestamp()),
}
if fields:
attachment["fields"] = [
{"title": k, "value": str(v), "short": True}
for k, v in fields.items()
]
payload = {"attachments": [attachment]}
resp = requests.post(SLACK_WEBHOOK_URL, json=payload, timeout=10)
return resp.status_code == 200
Uyarı 1: Arızayı çözün
def notify_solve_failure(task_id, captcha_type, error_code, site_url):
send_slack_alert(
title="CAPTCHA Solve Failed",
message=f"Task `{task_id}` failed with `{error_code}`",
color="#ff0000",
fields={
"Type": captcha_type,
"Error": error_code,
"Site": site_url,
"Time": datetime.now().strftime("%H:%M:%S"),
},
)
# Use after a failed solve
result = poll_for_result(task_id)
if result.get("error"):
notify_solve_failure(task_id, "recaptcha_v2", result["error"], "https://example.com")
Uyarı 2: Düşük bakiye
def check_balance_alert(api_key, threshold=5.0):
"""Alert when balance ürün lansmanları below threshold."""
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key, "action": "getbalance", "json": "1"
}).json()
balance = float(resp.get("request", 0))
if balance < threshold:
send_slack_alert(
title="Low CaptchaAI Balance",
message=f"Balance is ${balance:.2f} (threshold: ${threshold:.2f})",
color="#ff9900",
fields={
"Current Balance": f"${balance:.2f}",
"Threshold": f"${threshold:.2f}",
},
)
return balance
# Run periodically
import threading
def balance_monitor(api_key, interval=300):
"""Check balance every 5 minutes."""
check_balance_alert(api_key)
timer = threading.Timer(interval, balance_monitor, args=[api_key, interval])
timer.daemon = True
timer.start()
balance_monitor("YOUR_API_KEY")
Uyarı 3: Yüksek hata oranı
from collections import deque
class ErrorRateNotifier:
def __init__(self, window=50, threshold=0.3, cooldown=300):
self.results = deque(maxlen=window)
self.threshold = threshold
self.cooldown = cooldown
self.last_alert = 0
def record(self, success):
self.results.append(success)
if len(self.results) < 20:
return
error_rate = 1 - sum(self.results) / len(self.results)
import time
now = time.time()
if error_rate > self.threshold and (now - self.last_alert) > self.cooldown:
self.last_alert = now
send_slack_alert(
title="High CAPTCHA Error Rate",
message=f"Error rate: {error_rate:.0%} over last {len(self.results)} tasks",
color="#ff0000",
fields={
"Error Rate": f"{error_rate:.1%}",
"Window": f"{len(self.results)} tasks",
"Threshold": f"{self.threshold:.0%}",
},
)
notifier = ErrorRateNotifier()
# After each solve attempt
notifier.record(success=True) # solved
notifier.record(success=False) # failed
Node.js uygulaması
const axios = require('axios');
const SLACK_WEBHOOK = 'https://hooks.slack.com/services/T00/B00/xxx';
async function sendSlackAlert(title, message, color = '#ff0000', fields = {}) {
const attachment = {
color,
title,
text: message,
ts: Math.floor(Date.now() / 1000),
fields: Object.entries(fields).map(([k, v]) => ({
title: k, value: String(v), short: true,
})),
};
await axios.post(SLACK_WEBHOOK, { attachments: [attachment] });
}
// Failure alert
async function notifySolveFailure(taskId, type, error) {
await sendSlackAlert(
'CAPTCHA Solve Failed',
`Task \`${taskId}\` failed: \`${error}\``,
'#ff0000',
{ Type: type, Error: error }
);
}
// Balance alert
async function checkBalance(apiKey, threshold = 5.0) {
const resp = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: apiKey, action: 'getbalance', json: 1 },
});
const balance = parseFloat(resp.data.request);
if (balance < threshold) {
await sendSlackAlert(
'Low CaptchaAI Balance',
`Balance: $${balance.toFixed(2)}`,
'#ff9900',
{ Balance: `$${balance.toFixed(2)}`, Threshold: `$${threshold.toFixed(2)}` }
);
}
return balance;
}
// Periodic check
setInterval(() => checkBalance('YOUR_API_KEY'), 5 * 60 * 1000);
Günlük özet
def send_daily_summary(stats):
"""Send a daily digest to Slack."""
send_slack_alert(
title="Daily CAPTCHA Summary",
message=f"{stats['total']} tasks processed",
color="#36a64f",
fields={
"Solved": stats["solved"],
"Failed": stats["failed"],
"Avg Solve Time": f"{stats['avg_time_ms']}ms",
"Total Cost": f"${stats['total_cost']:.2f}",
"Success Rate": f"{stats['success_rate']:.1%}",
},
)
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Web kancası 403 değerini döndürüyor | Geçersiz web kancası URL'si | Web kancasını Slack'te yeniden oluşturun |
| Çok fazla uyarı | Bekleme süresi yok | Uyarılar arasına bekleme süresi ekleyin |
| Uyarılar gecikti | Web kancası zaman aşımı | İsteklerde zaman aşımını ayarla (10s) |
| Kanal alınmıyor | Yanlış kanal seçildi | Webhook kanalı yapılandırmasını kontrol edin |
SSS
Uyarı yorgunluğunu nasıl önleyebilirim?
Bekleme sürelerini (minimum 5 dakika), özetlerde toplu hataları kullanın ve bireysel arızalar için değil, yalnızca hata oranı eşikleri hakkında uyarı verin.
Slack yerine Discord'u kullanabilir miyim?
Evet. Discord web kancaları benzer bir JSON biçimini kabul eder. Yük yapısını attachments yerine embeds kullanacak şekilde değiştirin.
CAPTCHA iş akışlarınızı CaptchaAI ile izleyin
API anahtarınızı şu adresten alın:captchaai.com.