Как все начиналось
В конце июня этого года я возвращался с дачи, слушая радио в машине. Новости по радио выходят раз в час, и их разнообразие оставляет желать лучшего. Тогда я подумал: было бы здорово, если бы было приложение, которое автоматически собирало новости из Telegram-каналов и озвучивало их голосом на русском языке.
Вернувшись домой, я поискал готовое решение, но ничего подходящего в интернете не нашёл. Решил спросить у ИИ.
Первый диалог с ChatGPT
Мой диалог с ChatGPT начался так:
Я: Нужно мобильное приложение для андроид, чтобы в нем можно было задать, из каких чатов телеграмма читать новости… и прочитать их голосом по-русски — возможно ли такое сделать?
ChatGPT: Да, такое мобильное приложение для Android — вполне реально создать… Лучше использовать Kotlin… Для работы с Telegram нужно использовать TDLib… Для озвучивания — Google TextToSpeech…
Я попросил ChatGPT детализировать идею, и он выдал практически готовое техническое задание с четкой структурой:
Название: «Голосовые новости из Telegram»
Функционал: Авторизация в Telegram через TDLib, выбор каналов/групп, настройка временного диапазона (от 5 минут до суток), фильтрация дубликатов новостей, озвучка через TTS с объявлением канала и времени, настройки голоса.
Инструменты
-
Kotlin — язык для Android.
-
TDLib — библиотека Telegram для работы с личными чатами и каналами.
-
Android TextToSpeech — синтез речи.
-
Room (SQLite) — хранение каналов и настроек.
Выглядело всё это устрашающе сложно. Я спросил у ИИ, нет ли уже готовых приложений, но он предложил только костыли вроде ботов или сторонних TTS-ридеров, которые не решали задачу.
Стало ясно — нужно делать свое приложение для себя. Но как?
Путь разработки: от нуля до рабочего приложения
Мой опыт программирования ограничивался институтским Фортраном в начале 90-х, а о мобильной разработке я не знал ничего. Тем не менее, с помощью ИИ я прошел путь от установки Android Studio до создания APK. Вот ключевые этапы.
Настройка окружения
По совету Claude Opus 4, я установил Android Studio, JDK 17, Android SDK, Git и Gradle в виртуальной машине, чтобы случайно не попортить свой компьютер разными программами. Это заняло целый день.
Скрипт
Claude сгенерировал мне sh-скрипт, который создавал всю структуру папок и файлов проекта. Получилось не с первого раза, но это был маленький успех.
API ключи
Нашел инструкцию, как сделать API ключи. Запустил проект… Первый же запуск проекта в Android Studio завершился провалом, так как никаких библиотек TDlib у меня не было, и я не знал, где их взять.
Поиск в интернете явно не дал результатов. В конечном итоге, где-то я смог найти нужные файлы и даже запустить приложение. Вот в таком виде, но больше ничего не нажималось и не открывалось.

На это ушло 2 дня. Далее процесс застопорился, мой проект я умудрился испортить и больше совсем ничего не запускалось. Я понял, что затея глупая и потер все папки проекта…
Через 2 недели все-таки вернулся к теме и решил использовать Grok. Он мне выдал новый скрипт для развертывания приложения и запуска через Android Studio. Часть его ниже.
#!/bin/bash # Telegram News Reader - Автоматическая настройка проекта Android Studio (обновлённая версия by Grok) set -e PROJECT_NAME="TelegramNewsReader" PACKAGE_NAME="com.example.telegramnewsreader" PACKAGE_PATH="com/example/telegramnewsreader" echo "🚀 Создание проекта $PROJECT_NAME..." # Создание структуры проекта mkdir -p $PROJECT_NAME cd $PROJECT_NAME # Создание основных директорий mkdir -p app/src/main/java/$PACKAGE_PATH/activities mkdir -p app/src/main/java/$PACKAGE_PATH/services mkdir -p app/src/main/java/$PACKAGE_PATH/managers mkdir -p app/src/main/java/$PACKAGE_PATH/models mkdir -p app/src/main/java/$PACKAGE_PATH/adapters mkdir -p app/src/main/java/$PACKAGE_PATH/telegram mkdir -p app/src/main/java/$PACKAGE_PATH/tts mkdir -p app/src/main/java/$PACKAGE_PATH/db mkdir -p app/src/main/res/layout mkdir -p app/src/main/res/values mkdir -p app/src/main/res/drawable mkdir -p app/src/main/assets mkdir -p app/libs mkdir -p gradle/wrapper # ...
Невероятное количество ошибок мне сыпалось при запуске проекта, я их скидывал ИИ и вносил исправления.
TDLib
Следующий шаг — подключение Telegram API через TDLib. Ссылки на библиотеки, предложенные ИИ, оказались битыми. После долгих поисков я нашел TDLib на GitHub, скомпилировал его вручную и добавил в проект. На создание библиотек у меня ушла еще неделя, в виртуальной машине на Ubuntu, так как в Windows собираться библиотеки категорически не хотели. Запуск проекта выдал ошибки: TDLib не находил зависимости. Пришлось вручную править build.gradle, добавляя строки, предложенные ИИ.
Работа с ИИ: помощники и их ограничения
Сначала я метался между ChatGPT, DeepSeek, Claude Opus и Grok.
Бесплатные лимиты быстро кончались. В конце июля, начале августа на несколько дней появился Horizon (предвестник ChatGPT5), модели были на тесте и безлимитные, жаль всего несколько дней, но за эти дни удалось продвинуться значительно дальше.
Я использовал несколько ИИ-моделей. Каждый выдавал код, но с разной точностью:
-
ChatGPT 4: Часто давал неполные фрагменты кода, которые ломали проект.
-
Horizon Alpha/Beta (тестовые модели на OpenRouter): Выдавали почти идеальный код с первого раза.
-
Qwen 3 Coder: Стал моим фаворитом за точность и экономичность (меньше затрат на OpenRouter).
-
ChatGPT 5: Лучше чем 4-версия, но дороже, чем Qwen
-
Claude Opus: Лучше справлялся с генерацией больших объемов кода и структуры проекта.
-
DeepSeek и Grok — использовались в меньшей степени.
Ошибки в Android Studio я копировал в ИИ, требуя полный файл кода, а не фрагменты, чтобы избежать конфликтов. Для отката изменений я использовал локальный Git, что спасало, когда ИИ «ломал» логику.
Ключевые этапы разработки
|
Дата |
Этап |
Проблемы |
|---|---|---|
|
17 июля |
Первый запуск UI |
TDLib не подключался |
|
27 июля |
Озвучка новостей |
Механический голос, нет пауз |
|
02 августа |
Новая оболочка |
Настройки голоса |
|
13 августа |
Первая рабочая версия-первый APK |
Ошибки компиляции APK |
|
18 августа |
Финальная версия (v5) |
Мелкие баги UI |
17 июля: После недели компиляции TDLib я увидел первый интерфейс.

Но ничего не нажималось из-за заглушек в коде от ИИ. Каналы не загружались. Как оказалось у меня еще многофакторная аутентификация была, пришлось добавить третье поле с вводом пароля.
// 🔐 Обработка ожидания облачного пароля telegramClient.onPasswordRequired = { runOnUiThread { binding.etPassword.visibility = View.VISIBLE binding.btnVerifyPassword.visibility = View.VISIBLE Toast.makeText(this, "Введите облачный пароль", Toast.LENGTH_SHORT).show() } } // ✅ Переход в MainActivity только после полной авторизации telegramClient.onClientReady = { runOnUiThread { Toast.makeText(this, "Авторизация успешна", Toast.LENGTH_SHORT).show() PreferenceManager.setAuthorized(this, true) startActivity(Intent(this, MainActivity::class.java)) finish() } }
27 июля: Добавлена озвучка через Android TTS. Голос звучал механически, и я экспериментировал с RHVoice, но вернулся к Android TTS, добавив код для фильтрации рекламы и пауз. Ниже, один пример.
private fun dropTrivial(texts: List<String>): List<String> { val trivial = Regex("^(фото|видео|аудио|ссылка|репост)\\b.*$", RegexOption.IGNORE_CASE) val subscribe = Regex("(?i)^.*\\b(подписывай(ся|тесь)?|подписка)\\b.*$", RegexOption.IGNORE_CASE) return texts.map { it.trim() } .filter { text -> val isTrivial = text.length < 8 || trivial.containsMatchIn(text) val hasSubscribe = subscribe.containsMatchIn(text) if (hasSubscribe) { Log.d("TTSManager", "⚠️ Найдена подписка: '$text'") } !(isTrivial || hasSubscribe) } }

02 августа: Новая оболочка. Голосовые настройки. Плашка скрытых каналов-нажав на канал, можно его скрыть. Кнопки воспроизведения.

13 августа: Первая рабочая версия с выбором каналов, их картинками, временем выборки и озвучкой. Тогда же решил создать APK для установки на телефоне, первая компиляция выдала более 20 ошибок, пришлось по каждой проводить исправления через ИИ.
APK получился в 250 МБ из-за лишних библиотек. После подсказок и оптимизации (удаление ненужных зависимостей) размер сократился до 55 МБ.

18 августа: Финальная версия (v5) с улучшенным UI, настройками TTS и прогресс-баром.

Функционал финального приложения
Финальная версия приложения (18 августа 2025) включает:
-
Авторизация: Вводим свой номер телефона Telegram. В Telegram получаем код, который, вставляем в поле приложения, вводим дополнительный пароль (если есть). Входим в программу. Это надо всего один раз, далее программа помнит авторизацию.
-
Выбор каналов: Отображение каналов, на которые вы подписаны с возможностью отметить избранные (звездочкой), что бы поднять их в списке или скрыть лишние.
-
Диапазон времени: От 10 минут до 24 часов, по умолчанию — 30 минут.
-
Сбор новостей из выбранных каналов.
-
Фильтрация и очистка текста. Удаление мусора и рекламы (правда не всё удаляет, но большую часть).
-
Текстовые сообщения → Синтез отдельных WAV файлов для каждой новости через TTS. Добавление пауз между новостями.
-
Создание MP3 с тайм-кодами для навигации
-
Озвучка: Настраиваемый голос (мужской/женский), темп, тембр. Тестовое воспроизведение для проверки.
-
Прогресс-бар: Показывает процесс сбора новостей (максимум 100 сообщений).
-
Формат озвучки: «Новости из канала РИА Новости, 21:10, [текст новости].»
Приложение весит 55 МБ, что приемлемо для моих целей. Мелкие баги не мешают работе.
Заключение
За основном за месяц я, человек без опыта программирования, создал Android-приложение, которое озвучивает новости из Telegram-каналов. Это было непросто: битые ссылки, ошибки компиляции и ограничения ИИ заставили попотеть. Но результат того стоил — теперь я могу слушать новости из моих каналов в дороге, нажав пару кнопок, как и хотел изначально.
P.S. Если вы знаете похожие бесплатные приложения без рекламы — напишите.
P.P.S. В проекте примерно 5000 строчек кода.
ссылка на оригинал статьи https://habr.com/ru/articles/942488/
Добавить комментарий