
# Веб-хуки

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

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

## Сценарии использования

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