
# Webhooki

Queuety może wysyłać powiadomienia POST HTTP do zewnętrznych adresów URL, gdy wystąpią określone zdarzenia. Używaj webhooków do integracji z systemami monitorowania, Slack lub własnymi pulpitami nawigacyjnymi.

## Obsługiwane zdarzenia

| Zdarzenie | Występuje, gdy |
|---|---|
| `job.completed` | Zwykłe zadanie handlera lub klasa `Contracts\Job` kończy się powodzeniem (zdarzenie nie jest wywoływane dla kroków przepływu pracy ani akcji maszyn stanów) |
| `job.failed` | Próba zgłasza wyjątek i zaplanowano ponowienie |
| `job.buried` | Wyczerpano wszystkie próby ponowienia zadania |
| `workflow.failed` | Krok przepływu pracy kończy się niepowodzeniem i nie będzie ponawiany |

## Rejestrowanie webhooków

Za pomocą PHP:

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

Za pomocą CLI:

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

## Wyświetlanie webhooków

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

```bash
wp queuety webhook list
```

## Usuwanie webhooków

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

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

## Format ładunku

Gdy wystąpi zdarzenie, Queuety wysyła żądanie POST HTTP z treścią w formacie JSON. Ładunek ma zawsze następującą postać:

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

W przypadku niepowodzeń przepływu pracy:

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

Dostarczanie webhooków odbywa się bez gwarancji powodzenia. Worker wysyła żądanie kolejno do każdego zarejestrowanego URL, z jednsekundowym limitem czasu przesyłania danych, i ignoruje błędy dostarczenia. Powolny punkt końcowy może więc kosztować workera do około sekundy na każde URL, ale nigdy nie powoduje niepowodzenia zadania.

## Zastosowania

- **Slack alerty.** Otrzymuj powiadomienia, gdy zadania zostaną odłożone do archiwum lub przepływy pracy zakończą się niepowodzeniem.
- **PagerDuty integracja.** Wywołuj incydenty w przypadku krytycznych awarii zadań.
- **Własne pulpity.** Przesyłaj zdarzenia do własnej infrastruktury monitorującej.
- **Ścieżka audytu.** Przekazuj zdarzenia do zewnętrznej usługi rejestrowania.
