Веб-приложение на чистом JavaScript (Vanilla JS) для отправки выделенного текста с сайта в Telegram-бот.
- 🎯 Выделение любого текста на странице
- 📱 Отправка в Telegram-бот одним кликом
- 📸 Опциональная отправка скриншота страницы
- 🔒 Безопасная передача данных через сервер
- 📱 Адаптивный дизайн
- 🚀 Современный JavaScript (ES6+)
git clone <repository-url>
cd telegram-text-sender
npm run setup # Установка зависимостей и создание .env- Откройте Telegram и найдите @BotFather
- Отправьте команду
/newbot - Следуйте инструкциям для создания бота
- Сохраните полученный токен бота
- Отправьте сообщение боту
- Откройте в браузере:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates - Найдите
"chat":{"id":...}в ответе - это ваш Chat ID
Отредактируйте файл .env (создан автоматически командой npm run setup):
BOT_TOKEN=ваш_токен_бота_здесь
CHAT_ID=ваш_chat_id_здесь
NODE_ENV=development
PORT=3001
MAX_RETRIES=3
REQUEST_TIMEOUT=30000npm startОткройте http://localhost:3001 в браузере.
telegram-text-sender/
├── src/ # Исходный код
│ ├── server.js # Node.js сервер
│ ├── app.js # Основная логика (клиент)
│ ├── config.js # Конфигурация (демо)
│ ├── middleware.js # Middleware
│ └── public/ # Статические файлы
│ ├── index.html # Основная HTML страница
│ ├── styles.css # Стили приложения
│ └── lib/ # Библиотеки
│ └── html2canvas.min.js
├── tests/ # Тестовые файлы
│ ├── test.html
│ ├── diag.html
│ ├── test-csp.html
│ └── assets/
├── config/ # Конфигурационные файлы
│ ├── docker-compose.yml
│ ├── Dockerfile
│ └── nodemon.json
├── docs/ # Документация
│ └── README.md
├── backups/ # Резервные копии
├── env-example.txt # Шаблон переменных окружения
├── package.json # Зависимости и скрипты
└── .gitignore # Исключаемые файлы
Отправка текстового сообщения
Параметры:
text(string, required): Выделенный текст (макс. 4096 символов)url(string, optional): URL страницыtimestamp(string, optional): Время отправки
Ответ:
{
"success": true,
"message_id": 123,
"processing_time": 245
}Отправка сообщения с изображением
Параметры:
text(string, required): Выделенный текстurl(string, optional): URL страницыtimestamp(string, optional): Время отправкиscreenshot(file, required): Скриншот страницы (макс. 10MB)
Ответ:
{
"success": true,
"message_id": 124,
"file_size": 245760,
"processing_time": 1250
}Проверка статуса сервера
Ответ:
{
"status": "ok",
"timestamp": "2025-12-30T05:00:00.000Z",
"uptime": 3600,
"config_valid": true,
"telegram_connected": true,
"bot_info": {
"username": "my_bot",
"first_name": "My Bot"
}
}Получение информации о боте
Тестовая отправка сообщения
- Выделите текст на странице стандартным способом (мышь или тач)
- Появится кнопка "📤 Отправить в Telegram" рядом с выделением
- Нажмите кнопку для отправки
- Опционально: включите скриншот в настройках
- Frontend: Vanilla JavaScript (ES6+)
- Backend: Node.js + Express
- Безопасность: Helmet, CORS, Rate Limiting
- Telegram API: Bot API с повторными попытками
- Файлы: Multer для обработки загрузок
- Скриншоты: html2canvas
- Контейнеризация: Docker + Docker Compose
- Мониторинг: Health checks, structured logging
- 🚫 Токены НЕ доступны на фронтенде - удалены из клиентского кода
- 🔐 Хранение только на сервере - в переменных окружения process.env
- 🚪 Блокировка чувствительных файлов - config.js, .env недоступны через HTTP
- 🔒 Защищенные API endpoints - только авторизованные запросы
- ✅ Валидация и санитизация входных данных
- 🛡️ CORS и Helmet для защиты заголовков
- 🚦 Rate limiting (100 запросов/15мин)
- 📁 Лимиты размера файлов (10MB)
- 🔄 Повторные попытки отправки с exponential backoff
- 🩺 Health checks для мониторинга
- 🔒 Graceful shutdown
- 📝 Content Security Policy (CSP) для предотвращения XSS
- 🚫 Origin validation для API запросов
# Сборка образа
docker build -t telegram-sender .
# Запуск контейнера
docker run -p 3001:3001 --env-file .env telegram-sender
# Или с Docker Compose
docker-compose up -d# В .env файле
BOT_TOKEN=your_token
CHAT_ID=your_chat_id
NODE_ENV=production- ✅ Chrome (последние 2 версии)
- ✅ Firefox (последние 2 версии)
- ✅ Edge (последние 2 версии)
⚠️ Safari (частичная поддержка скриншотов)
NODE_ENV=production
BOT_TOKEN=ваш_токен
CHAT_ID=ваш_chat_id
PORT=3001npm install -g pm2
pm2 start src/server.js --name telegram-sender
pm2 save
pm2 startupserver {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}npm run dev # с nodemon для авто-перезагрузки- Модифицируйте
src/app.jsдля клиентской логики - Добавьте API endpoints в
src/server.js - Обновите стили в
src/public/styles.css
- Проверьте токен бота в
.env - Убедитесь что бот добавлен в чат
- Проверьте Chat ID
- Проверьте загрузку html2canvas
- Проверьте CORS настройки
- Попробуйте в другом браузере
- Проверьте установку зависимостей:
npm install - Проверьте порт (может быть занят)
- Проверьте переменные окружения
MIT License - см. файл LICENSE для деталей.
Симптомы:
- Приложение пишет "Отправлено успешно"
- Но сообщения не появляются в Telegram
Возможные причины и решения:
-
Неправильный Chat ID:
# Получите правильный Chat ID: # 1. Напишите сообщение боту в Telegram # 2. Откройте: https://api.telegram.org/bot<ВАШ_BOT_TOKEN>/getUpdates # 3. Найдите "chat":{"id":...} в ответе
-
Бот не имеет доступа к чату:
- Убедитесь, что начали чат с ботом
- Бот должен быть добавлен в группу (если отправка в группу)
-
Проверьте токен бота:
curl https://api.telegram.org/bot<ВАШ_BOT_TOKEN>/getMe
-
Тестовая отправка:
curl -X POST http://localhost:3001/api/send-message \ -H "Content-Type: application/json" \ -d '{"text":"Тест от API"}'
Симптомы:
- Ошибка 503 при запросе к
/api/health - "Failed to load resource" для API endpoints
- content.js ошибки в консоли браузера
Решения:
-
Очистите кэш браузера:
# Chrome: Ctrl+Shift+R # Firefox: Ctrl+F5 # Safari: Cmd+Shift+R
-
Проверьте работу API:
curl http://localhost:3001/api/health
-
Используйте диагностическую страницу: Откройте:
http://localhost:3001/diag.html -
Перезапустите сервер:
npm start
-
Проверьте в приватном окне браузера
Симптомы:
- Ошибки "Cross origin requests are only supported for HTTP"
- "Failed to load resource: Через помилку TLS не вдалося встановити захищене зʼєднання"
Решения:
-
Всегда открывайте через HTTP сервер:
npm start # Затем в браузере: http://localhost:3001 -
Очистите кэш браузера:
- Chrome:
Ctrl+Shift+R - Firefox:
Ctrl+F5 - Safari:
Cmd+Shift+R
- Chrome:
-
Проверьте, что сервер запущен:
curl http://localhost:3001/api/health
-
Не открывайте файлы локально:
- ❌
file:///path/to/src/public/index.html - ✅
http://localhost:3001
- ❌
Бот не получает сообщения:
- Проверьте токен бота в
.env - Убедитесь что бот добавлен в чат
- Проверьте Chat ID:
https://api.telegram.org/bot<TOKEN>/getUpdates
Скриншот не создается:
- Проверьте что html2canvas загружен
- Попробуйте в другом браузере
- Отключите настройку скриншота
Порт занят:
# Найти процесс
lsof -ti:3001
# Остановить процесс
kill -9 <PID>Отсутствуют зависимости:
rm -rf node_modules package-lock.json
npm install- Fork проект
- Создайте feature branch (
git checkout -b feature/AmazingFeature) - Commit изменения (
git commit -m 'Add some AmazingFeature') - Push в branch (
git push origin feature/AmazingFeature) - Откройте Pull Request
Если у вас есть вопросы или предложения, создайте issue в репозитории.