// Таймаут запроса в миллисекундах
const TIMEOUT_MS = 4000;

/**
* Функция для приёма вебхуков (POST)
*/
function doPost(e) {
return handleWebhook(e);
}

/**
* Функция для приёма GET-запросов (если HDE использует GET)
*/
function doGet(e) {
return handleWebhook(e);
}

/**
* Основная функция обработки вебхука
*/
function handleWebhook(e) {
const startTime = new Date().getTime();

// Пример парсинга JSON из HDE
let data;
try {
data = JSON.parse(e.postData?.contents || '{}');
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({status: 'error', message: 'Invalid JSON'}))
.setMimeType(ContentService.MimeType.JSON);
}

// Быстрая обработка (чтобы минимизировать задержку)
const response = processData(data);

// Проверяем таймаут
const elapsed = new Date().getTime() - startTime;
if (elapsed > TIMEOUT_MS) {
return ContentService.createTextOutput(JSON.stringify({status: 'timeout'}))
.setMimeType(ContentService.MimeType.JSON);
}

return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}

/**
* Минимальная обработка данных
*/
function processData(data) {
// Тут может быть любая логика, например:
// - логирование
// - фильтрация
// - быстрый ответ
return {
status: 'ok',
received: data
};
}

/**
* Функция для отправки POST в HDE (можно вызывать при необходимости)
*/
function sendWebhookToHDE(url, payload) {
try {
const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload),
muteHttpExceptions: true,
// Таймаут запроса 4 секунды
timeout: TIMEOUT_MS / 1000
};
const response = UrlFetchApp.fetch(url, options);
return response.getContentText();
} catch (err) {
return {status: 'error', message: err.message};
}
}