
# Webhooks

Queuety kan sende HTTP POST-notifikationer til eksterne URL'er, når bestemte hændelser indtræffer. Brug webhooks til at integrere med overvågningssystemer, Slack eller brugerdefinerede dashboards.

## Understøttede hændelser

| Hændelse | Udløses når |
|---|---|
| `job.completed` | Et almindeligt handler-job eller en `Contracts\Job`-klasse afsluttes uden fejl (udløses ikke for workflowtrin eller tilstandsmaskinehandlinger) |
| `job.failed` | Et forsøg udløser en fejl, og et nyt forsøg planlægges |
| `job.buried` | Et job opbruger alle sine forsøg på genkørsel |
| `workflow.failed` | Et workflowtrin fejler permanent |

## Registrering af webhooks

Via PHP:

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

Via CLI:

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

## Vis webhooks

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

```bash
wp queuety webhook list
```

## Fjern webhooks

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

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

## Nyttelastformat

Når en hændelse udløses, sender Queuety en HTTP POST-anmodning med en JSON-body. Nyttelasten har altid denne form:

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

Ved workflowfejl:

```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"
}
```

Levering af webhooks sker efter bedste evne. Workeren sender en anmodning til hvert registreret URL efter tur med en stream-timeout på ét sekund og ignorerer leveringsfejl. Et langsomt endpoint koster derfor workeren op til cirka ét sekund pr. URL, men får aldrig jobbet til at fejle.

## Anvendelsesområder

- **Slack-alarmer.** Få besked, når jobs sættes til side, eller workflows fejler.
- **PagerDuty-integration.** Udløs hændelser for kritiske jobfejl.
- **Brugerdefinerede dashboards.** Send hændelser til din egen overvågningsinfrastruktur.
- **Revisionsspor.** Videresend hændelser til en ekstern logningstjeneste.
