Ссылка на бота: верный username (@pdf2scan_pybot) + открытие приложения через tg://

- футер сайта вёл на несуществующий @pdf2scan_bot (t.me не резолвил) → @pdf2scan_pybot
- клик по ссылке открывает приложение (tg://resolve) с откатом на веб t.me
- логин на /developers тоже открывает приложение (d.url = tg://), а не браузер

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
berkio_admin_gitea
2026-07-08 07:51:20 +00:00
parent 7ba8f78dd8
commit cd33b0b391
2 changed files with 26 additions and 2 deletions

View File

@@ -2854,7 +2854,8 @@ _API_DOCS_HTML = """<!DOCTYPE html>
var r = await fetch('/api/auth/token', {method:'POST'}); var r = await fetch('/api/auth/token', {method:'POST'});
var d = await r.json(); var d = await r.json();
var token = d.token; var token = d.token;
window.open('https://t.me/' + BOT + '?start=webauth_' + token, '_blank'); // d.url = tg://resolve?... — открывает приложение напрямую; https-ссылка как запасной вариант
window.open(d.url || ('https://t.me/' + BOT + '?start=webauth_' + token), '_blank');
setStatus('Откройте Telegram-бота и нажмите Start — ключ появится здесь автоматически...'); setStatus('Откройте Telegram-бота и нажмите Start — ключ появится здесь автоматически...');
var tries = 0; var tries = 0;
pollTimer = setInterval(async function(){ pollTimer = setInterval(async function(){

View File

@@ -1237,7 +1237,7 @@
<!--SEO_FAQ--> <!--SEO_FAQ-->
<footer> <footer>
pdf2scan &mdash; <span data-i18n="footer_text">превращаем PDF в скан</span> &nbsp;|&nbsp; <a href="https://t.me/pdf2scan_bot" style="color:var(--blue); text-decoration:none;" data-i18n="footer_tg">Telegram-бот</a> &nbsp;|&nbsp; <a href="/developers" style="color:var(--blue); text-decoration:none;" data-i18n="footer_api">API для бизнеса</a> &nbsp;|&nbsp; <a href="#" onclick="showDonateCard(false);document.getElementById('donate-card').scrollIntoView({behavior:'smooth'});return false;" style="color:var(--blue); text-decoration:none;" data-i18n="footer_donate">🍩 Поддержать</a> &nbsp;|&nbsp; <a href="/offer" style="color:var(--blue); text-decoration:none;" data-i18n="footer_offer">Оферта</a> pdf2scan &mdash; <span data-i18n="footer_text">превращаем PDF в скан</span> &nbsp;|&nbsp; <a href="https://t.me/pdf2scan_pybot" onclick="return openBot(event)" style="color:var(--blue); text-decoration:none;" data-i18n="footer_tg">Telegram-бот</a> &nbsp;|&nbsp; <a href="/developers" style="color:var(--blue); text-decoration:none;" data-i18n="footer_api">API для бизнеса</a> &nbsp;|&nbsp; <a href="#" onclick="showDonateCard(false);document.getElementById('donate-card').scrollIntoView({behavior:'smooth'});return false;" style="color:var(--blue); text-decoration:none;" data-i18n="footer_donate">🍩 Поддержать</a> &nbsp;|&nbsp; <a href="/offer" style="color:var(--blue); text-decoration:none;" data-i18n="footer_offer">Оферта</a>
</footer> </footer>
<script> <script>
@@ -2878,6 +2878,29 @@
_authToken = null; _authToken = null;
} }
// ── Открыть Telegram-бота ─────────────────────────────────────────────────
// Пытаемся открыть приложение напрямую (tg://), а если оно не перехватило
// переход (не установлено) — через ~1.1 c откатываемся на веб-версию t.me.
function openBot(e) {
try { if (e) e.preventDefault(); } catch (_) {}
var appUrl = 'tg://resolve?domain=pdf2scan_pybot';
var webUrl = 'https://t.me/pdf2scan_pybot';
var opened = false;
function markOpened() { if (document.hidden) opened = true; } // приложение открылось → вкладка спряталась
function onBlur() { opened = true; }
document.addEventListener('visibilitychange', markOpened);
window.addEventListener('blur', onBlur);
window.addEventListener('pagehide', onBlur);
try { window.location.href = appUrl; } catch (_) {}
setTimeout(function () {
document.removeEventListener('visibilitychange', markOpened);
window.removeEventListener('blur', onBlur);
window.removeEventListener('pagehide', onBlur);
if (!opened) window.location.href = webUrl; // приложения нет — открываем веб
}, 1100);
return false;
}
// ── Инициализация ───────────────────────────────────────────────────────── // ── Инициализация ─────────────────────────────────────────────────────────
tgUser = loadSavedAuth(); tgUser = loadSavedAuth();
renderHeaderAuth(); renderHeaderAuth();