Wenn Ihre CAPTCHA-Pipeline in großem Umfang ausfällt, müssen Sie es sofort wissen – und nicht erst Stunden später, wenn die Scraping-Ergebnisse leer sind. In diesem Leitfaden werden Slack-Benachrichtigungen für Ausfälle, niedrigen Kontostand und ungewöhnliche Fehlerraten eingerichtet.
Einrichtung: Erstellen Sie einen Slack-Webhook
- Gehe zuapi.slack.com/apps-> Neue App erstellen
- Wählen Sie Eingehende Webhooks → Aktivieren
- Klicken Sie auf Neuen Webhook zum Arbeitsbereich hinzufügen → Wählen Sie einen Kanal aus
- Kopieren Sie die Webhook-URL
Python: Slack-Benachrichtigungshelfer
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
Warnung 1: Fehler beheben
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")
Warnung 2: Niedriger Kontostand
def check_balance_alert(api_key, threshold=5.0):
"""Alert when balance drops 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")
Warnung 3: Hohe Fehlerquote
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-Implementierung
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);
Tägliche Zusammenfassung
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%}",
},
)
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Webhook gibt 403 zurück | Ungültige Webhook-URL | Erstellen Sie den Webhook in Slack neu |
| Zu viele Warnungen | Keine Abklingzeit | Fügen Sie eine Abklingzeit zwischen den Warnungen hinzu |
| Warnungen verzögert | Webhook-Timeout | Timeout für Anfragen festlegen (10 s) |
| Kanal empfängt nicht | Falscher Kanal ausgewählt | Überprüfen Sie die Konfiguration des Webhook-Kanals |
FAQ
Wie vermeide ich Alarmmüdigkeit?
Verwenden Sie Abkühlzeiten (mindestens 5 Minuten), bündeln Sie Fehler in Digests und geben Sie nur Warnungen bei Fehlerratenschwellenwerten aus – nicht bei einzelnen Fehlern.
Kann ich Discord anstelle von Slack verwenden?
Ja. Discord-Webhooks akzeptieren ein ähnliches JSON-Format. Ändern Sie die Nutzlaststruktur, um embeds anstelle von attachments zu verwenden.
Überwachen Sie Ihre CAPTCHA-Workflows mit CaptchaAI
Holen Sie sich Ihren API-Schlüssel untercaptchaai.com.
Verwandte Leitfäden
- Strukturierte Protokollierung für CAPTCHA-Vorgänge
- CaptchaAI Guthabenprüfung und automatisches Auffüllen
- Erstellen eines CaptchaAI-Nutzungs-Dashboards
Diskussionen (0)
Beteiligen Sie sich an der Unterhaltung
Melden Sie sich an, um Ihre Meinung zu teilen.
AnmeldenNoch keine Kommentare.