// Telegram Bot Webhook Handler // POST /api/telegram-webhook // Принимает вебхуки от Telegram и обрабатывает команды import { NextRequest, NextResponse } from 'next/server'; import { logger } from '@/lib/logger'; const BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN || ''; const WEBAPP_URL = process.env.NEXT_PUBLIC_APP_URL || 'https://app.umbrix.net'; interface TelegramUpdate { message?: { message_id: number; from: { id: number; first_name: string; last_name?: string; username?: string; }; chat: { id: number; }; text?: string; }; } interface InlineKeyboardButton { text: string; web_app?: { url: string }; url?: string; } async function sendMessage( chatId: number, text: string, replyMarkup?: { inline_keyboard: InlineKeyboardButton[][] } ) { const url = `https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`; const body = { chat_id: chatId, text: text, parse_mode: 'HTML', reply_markup: replyMarkup, }; try { const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }); if (!response.ok) { logger.error('Telegram API error:', await response.text()); } } catch (error) { logger.error('Failed to send Telegram message:', error); } } export async function POST(request: NextRequest) { try { const update: TelegramUpdate = await request.json(); logger.debug('📨 Telegram webhook received:', update); if (!update.message || !update.message.text) { return NextResponse.json({ ok: true }); } const { message } = update; const { chat, from } = message; const text = message.text!; // Обработка команды /start if (text.startsWith('/start')) { const parts = text.split(' '); const startParam = parts[1]; // Например: "ref_john_doe" let webAppUrl = WEBAPP_URL; let welcomeText = `👋 Привет, ${from.first_name}!\n\n`; // Если есть реферальный параметр if (startParam && startParam.startsWith('ref_')) { const referrerId = startParam.replace('ref_', ''); webAppUrl = `${WEBAPP_URL}?ref=${encodeURIComponent(referrerId)}`; welcomeText += `🎁 Вы перешли по реферальной ссылке от ${referrerId}!\n\n`; welcomeText += `При регистрации вы получите:\n`; welcomeText += `✅ 7 дней бесплатно\n`; welcomeText += `✅ А ваш друг получит +7 дней к подписке!\n\n`; logger.info(`🎁 Referral link opened: ${from.id} -> ${referrerId}`); } else { welcomeText += `🚀 Umbrix VPN - быстрый и безопасный VPN!\n\n`; welcomeText += `✅ Надежная защита данных\n`; welcomeText += `✅ Высокая скорость соединения\n`; welcomeText += `✅ Простая настройка\n\n`; } welcomeText += `Нажмите кнопку ниже, чтобы начать:`; const keyboard = { inline_keyboard: [ [ { text: '🚀 Открыть Umbrix', web_app: { url: webAppUrl }, }, ], ], }; await sendMessage(chat.id, welcomeText, keyboard); return NextResponse.json({ ok: true }); } // Обработка других команд if (text === '/help') { const helpText = ` Доступные команды: /start - Открыть приложение /help - Показать эту справку /referral - Получить свою реферальную ссылку Как получить реферальную ссылку? 1. Откройте приложение 2. Перейдите в раздел "Реферальная программа" 3. Скопируйте ссылку и отправьте друзьям! Условия реферальной программы: • За каждого друга: +7 дней бесплатно • За 5 друзей: 1 месяц в подарок • При оплате: 10% скидка `; await sendMessage(chat.id, helpText.trim()); return NextResponse.json({ ok: true }); } if (text === '/referral') { const referralText = ` 🎁 Ваша реферальная ссылка: Чтобы получить ссылку, откройте приложение и перейдите в раздел "Пригласить друга". Там вы найдете свою уникальную ссылку и сможете поделиться ей! `; const keyboard = { inline_keyboard: [ [ { text: '🚀 Открыть приложение', web_app: { url: WEBAPP_URL }, }, ], ], }; await sendMessage(chat.id, referralText.trim(), keyboard); return NextResponse.json({ ok: true }); } // Неизвестная команда await sendMessage( chat.id, 'Неизвестная команда. Используйте /help для списка команд.' ); return NextResponse.json({ ok: true }); } catch (error) { logger.error('❌ Telegram webhook error:', error); return NextResponse.json( { ok: false, error: 'Internal server error' }, { status: 500 } ); } } // Для проверки что webhook работает export async function GET() { return NextResponse.json({ status: 'ok', message: 'Telegram webhook endpoint is running' }); }