Tutorials

Slack-Bot-Benachrichtigungen für CAPTCHA-Ereignisse

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

  1. Gehe zuapi.slack.com/apps-> Neue App erstellen
  2. Wählen Sie Eingehende Webhooks → Aktivieren
  3. Klicken Sie auf Neuen Webhook zum Arbeitsbereich hinzufügen → Wählen Sie einen Kanal aus
  4. 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)

Noch keine Kommentare.