
# Webhooky

Queuety může při určitých událostech odesílat externím URL oznámení metodou HTTP POST. Pomocí webhooků můžete integrovat monitorovací systémy, Slack nebo vlastní řídicí panely.

## Podporované události

| Událost | Kdy nastane |
|---|---|
| `job.completed` | Jednoduchá úloha obslužné rutiny nebo třída `Contracts\Job` se úspěšně dokončí (nevztahuje se na kroky workflow ani akce stavového automatu) |
| `job.failed` | Pokus skončí chybou a naplánuje se opakování |
| `job.buried` | Úloha vyčerpá všechny pokusy o opakování |
| `workflow.failed` | Krok workflow trvale selže |

## Registrace webhooků

Pomocí PHP:

```php
$id = Queuety::webhook_notifier()->register( 'job.buried', 'https://hooks.slack.com/services/...' );
```

Pomocí CLI:

```bash
wp queuety webhook add job.buried https://hooks.slack.com/services/...
wp queuety webhook add workflow.failed https://monitoring.example.com/queuety
```

## Výpis webhooků

```php
$webhooks = Queuety::webhook_notifier()->list();
```

```bash
wp queuety webhook list
```

## Odebrání webhooků

```php
Queuety::webhook_notifier()->remove( $webhook_id );
```

```bash
wp queuety webhook remove 3
```

## Formát dat

Při výskytu události odešle Queuety požadavek POST HTTP s tělem ve formátu JSON. Data mají vždy tento tvar:

```json
{
    "event": "job.buried",
    "data": {
        "job_id": 42,
        "handler": "send_email",
        "queue": "emails",
        "error_message": "Connection timed out"
    },
    "timestamp": "2025-03-15T14:30:00Z"
}
```

Při selháních workflow:

```json
{
    "event": "workflow.failed",
    "data": {
        "workflow_id": 7,
        "job_id": 42,
        "handler": "CallLlmStep",
        "error_message": "API rate limit exceeded"
    },
    "timestamp": "2025-03-15T14:30:00Z"
}
```

Doručování webhooků probíhá v režimu best effort. Worker odesílá postupně požadavky na každý zaregistrovaný webhook URL s časovým limitem streamu jedné sekundy a selhání doručení ignoruje. Pomalý koncový bod tak může worker zdržet až o sekundu na každé URL, ale nikdy nezpůsobí selhání úlohy.

## Příklady použití

- **Upozornění Slack.** Získejte oznámení, když se úlohy odloží nebo workflow selžou.
- **Integrace PagerDuty.** Spouštějte incidenty při kritických selháních úloh.
- **Vlastní řídicí panely.** Posílejte události do vlastní monitorovací infrastruktury.
- **Auditní stopa.** Předávejte události externí službě pro protokolování.
