Как все начиналось

В конце июня этого года я возвращался с дачи, слушая радио в машине. Новости по радио выходят раз в час, и их разнообразие оставляет желать лучшего. Тогда я подумал: было бы здорово, если бы было приложение, которое автоматически собирало новости из 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 строчек кода.


Комментарии (3)


  1. pol_pot
    31.08.2025 10:08

    • Qwen 3 Coder: Стал моим фаворитом за точность и экономичность (меньше затрат на OpenRouter).

    Он на своем родном сайте работает, без ограничений и пускает тех кто живет севернее кореи https://chat.qwen.ai/

    Для tts можно еще попробовать edge

    У дновостных каналов обычно есть веб сайты, их проще читать чем телеграм, никакой авторизации не требуется обычно.


    1. jaker Автор
      31.08.2025 10:08

      "Он на своем родном сайте работает" - вот, не подумал, спасибо за информацию


  1. Spinoza0
    31.08.2025 10:08

    Программирование на ощупь...