Changes for page 05_Вебхуки
Last modified by Bimit Administrator on 13.03.2026, 16:18
From version 2.2
edited by Bimit Administrator
on 13.03.2026, 15:48
on 13.03.2026, 15:48
Change comment:
There is no comment for this version
To version 2.1
edited by Bimit Administrator
on 13.03.2026, 14:15
on 13.03.2026, 14:15
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,165 +1,0 @@ 1 -Webhook - это механизм автоматического оповещения вашей системы о событиях, происходящих в проектах вашей организации. 2 - 3 -Webhook отправляется **HTTP POST запросом** на URL, указанный в настройках организации. 4 - 5 - 6 -=== //**Заголовки запроса**// === 7 - 8 -|=(% style="width: 340px;" %)Header|=(% style="width: 1151px;" %)Описание 9 -|(% style="width:340px" %)Content-Type|(% style="width:1151px" %)application/json 10 -|(% style="width:340px" %){{{X-Idempotency-Key}}}|(% style="width:1151px" %)Ключ идемпотентности 11 -|(% style="width:340px" %){{{X-HMAC-Spec}}}|(% style="width:1151px" %)(% style="width:1225px" %)Код проверки подлинности сообщений 12 - 13 -//**Пример**// 14 - 15 -((( 16 -Content-Type: application/json 17 -))) 18 - 19 -((( 20 -X-Idempotency-Key: c0a80108-9ce6-1d7f-819c-e66fc6cc0001 21 -))) 22 - 23 -((( 24 -X-HMAC-Spec:698e2329aa17f15e049694e87425f1a2a1c27271d9d472c377422d57d7c779ec 25 -))) 26 - 27 -((( 28 - 29 - 30 -==== //**X-Idempotency-Key**// ==== 31 - 32 -Содержит **уникальный идентификатор события**. 33 - 34 -((( 35 -**Зачем это нужно** 36 -))) 37 - 38 -Webhook может быть отправлен **несколько раз**, например если: 39 - 40 -* endpoint **вернул не 200** 41 -* произошёл сетевой сбой 42 -* клиент долго отвечал **(более 30 секунд)** 43 - 44 -Чтобы избежать **дублирования обработки**, сервер получателя должен: 45 - 46 -1. сохранить X-Idempotency-Key 47 -1. проверять его при каждом запросе 48 -1. игнорировать уже обработанные события 49 - 50 -==== //**X-HMAC-Spec**// ==== 51 - 52 -Используется **для проверки подлинности webhook**. Подпись создаётся с использованием **HMAC SHA256.** 53 - 54 -//Алгоритм~:// 55 - 56 -signature = HMAC_SHA256(secret, requestBody) 57 - 58 -где: 59 - 60 -* secret — токен организации 61 -* requestBody — raw JSON webhook payload 62 - 63 -Перед вычислением подписи JSON проходит **нормализацию**, чтобы обеспечить одинаковый результат хеширования на разных платформах. 64 - 65 -((( 66 -**Нормализация JSON** 67 -))) 68 - 69 -Перед вычислением HMAC выполняются следующие правила: 70 - 71 -1. **Поля объектов сортируются в алфавитном порядке** 72 -1. Используется **компактный JSON** 73 -1. **Удаляются все пробелы и переносы строк** 74 -1. Используется стандартная кодировка **UTF-8** 75 - 76 -Это гарантирует, что одинаковый payload всегда создаёт **одинаковую подпись** независимо от реализации клиента. 77 -))) 78 - 79 -((( 80 -((( 81 -//**Рекомендации для получателя webhook**// 82 -))) 83 - 84 -Для корректной проверки подписи рекомендуется: 85 - 86 -1. Вычислить HMAC SHA256 либо у **raw тела запроса,** либо выполнить **такую же нормализацию JSON** 87 -1. Сравнить результат с //**X-HMAC-Spec**// 88 - 89 -Если подпись не совпадает - запрос следует считать **недоверенным**. 90 -))) 91 - 92 -((( 93 - 94 - 95 -=== //**Тело запроса**// === 96 - 97 -Webhook отправляется в формате **JSON**. 98 - 99 -Пример: 100 - 101 -{ 102 - "author" : "Администратор", 103 - "data" : { 104 - "header" : "Модель(и) отключена(ы)" 105 - }, 106 - "event" : "model_is_off", 107 - "project" : "01 checks", 108 - "target" : "Администратор", 109 -} 110 -))) 111 - 112 -((( 113 -==== **Поля payload** ==== 114 - 115 -|=Поле|=Тип|=Описание 116 -|author|string|автор события 117 -|data|object|дополнительные данные события 118 -|event|string|тип события 119 -|project|string|проект, в котором произошло событие 120 -|target|string|пользователь, кому адресовано уведомление 121 - 122 -=== === 123 - 124 -=== //**Ожидаемый ответ**// === 125 - 126 -Webhook считается **успешно доставленным**, если endpoint возвращает: 127 - 128 -{{{ HTTP 200 OK}}} 129 - 130 -Любой **другой HTTP код считается ошибкой доставки.** 131 - 132 - 133 -=== //**Повторные попытки (Retry)**// === 134 - 135 -Если endpoint возвращает: 136 - 137 -* любой код ≠ **200** 138 -* или происходит сетевой сбой 139 -* клиент долго отвечал **(более 30 секунд)** 140 - 141 -система автоматически повторит отправку. 142 - 143 -Интервалы повторов: 144 - 145 -|=Попытка|=Задержка 146 -|1|30 секунд 147 -|2|60 секунд 148 -|3|120 секунд 149 - 150 -После всех попыток webhook считается **недоставленным**. 151 - 152 - 153 -=== //**Требования к endpoint**// === 154 - 155 -Endpoint должен: 156 - 157 -* принимать **HTTP POST** 158 -* обрабатывать **JSON** 159 -* возвращать **200 OK**, если webhook успешно обработан 160 -* отвечать не дольше **30 секунд** 161 -))) 162 - 163 -((( 164 - 165 -)))