# Webhooks

Настройте Webhooks, чтобы получать уведомления на свой сервер о событиях в Taddy.

### Список событий

В настоящий момент поддерживаются следующие события:

* **Обмен трафиком**: пользователь получен (incoming)
* **Обмен трафиком**: пользователь отправлен (outgoing)
* **Реклама**: показ объявления (impression)
* **Реклама**: просмотр объявления (view-through)
* **Кастомное событие** (custom event)

### Область действия

Webhook может быть **глобальным** на всё рабочее пространство или же срабатывать **по фильтрам** (можно настроить список ресурсов или рекламных кампаний, связанные с которыми события будут триггерить срабатывание webhook'ов)

### Политика доставки и повторов

После отправки запроса на ваш сервер, Taddy ожидает от вашего сервера код ответа `2xx`, чтобы считать доставку уведомления успешной. Любой другой код — считается ошибкой и запускает политику повторной доставки. Последующие запросы будут отправляться с нарастающим интервалом.&#x20;

* Максимальное число попыток — 30
* Максимальный период доставки — 24 часа
* Максимальное время подключения к серверу — 5 сек.
* Максимальное время ожидания ответа — 30 сек.

Каждое уведомление имеет уникальный идентификатор и отправляется в заголовке запроса `X-Taddy-Event-Id`. Вы можете использовать его для дедупликации уведомлений.

#### Другие полезные заголовки

* `X-Taddy-Event-Id` — уникальный идентификатор события
* `X-Taddy-Event-Date` — дата события
* `X-Taddy-Attempt` — номер попытки доставки уведомления
* `X-Taddy-Sign` — контрольная сумма (подпись) уведомления (подробнее ниже)

### Проверка подлинности уведомления

Для верификации используется контрольная сумма (подпись) уведомления. Значение передается в заголовке `X-Taddy-Sign` и может быть проверено следующим алгоритмом:

```typescript
SHA1 ( ID + URL + BODY + KEY )
```

Где:&#x20;

* **ID** — уникальный идентификатор события. Из заголовка `X-Taddy-Event-Id`\
  Например:  `b9a63e8e-9401-42cc-8c1a-5a7a9658eb51`
* **URL** — полный URL начиная с https:// и заканчивая всеми query-параметрами\
  Например: `https://myserver.com/webhook?id=1234&user=4321&score=1.2`
* **BODY** — все тело запроса (при его наличии, в противном случае — опускается)\
  Например: `{"id":1234,"user":4321,"score":1.2}`
* **KEY** — приватный ключ рабочего пространства (пока выдается через тех.поддержку)\
  Например: `b537ba63622c815a38ec8997eb45f902` &#x20;

Проверка заключается в сравнении заголовка подписи, с той контрольной суммой, что вы вычислили. Если они совпадают — значит уведомление отправлено Taddy и ему можно верить.

### Отладка работы

Вы можете включить журнал для вашего webhook, чтобы записывать все запросы Taddy и ответы вашего сервера. По умолчанию **ведение журнала отключено**.

Используйте журнал только для отладки работы и отключайте его по завершении отладки. Ведение подробного журнала может оказать негативное влияние на производительность системы Webhooks на большом количестве событий.

Записи в журнале хранятся 3 дня.
