
# Уебкуки

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.** Създавайте инциденти при критични откази на задачи.
- **Персонализирани табла.** Изпращайте събития към собствената си инфраструктура за наблюдение.
- **Одитна следа.** Препращайте събития към външна услуга за регистриране.
