> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.erlcrussia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Вебхук Событий

Чтобы получать вебхуки из игры:

1. Введите `/вебхук управление` на нашем Discord-сервере.
2. В появившемся меню укажите URL вашего **кастомного** вебхука.&#x20;
3. Прежде чем нажимать кнопку «Добавить», обязательно нажмите кнопку «Проверить».
   * Система отправит тестовое сообщение. Если оно пришло — значит, всё настроено верно и вебхук можно смело пускать в работу.
4. После успешной проверки нажмите кнопку «Добавить», чтобы активировать получение данных.

<Danger>
  **Мы НЕ поддерживаем прямые вебхуки Discord. Система работает исключительно с кастомными вебхуками (вашими собственными обработчиками).**
</Danger>

Ваш эндпоинт обязан проверять Ed25519 подписи на каждом запросе. Игра сохранит только те URL, которые пройдут проверку.

***

### Требования

#### Ваш эндпоинт должен принимать

* `POST` запросы с JSON телом.
* Эти заголовки на каждом подписанном запросе:
  * `X-Signature-Ed25519` (hex-кодированная Ed25519 подпись).
  * `X-Signature-Timestamp` (строка Unix timestamp).

#### Ваш Эндпоинт Должен:

1. Прочитать **сырые байты тела запроса** точно в том виде, в котором они получены (не сериализуйте JSON заново).
2. Прочитать `X-Signature-Timestamp`.
3. Прочитать `X-Signature-Ed25519`.
4. Проверить подпись для:

   `message = timestamp + raw_body`

   Где `timestamp` — это значение заголовка в виде строки, объединённое напрямую с сырыми байтами тела.
5. Вернуть:
   * **2xx** только если подпись верна.
   * **4xx** если заголовки отсутствуют, неверны или проверка подписи не удалась.

***

### Публичный Ключ

Используйте этот Ed25519 публичный ключ (base64, SubjectPublicKeyInfo / SPKI):

```
MCowBQYDK2VwAyEArbRTkyh3A035YUWWZdyF3vck4QN3I7uU8cp7YaxocFE=
```

***

### Детали Реализации

#### Входные Данные

* `timestamp`: точная строка из `X-Signature-Timestamp`.
* `sigHex`: точная строка из `X-Signature-Ed25519` (hex).
* `rawBody`: сырые байты тела запроса.

#### Шаги

1. Декодируйте `sigHex` из hex в байты.
2. Постройте `message` как:
   * Байты `timestamp` в UTF-8
   * Сразу следом `rawBody`
3. Проверьте Ed25519 подпись с помощью публичного ключа выше.

#### Распространённые Ошибки

* Не используйте распарсенный JSON объект для проверки. Используйте только сырые байты тела.
* Не добавляйте разделители или пробелы между timestamp и телом.
* Обрабатывайте подпись как hex, а не base64.
* Убедитесь, что ваш фреймворк не поглощает тело до того, как вы его захватите.

***

### Какие события отправляются?

В настоящее время игра отправляет вебхуки для:

* Сообщений, начинающихся с **;**
  * Это позволяет создавать собственные внутриигровые команды!
* Emergency Calls (Экстренные Вызовы)

В будущем могут быть добавлены новые события. Обратите внимание: система вебхуков не предназначена для замены опроса HTTP API или WebSocket.
