
# Webhookuri

Queuety poate trimite notificări HTTP POST către URL-uri externe atunci când au loc anumite evenimente. Folosiți webhookurile pentru integrarea cu sisteme de monitorizare, Slack sau tablouri de bord personalizate.

## Evenimente acceptate

| Eveniment | Se declanșează când |
|---|---|
| `job.completed` | Un job cu handler simplu sau o clasă `Contracts\Job` se încheie cu succes (nu se declanșează pentru pașii fluxurilor de lucru sau acțiunile mașinilor de stări) |
| `job.failed` | O încercare eșuează cu o excepție și este programată o reîncercare |
| `job.buried` | Un job își epuizează toate încercările de reîncercare |
| `workflow.failed` | Un pas al fluxului de lucru eșuează definitiv |

## Înregistrarea webhookurilor

Prin PHP:

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

Prin CLI:

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

## Listarea webhookurilor

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

```bash
wp queuety webhook list
```

## Eliminarea webhookurilor

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

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

## Formatul payloadului

Când se declanșează un eveniment, Queuety trimite o cerere HTTP POST cu un corp JSON. Payloadul are întotdeauna următoarea structură:

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

Pentru eșecurile fluxurilor de lucru:

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

Livrarea webhookurilor se face în limita posibilităților. Workerul trimite cereri către fiecare URL înregistrat, pe rând, cu un timeout de o secundă pentru fluxul de date, și ignoră eșecurile de livrare; astfel, un endpoint lent poate întârzia workerul cu până la aproximativ o secundă pentru fiecare URL, dar nu provoacă eșecul jobului.

## Cazuri de utilizare

- **Slack alerte.** Primiți notificări când joburile sunt îngropate sau fluxurile de lucru eșuează.
- **PagerDuty integrare.** Declanșați incidente pentru eșecurile critice ale joburilor.
- **Tablouri de bord personalizate.** Transmiteți evenimente către propria infrastructură de monitorizare.
- **Jurnal de audit.** Redirecționați evenimente către un serviciu extern de jurnalizare.
