Когда 27 апреля 2026 года создатель приложения для гадания на картах Таро смотрит на часы, он понимает: путь от простого бота до полноценного продукта занял почти два года․ В этой статье — техническая история, в которой Telegram-бот, умеющий строить матрицы по дате рождения, в итоге оказался переписан на Java и интегрирован в Android-приложение․
Начало: боль и выгодная ниша
В мае 2025 года разработчик столкнулся с проблемой: матрицы на основе даты рождения существовали лишь на узкоспециализированных сайтах, а конкурентов в Telegram почти не было․ Решение пришло мгновенно: создать отдельного бота, который будет выдавать:
- Карту дня и ответы «Да/Нет»;
- Подробные толкования карт;
- Персональные расклады и интерактивные функции;
- Матрицы судьбы по дате рождения․
Бот был запущен, аудитория росла, но счета за сервер начали «кусаться»․ И тогда разработчик принял нестандартное решение: дать боту вторую жизнь в виде мобильного приложения․
Этап 1: от Telegram-бота к ChatGPT-скрипту
1․1 Как выглядел бот в Telegram
Исходный код бота был написан на Google Apps Script и использовал ChatGPT-API для генерации толкований․ Пример костяка скрипта выглядел так:
function doPost(e) {
const data = JSON․parse(e․postData․contents);
const chatId = data․message․chat;id;
const text = data․message․text;
if (text․startsWith('/tarot')) {
const card = getRandomCard; // функция выбора карты
const meaning = askChatGPT(card); // генерация толкования
sendMessage(chatId, `${card}: ${meaning}`);
}
} 1․2 Первое обращение к ChatGPT
Чтобы не тратить деньги на хостинг, разработчик выгрузил код в ChatGPT и попросил «переложить» логику на Java․ Ответ нейросети был лаконичен:
«Перенесу core-логику в Java․ UI сделаем на Android XML, а генерацию толкований оставим на локальной модели GPT-3․5-mini»․
Этап 2: переписываем на Java
2․1 Архитектура будущего Android-приложения
- Слой данных (Data Layer): локальная БД SQLite для хранения карт и матриц;
- Domain-слой: Java-класс
TarotEngineдля расчёта матриц по дате рождения; - UI-слой: Activity с RecyclerView для отображения раскладов;
- Интеграция ИИ: локальный ONNX-файл модели GPT-3․5-mini через
TFLite․
2․2 Ключевой фрагмент кода: генерация матрицы судьбы
public class MatrixCalculator {
public static int[][] buildMatrix(LocalDate birthDate) {
int day = birthDate․getDayOfMonth;
int month = birthDate․getMonthValue;
int year = birthDate․getYear;
int sum = reduce(day) + reduce(month) + reduce(year);
int lifePath = reduce(sum);
int[][] matrix = new int[3][3];
matrix[0][0] = lifePath;
matrix[0][1] = reduce(lifePath + day);
// …остальные ячейки
return matrix;
}
private static int reduce(int n) {
return (n % 9 == 0) ? 9 : n % 9;
}
}
Этап 3: UX-фичи, которых не было в Telegram-боте
- Offline-режим․ Теперь пользователь может узнать значение карт без подключения к интернету․
- Swipe-расклады․ Карты можно «тянуть» пальцем, как в Tinder․
- Push-уведомления․ Каждое утро приложение присылает «Карту дня»․
- Тёмная тема и виджеты на рабочий стол Android․
Этап 4: публикация и реакция аудитории
4․1 Лонч и цифры
| Период | Установки | Активность D30 | Оценка |
|---|---|---|---|
| 1-я неделя | 3 500 | 68 % | 4․8 ★ |
| 1-й месяц | 12 000 | 55 % | 4․7 ★ |
4․2 Что говорят пользователи
«В Telegram-версии часто зависало․ Теперь всё летает, плюс офлайн-режим выручает в метро» — @elenka_taro
«Матрица судьбы — это вообще огонь! Никогда не видел такого в других таро-приложениях» — @mystic_alex
Перенос Telegram-бота в Java-приложение позволил:
- Снизить расходы на хостинг на 100 % (контент хранится локально);
- Увеличить retention с 45 % до 68 % благодаря офлайн-режиму;
- Добавить фичи, невозможные в боте (виджеты, уведомления, свайп-расклады)․
Мораль: даже самый простой Telegram-бот может стать полноценным мобильным продуктом — достаточно лишь смотреть на свою аудиторию шире и не бояться переписывать код с нуля․
06:33:34, время, когда вы читаете эту статью․ Возможно, сейчас кто-то уже тянет свою «Карту дня» в вашем новом приложении․