
# Webhooky

Queuety môže pri výskyte konkrétnych udalostí odosielať upozornenia HTTP POST na externé URL adresy. Pomocou webhookov môžete integrovať monitorovacie systémy, Slack alebo vlastné panely.

## Podporované udalosti

| Udalosť | Kedy nastane |
|---|---|
| `job.completed` | Bežný obslužný program úlohy alebo trieda `Contracts\Job` sa úspešne dokončí (nevzťahuje sa na kroky pracovného postupu ani akcie stavového automatu) |
| `job.failed` | Pokus vyvolá výnimku a naplánuje sa opakovanie |
| `job.buried` | Úloha vyčerpá všetky pokusy o opakovanie |
| `workflow.failed` | Krok pracovného postupu definitívne zlyhá |

## Registrácia webhookov

Cez PHP:

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

Cez CLI:

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

## Zoznam webhookov

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

```bash
wp queuety webhook list
```

## Odstránenie webhookov

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

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

## Formát dátovej časti

Pri výskyte udalosti Queuety odošle požiadavku POST HTTP s telom vo formáte JSON. Dátová časť má 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"
}
```

Pri zlyhaniach pracovného postupu:

```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čenie webhookov je založené na najlepšej snahe. Worker postupne odosiela požiadavku na každý zaregistrovaný URL s časovým limitom streamu jednej sekundy a zlyhania doručenia ignoruje. Pomalý koncový bod tak môže worker zdržať až približne o sekundu pri každom URL, no úloha nikdy nezlyhá.

## Prípady použitia

- **Upozornenia Slack.** Dostávajte upozornenia pri odložení úloh alebo zlyhaní pracovných postupov.
- **Integrácia PagerDuty.** Spúšťajte incidenty pri kritických zlyhaniach úloh.
- **Vlastné panely.** Posielajte udalosti do vlastnej monitorovacej infraštruktúry.
- **Auditná stopa.** Posielajte udalosti do externej služby na zaznamenávanie.
