
# Webhooks

Queuety kan HTTP POST-meldingen naar externe URL's sturen wanneer bepaalde gebeurtenissen plaatsvinden. Gebruik webhooks voor integratie met monitoringsystemen, Slack of aangepaste dashboards.

## Ondersteunde gebeurtenissen

| Gebeurtenis | Wordt geactiveerd wanneer |
|---|---|
| `job.completed` | Een gewone handlertaak of klasse `Contracts\Job` succesvol wordt voltooid (wordt niet geactiveerd voor workflowstappen of toestandsmachineacties) |
| `job.failed` | Een poging een uitzondering veroorzaakt en er een nieuwe poging wordt gepland |
| `job.buried` | Een taak al zijn nieuwe pogingen heeft verbruikt |
| `workflow.failed` | Een workflowstap definitief mislukt |

## Webhooks registreren

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

## Webhooks weergeven

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

```bash
wp queuety webhook list
```

## Webhooks verwijderen

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

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

## Payloadindeling

Wanneer een gebeurtenis plaatsvindt, stuurt Queuety een POST-verzoek met HTTP en een body van JSON. De payload heeft altijd deze structuur:

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

Voor workflowfouten:

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

Webhookbezorging gebeurt op best-effortbasis. De worker verstuurt achtereenvolgens een verzoek naar elke geregistreerde URL, met een streamtime-out van één seconde, en negeert bezorgfouten. Een traag eindpunt kost de worker dus maximaal ongeveer één seconde per URL, maar laat de taak nooit mislukken.

## Toepassingen

- **Slack-waarschuwingen.** Ontvang een melding wanneer taken in de wacht worden gezet of workflows mislukken.
- **PagerDuty-integratie.** Activeer incidenten bij kritieke taakfouten.
- **Aangepaste dashboards.** Stuur gebeurtenissen door naar uw eigen monitoringinfrastructuur.
- **Audittrail.** Stuur gebeurtenissen door naar een externe logdienst.
