Features: - Multi-channel notifications (Email + Telegram) - User-configurable notification settings per channel - Telegram bot integration with rich messages, location pins, and inline buttons - QR code generation for easy bot access (@myidbot support) - Admin UI for notification settings management - Test functionality for Telegram connection - Comprehensive documentation Implementation: - lib/telegram-service.ts: Telegram API integration - lib/notification-settings-db.ts: Database layer for user notification preferences - lib/geofence-notifications.ts: Extended for parallel multi-channel delivery - API routes for settings management and testing - Admin UI with QR code display and step-by-step instructions - Database table: UserNotificationSettings Documentation: - docs/telegram.md: Technical implementation guide - docs/telegram-anleitung.md: User guide with @myidbot instructions - docs/telegram-setup.md: Admin setup guide - README.md: Updated NPM scripts section Docker: - Updated Dockerfile to copy public directory - Added TELEGRAM_BOT_TOKEN environment variable - Integrated notification settings initialization in db:init 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { auth } from '@/lib/auth';
|
|
import { telegramService } from '@/lib/telegram-service';
|
|
import { getUserNotificationSettings } from '@/lib/notification-settings-db';
|
|
|
|
// POST /api/users/[id]/notification-settings/test
|
|
export async function POST(
|
|
request: Request,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
const session = await auth();
|
|
if (!session?.user) {
|
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
}
|
|
|
|
const { id: userId } = await params;
|
|
const currentUserId = (session.user as any).id;
|
|
|
|
if (userId !== currentUserId) {
|
|
return NextResponse.json({ error: 'Forbidden' }, { status: 403 });
|
|
}
|
|
|
|
const settings = getUserNotificationSettings(userId);
|
|
|
|
if (!settings.telegram_chat_id) {
|
|
return NextResponse.json(
|
|
{ error: 'No Telegram chat ID configured' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const success = await telegramService.testConnection(
|
|
settings.telegram_chat_id
|
|
);
|
|
|
|
if (success) {
|
|
return NextResponse.json({ success: true, message: 'Test message sent' });
|
|
} else {
|
|
return NextResponse.json(
|
|
{ error: 'Failed to send test message' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
} catch (error) {
|
|
console.error('[POST /api/users/[id]/notification-settings/test]', error);
|
|
return NextResponse.json(
|
|
{ error: 'Failed to send test message' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|