Add Telegram mobile replies

This commit is contained in:
rajchales-monito
2026-07-30 10:41:18 +02:00
parent c85d032a6d
commit d239131741
4 changed files with 317 additions and 2 deletions
+58
View File
@@ -97,6 +97,13 @@ $("#openaiApiKey").addEventListener("input", markAiSettingsDirty);
$("#refreshAiModels").addEventListener("click", loadAiModels);
$("#saveAiSettings").addEventListener("click", saveTranslationSettings);
$("#testOpenAiKey").addEventListener("click", testOpenAiKey);
$("#telegramEnabled").addEventListener("change", markTelegramSettingsDirty);
$("#telegramOperatorName").addEventListener("input", markTelegramSettingsDirty);
$("#telegramBotToken").addEventListener("input", markTelegramSettingsDirty);
$("#telegramChatId").addEventListener("input", markTelegramSettingsDirty);
$("#telegramWebhookSecret").addEventListener("input", markTelegramSettingsDirty);
$("#saveTelegramSettings").addEventListener("click", saveTelegramSettings);
$("#testTelegram").addEventListener("click", testTelegram);
$("#adminUserForm").addEventListener("submit", createAdminUser);
$("#adminUsersList").addEventListener("click", handleAdminUserClick);
document.querySelectorAll("[data-settings-tab]").forEach((button) => {
@@ -473,6 +480,7 @@ function renderSite() {
? `Klic ulozeny (${s.translations.openaiApiKeyMasked || "sk-..."})`
: "Klic neni ulozeny. Bez nej AI preklady nepobezi.";
renderModelOptions(s.translations?.model || "gpt-5-mini");
renderTelegramSettings(s.telegram || {});
}
function renderWidgetLanguageOptions(form, settings) {
@@ -707,6 +715,56 @@ function setOpenAiStatus(message) {
$("#openaiApiKeyStatus").textContent = message;
}
function renderTelegramSettings(settings) {
$("#telegramEnabled").checked = Boolean(settings.enabled);
$("#telegramOperatorName").value = settings.operatorName || "Alex";
$("#telegramBotToken").value = "";
$("#telegramChatId").value = settings.chatId || "";
$("#telegramWebhookSecret").value = settings.webhookSecret || "";
$("#telegramWebhookUrl").value = settings.webhookUrl || "";
setTelegramStatus(settings.hasBotToken
? `Token ulozeny (${settings.botTokenMasked || "token..."})`
: "Token neni ulozeny. Bez nej Telegram nepobezi.");
}
function markTelegramSettingsDirty() {
setTelegramStatus("Telegram nastaveni ma neulozene zmeny.");
}
async function saveTelegramSettings() {
if (!state.site) return;
setTelegramStatus("Ukladam Telegram...");
const settings = structuredClone(state.site.settings);
settings.telegram = {
...(settings.telegram || {}),
enabled: $("#telegramEnabled").checked,
chatId: $("#telegramChatId").value.trim(),
webhookSecret: $("#telegramWebhookSecret").value.trim(),
operatorName: $("#telegramOperatorName").value.trim() || "Alex"
};
const botToken = $("#telegramBotToken").value.trim();
if (botToken) settings.telegram.botToken = botToken;
await saveSite({ settings, isOnline: state.site.isOnline });
$("#telegramBotToken").value = "";
renderTelegramSettings(state.site.settings.telegram || {});
}
async function testTelegram() {
await saveTelegramSettings();
setTelegramStatus("Posilam test Telegramu...");
const result = await api("/api/admin/telegram/test", { method: "POST" }).catch((error) => error);
if (result?.ok) {
if (result.webhookUrl) $("#telegramWebhookUrl").value = result.webhookUrl;
setTelegramStatus("Telegram funguje. Testovaci zprava odeslana a webhook nastaven.");
return;
}
setTelegramStatus(`Telegram test selhal: ${shortErrorMessage(result?.message || result?.error || "neznamá chyba")}`);
}
function setTelegramStatus(message) {
$("#telegramStatus").textContent = message;
}
async function loadAiModels() {
const current = $("#translationModel").value || state.site?.settings?.translations?.model || "gpt-5-mini";
const data = await api("/api/admin/ai/models").catch((error) => error?.models ? error : null);