adding telegram notifications
Deploy / deploy (push) Successful in 8s

This commit is contained in:
2026-05-06 18:25:15 +02:00
parent 08df9bfe5c
commit e203aac2f5
5 changed files with 177 additions and 1 deletions
+60
View File
@@ -306,6 +306,23 @@ pre.raw-line { background: var(--bs-tertiary-bg); padding: .75rem; border-radius
<small id="tokenSaveStatus" class="ms-2"></small>
</div>
</div>
<div class="card mb-3">
<div class="card-header"><i class="bi bi-telegram me-1"></i>Telegram Notifications</div>
<div class="card-body">
<p class="small text-secondary">Send alerts to a Telegram chat via a bot.</p>
<div class="mb-2">
<label class="form-label">Bot Token</label>
<input type="text" class="form-control" id="telegramBotToken" placeholder="123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11">
</div>
<div class="mb-2">
<label class="form-label">Chat ID</label>
<input type="text" class="form-control" id="telegramChatId" placeholder="-1001234567890">
</div>
<button class="btn btn-primary btn-sm" id="saveTelegramBtn"><i class="bi bi-floppy"></i> Save</button>
<small id="telegramSaveStatus" class="ms-2"></small>
<button class="btn btn-outline-secondary btn-sm ms-2" id="testTelegramBtn"><i class="bi bi-send"></i> Test</button>
</div>
</div>
<div class="card">
<div class="card-header"><i class="bi bi-info-circle me-1"></i>How to get your user token</div>
<div class="card-body small">
@@ -873,6 +890,12 @@ async function loadSettings() {
const tokens = res.tokens || [];
document.getElementById('allowedTokensInput').value = tokens.join('\n');
} catch (e) { console.error('load tokens error', e); }
try {
const res = await api('/config/telegram');
document.getElementById('telegramBotToken').value = res.bot_token || '';
document.getElementById('telegramChatId').value = res.chat_id || '';
} catch (e) { console.error('load telegram error', e); }
}
document.getElementById('saveTokensBtn').addEventListener('click', async () => {
@@ -897,6 +920,43 @@ document.getElementById('saveTokensBtn').addEventListener('click', async () => {
}
});
document.getElementById('saveTelegramBtn').addEventListener('click', async () => {
const botToken = document.getElementById('telegramBotToken').value.trim();
const chatId = document.getElementById('telegramChatId').value.trim();
const statusEl = document.getElementById('telegramSaveStatus');
statusEl.textContent = 'Saving...';
statusEl.className = 'ms-2 text-secondary';
try {
await api('/config/telegram', {
method: 'PUT',
body: JSON.stringify({ bot_token: botToken, chat_id: chatId }),
});
statusEl.textContent = 'Saved';
statusEl.className = 'ms-2 text-success';
toast('Telegram config saved');
setTimeout(() => { statusEl.textContent = ''; }, 3000);
} catch (e) {
statusEl.textContent = 'Failed';
statusEl.className = 'ms-2 text-danger';
toast('Failed to save Telegram config', 'danger');
}
});
document.getElementById('testTelegramBtn').addEventListener('click', async () => {
const btn = document.getElementById('testTelegramBtn');
btn.disabled = true;
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span> Sending...';
try {
await api('/ingest', {
method: 'POST',
body: JSON.stringify({ line: 'Jakach Logging: test notification from settings', source: 'test' }),
});
toast('Test alert sent. Check Telegram.');
} catch (e) { toast('Failed to send test', 'danger'); }
btn.disabled = false;
btn.innerHTML = '<i class="bi bi-send"></i> Test';
});
// --- LOGS ---
async function loadLogs(query) {
if (!query) {