
# Webhook

Το Queuety μπορεί να στέλνει ειδοποιήσεις HTTP POST σε εξωτερικά URL όταν προκύπτουν συγκεκριμένα συμβάντα. Χρησιμοποιήστε webhooks για ενσωμάτωση με συστήματα παρακολούθησης, Slack ή προσαρμοσμένους πίνακες ελέγχου.

## Υποστηριζόμενα συμβάντα

| Συμβάν | Ενεργοποιείται όταν |
|---|---|
| `job.completed` | Μια απλή εργασία χειριστή ή μια κλάση `Contracts\Job` ολοκληρωθεί με επιτυχία (δεν ενεργοποιείται για βήματα ροής εργασιών ή ενέργειες μηχανής κατάστασης) |
| `job.failed` | Μια προσπάθεια προκαλεί εξαίρεση και προγραμματίζεται επανάληψη |
| `job.buried` | Μια εργασία εξαντλήσει όλες τις προσπάθειες επανάληψης |
| `workflow.failed` | Ένα βήμα ροής εργασιών αποτύχει οριστικά |

## Καταχώριση webhooks

Μέσω του PHP:

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

Μέσω του 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

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

```bash
wp queuety webhook list
```

## Αφαίρεση webhooks

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

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

## Μορφή payload

Όταν ενεργοποιείται ένα συμβάν, το Queuety στέλνει ένα αίτημα HTTP POST με σώμα JSON. Το payload έχει πάντα την εξής μορφή:

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

Για αποτυχίες ροής εργασιών:

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

Η παράδοση webhook γίνεται με βέλτιστη προσπάθεια. Ο worker στέλνει ένα αίτημα POST σε κάθε καταχωρισμένο URL με τη σειρά, με χρονικό όριο ροής ενός δευτερολέπτου, και αγνοεί τις αποτυχίες παράδοσης. Έτσι, ένα αργό endpoint κοστίζει στον worker έως περίπου ένα δευτερόλεπτο ανά URL, αλλά δεν προκαλεί ποτέ αποτυχία της εργασίας.

## Περιπτώσεις χρήσης

- **Ειδοποιήσεις Slack.** Λάβετε ειδοποίηση όταν οι εργασίες θάβονται ή οι ροές εργασιών αποτυγχάνουν.
- **Ενσωμάτωση PagerDuty.** Ενεργοποιήστε περιστατικά για κρίσιμες αποτυχίες εργασιών.
- **Προσαρμοσμένοι πίνακες ελέγχου.** Μεταδώστε συμβάντα στη δική σας υποδομή παρακολούθησης.
- **Ίχνος ελέγχου.** Προωθήστε συμβάντα σε εξωτερική υπηρεσία καταγραφής.
