
# Вебхуки

Queuety може надсилати сповіщення HTTP методом POST на зовнішні URL-адреси під час виникнення певних подій. Використовуйте вебхуки для інтеграції із системами моніторингу, Slack або власними панелями керування.

## Підтримувані події

| Подія | Коли спрацьовує |
|---|---|
| `job.completed` | Звичайне завдання обробника або клас `Contracts\Job` успішно завершується (не спрацьовує для кроків робочих потоків або дій автоматів станів) |
| `job.failed` | Спроба завершується помилкою, і планується повторна спроба |
| `job.buried` | У завдання закінчуються всі спроби повторного виконання |
| `workflow.failed` | Крок робочого потоку остаточно завершується помилкою |

## Реєстрація вебхуків

Через 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
```

## Перелік вебхуків

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

```bash
wp queuety webhook list
```

## Видалення вебхуків

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

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

## Формат даних

Коли спрацьовує подія, Queuety надсилає запит POST HTTP із тілом JSON. Дані завжди мають таку структуру:

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

Доставка вебхуків виконується за принципом best effort. Робочий процес надсилає запит до кожного зареєстрованого URL по черзі з тайм-аутом потокового передавання в одну секунду та ігнорує помилки доставки. Повільна кінцева точка може затримати робочий процес приблизно на секунду для кожного URL, але завдання не завершується помилкою.

## Варіанти використання

- **Сповіщення Slack.** Отримуйте сповіщення, коли завдання переміщуються до відкладених або робочі потоки завершуються помилкою.
- **Інтеграція PagerDuty.** Створюйте інциденти у разі критичних помилок завдань.
- **Власні панелі керування.** Передавайте події до власної інфраструктури моніторингу.
- **Журнал аудиту.** Пересилайте події до зовнішньої служби журналювання.
