Wróć

14. Automatyzacja i zadania cykliczne OpenClaw: Cron, Webhook i integracja z Gmail

Ten artykuł opisuje możliwości automatyzacji OpenClaw, w tym zadania cykliczne Cron, triggery Webhook, integrację Gmail Pub/Sub i inne, pozwalając Twojemu asystentowi AI działać proaktywnie, a nie tylko reaktywnie.

Dotyczy OpenClaw v2026.2 | Ten artykuł jest przeznaczony dla użytkowników, którzy chcą, aby ich asystent AI działał proaktywnie, a nie tylko reagował na polecenia.

TL;DR: Zadania cykliczne Cron: "cron": [{"id": "daily", "schedule": "0 9 * * *", "message": "..."}]. Triggery Webhook: POST /webhook/your-path. Gmail Pub/Sub do automatycznego przetwarzania poczty. Heartbeat do proaktywnych sprawdzeń. Przykłady konfiguracji: codzienny raport poranny 0 8 * * 1-5, powiadomienia CI przez webhook, filtry e-mail przez Gmail Pub/Sub.

Przegląd automatyzacji

Typy automatyzacji

Typ Sposób wyzwalania Zastosowanie
Cron Wyzwalanie czasowe Codzienne raporty, okresowe sprawdzenia
Webhook Żądanie HTTP Integracja z systemami zewnętrznymi
Gmail Pub/Sub Nowy e-mail Automatyzacja poczty
Heartbeat Okresowe sprawdzanie Proaktywne przypomnienia, sugestie

Schemat architektury

flowchart TB
    subgraph Triggers["Źródła wyzwalania"]
        CRON[Cron czasowy]
        WH[Webhook HTTP]
        GM[Gmail Pub/Sub]
        HB[Heartbeat]
    end
    
    subgraph Gateway["Gateway"]
        SCHED[Scheduler]
        ROUTE[Router]
        AGENT[Agent]
    end
    
    subgraph Actions["Akcje"]
        MSG[Wyślij wiadomość]
        EXEC[Wykonaj zadanie]
        NOTIF[Wyślij powiadomienie]
    end
    
    CRON --> SCHED
    WH --> ROUTE
    GM --> ROUTE
    HB --> SCHED
    
    SCHED --> AGENT
    ROUTE --> AGENT
    AGENT --> MSG
    AGENT --> EXEC
    AGENT --> NOTIF

Zadania cykliczne Cron

Wyrażenie Cron

┌───────────── minuta (0 - 59)
│ ┌───────────── godzina (0 - 23)
│ │ ┌───────────── dzień miesiąca (1 - 31)
│ │ │ ┌───────────── miesiąc (1 - 12)
│ │ │ │ ┌───────────── dzień tygodnia (0 - 6, 0 = niedziela)
│ │ │ │ │
* * * * *

Często używane wyrażenia

Wyrażenie Opis
0 9 * * * Codziennie o 9:00
0 18 * * 1-5 Dni robocze o 18:00
*/30 * * * * Co 30 minut
0 0 1 * * Pierwszy dzień miesiąca o 0:00
0 9,18 * * * Codziennie o 9:00 i 18:00
0 9 * * 1 W każdy poniedziałek o 9:00

Konfiguracja zadań Cron

{
  "cron": [
    {
      "id": "daily-briefing",
      "schedule": "0 9 * * *",
      "session": "main",
      "message": "Proszę podaj mi dzisiejszy harmonogram i listę zadań do wykonania",
      "enabled": true
    },
    {
      "id": "weekly-summary",
      "schedule": "0 18 * * 5",
      "session": "main",
      "message": "Wygeneruj podsumowanie tygodnia pracy",
      "enabled": true
    },
    {
      "id": "health-check",
      "schedule": "*/15 * * * *",
      "session": "main",
      "message": "Sprawdź stan systemu i zgłoś wszelkie anomalie",
      "enabled": true
    }
  ]
}

Parametry konfiguracji Cron

Pole Typ Opis
id string Unikalny identyfikator zadania
schedule string Wyrażenie Cron
session string Sesja docelowa
message string Wysyłana wiadomość
enabled boolean Czy włączone
timezone string Strefa czasowa (domyślnie systemowa)

Zarządzanie zadaniami Cron

# Lista wszystkich zadań
openclaw cron list

# Przykładowe wyjście:
# ID               Schedule       Status    Last Run
# daily-briefing   0 9 * * *     enabled   2026-02-26 09:00
# weekly-summary   0 18 * * 5    enabled   2026-02-23 18:00
# health-check    */15 * * * *   enabled   2026-02-26 10:30

# Ręczne uruchomienie zadania
openclaw cron run daily-briefing

# Włączanie/wyłączanie zadania
openclaw cron enable daily-briefing
openclaw cron disable daily-briefing

# Wyświetlanie logów zadania
openclaw cron logs daily-briefing

Triggery Webhook

Konfiguracja Webhook

{
  "webhooks": [
    {
      "id": "github-push",
      "path": "/webhook/github",
      "secret": "your-webhook-secret",
      "session": "main",
      "handler": "github-push"
    },
    {
      "id": "custom-alert",
      "path": "/webhook/alert",
      "secret": "your-webhook-secret",
      "session": "main",
      "message": "Otrzymano alert: {{data.message}}"
    }
  ]
}

Endpointy Webhook

POST http://your-gateway:18789/webhook/github-push
POST http://your-gateway:18789/webhook/alert

Przykład Webhook GitHub

{
  "webhooks": [
    {
      "id": "github-push",
      "path": "/webhook/github",
      "secret": "${GITHUB_WEBHOOK_SECRET}",
      "session": "work",
      "handler": "github-push"
    }
  ]
}

Skrypt handlera:

// ~/.openclaw/handlers/github-push.js
module.exports = async (payload, session) => {
  if (payload.ref === 'refs/heads/main') {
    const commits = payload.commits.map(c => c.message).join('\n- ');
    return `Wykryto nowy push:\n\nGałąź: main\nCommity:\n- ${commits}\n\nCzy potrzebujesz mojej pomocy?`;
  }
  return null;
};

Niestandardowa obsługa Webhook

{
  "webhooks": [
    {
      "id": "monitoring-alert",
      "path": "/webhook/alert",
      "methods": ["POST"],
      "session": "main",
      "message": "🚨 Powiadomienie alarmowe\n\nPoziom: {{data.level}}\nUsługa: {{data.service}}\nInformacja: {{data.message}}\nCzas: {{data.timestamp}}"
    }
  ]
}

Wysyłanie Webhook:

curl -X POST http://localhost:18789/webhook/alert \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Secret: your-secret" \
  -d '{
    "level": "critical",
    "service": "api-server",
    "message": "Wykorzystanie CPU przekroczyło 90%",
    "timestamp": "2026-02-26T10:30:00Z"
  }'

Bezpieczeństwo Webhook

{
  "webhooks": [
    {
      "id": "secure-webhook",
      "path": "/webhook/secure",
      "secret": "your-secret-key",
      "signatureHeader": "X-Signature",
      "signatureAlgorithm": "sha256",
      "ipWhitelist": ["192.168.1.0/24"]
    }
  ]
}

Integracja Gmail Pub/Sub

Konfiguracja Gmail Pub/Sub

{
  "gmail": {
    "pubsub": {
      "enabled": true,
      "projectId": "your-project-id",
      "subscription": "gmail-subscription",
      "credentials": {
        "type": "service_account",
        "project_id": "your-project-id",
        "private_key_id": "...",
        "private_key": "...",
        "client_email": "..."
      },
      "filters": [
        {
          "from": "[email protected]",
          "session": "main",
          "message": "Otrzymano ważny e-mail:\nNadawca: {{sender}}\nTemat: {{subject}}"
        }
      ]
    }
  }
}

Konfiguracja Gmail Pub/Sub

  1. Utwórz projekt Google Cloud
  2. Włącz Gmail API
  3. Utwórz temat Pub/Sub
  4. Utwórz konto usługi
  5. Skonfiguruj Gmail watch
# Konfiguracja Gmail watch
openclaw gmail watch --email [email protected]

Filtry Gmail

Warunek filtrowania Opis
from Adres nadawcy
to Adres odbiorcy
subject Słowa kluczowe tematu
hasAttachment Czy ma załącznik
label Etykieta Gmail
{
  "filters": [
    {
      "from": "[email protected]",
      "session": "work",
      "message": "Otrzymano powiadomienie GitHub: {{subject}}"
    },
    {
      "from": "[email protected]",
      "hasAttachment": true,
      "session": "main",
      "message": "Otrzymano dokument Stripe, proszę przetworzyć"
    }
  ]
}

Proaktywne sprawdzanie Heartbeat

Konfiguracja Heartbeat

{
  "heartbeat": {
    "enabled": true,
    "interval": 3600000,
    "session": "main",
    "message": "Heartbeat: proszę sprawdź, czy jest coś, na co powinienem zwrócić uwagę"
  }
}

Zastosowania Heartbeat

Zastosowanie Opis
Proaktywne przypomnienia Okresowe przypominanie użytkownikowi
Sprawdzanie stanu Sprawdzanie stanu systemów lub usług
Sugestie zadań Sugestie na podstawie kontekstu
Utrzymanie kontekstu Utrzymywanie sesji aktywnej

Przykład Heartbeat

{
  "heartbeat": {
    "enabled": true,
    "interval": 1800000,
    "conditions": [
      {
        "type": "time",
        "start": "09:00",
        "end": "18:00"
      },
      {
        "type": "active",
        "session": "main"
      }
    ],
    "message": "Na podstawie aktualnego czasu sugeruję sprawdzić:\n1. Dzisiejsze zadania\n2. Przypomnienia e-mailowe\n3. Harmonogram dnia"
  }
}

Praktyczne przykłady automatyzacji

Przykład 1: Codzienny raport poranny

{
  "cron": [
    {
      "id": "morning-briefing",
      "schedule": "0 8 * * 1-5",
      "session": "main",
      "message": "Dzień dobry! Proszę przygotuj poranny raport:\n1. Prognoza pogody\n2. Dzisiejszy harmonogram\n3. Lista zadań\n4. Podsumowanie ważnych e-maili"
    }
  ]
}

Przykład 2: Powiadomienia CI/CD

{
  "webhooks": [
    {
      "id": "ci-failure",
      "path": "/webhook/ci",
      "session": "dev",
      "message": "⚠️ Błąd CI\n\nProjekt: {{data.repository}}\nGałąź: {{data.branch}}\nCommit: {{data.commit}}\nBłąd: {{data.error}}\n\nCzy potrzebujesz mojej analizy?"
    }
  ]
}

Przykład 3: Automatyczne przetwarzanie poczty

{
  "gmail": {
    "pubsub": {
      "filters": [
        {
          "from": "[email protected]",
          "hasAttachment": true,
          "session": "main",
          "message": "Otrzymano e-mail z fakturą, przetwarzanie...\nProszę zapisz załącznik w folderze finansowym"
        }
      ]
    }
  }
}

Przykład 4: Monitoring systemowy

{
  "cron": [
    {
      "id": "system-monitor",
      "schedule": "*/5 * * * *",
      "session": "main",
      "message": "Sprawdź stan systemu",
      "skills": ["system-monitor"]
    }
  ]
}

Rozwiązywanie problemów

Zadanie Cron nie jest wykonywane

# Sprawdzenie statusu zadania
openclaw cron list

# Sprawdzenie logów
openclaw logs --filter cron

# Ręczne uruchomienie testowe
openclaw cron run task-id

Webhook nie odpowiada

# Sprawdzenie endpointu Webhook
curl -X POST http://localhost:18789/webhook/test \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

# Wyświetlenie logów
openclaw logs --filter webhook

Gmail Pub/Sub nie działa

# Sprawdzenie statusu subskrypcji
openclaw gmail status

# Ponowna konfiguracja
openclaw gmail setup

# Sprawdzenie uprawnień
openclaw gmail check-permissions

Podsumowanie

Automatyzacja zmienia OpenClaw z reaktywnego w proaktywnego asystenta:

  • Cron: wykonywanie zadań zgodnie z harmonogramem
  • Webhook: wyzwalanie przez zdarzenia zewnętrzne
  • Gmail Pub/Sub: automatyzacja poczty
  • Heartbeat: proaktywne przypomnienia i sugestie

Historia zmian:

  • 2026-02-26: Pierwsza publikacja

Nawigacja po serii: