Учёт трат, который не бросаешь через неделю: Telegram‑бот, которому хватает «продукты 500». aiogram.. aiogram. llm.. aiogram. llm. python.. aiogram. llm. python. telegram mini app.. aiogram. llm. python. telegram mini app. vue 3.. aiogram. llm. python. telegram mini app. vue 3. личные финансы.. aiogram. llm. python. telegram mini app. vue 3. личные финансы. Мессенджеры.. aiogram. llm. python. telegram mini app. vue 3. личные финансы. Мессенджеры. Развитие стартапа.. aiogram. llm. python. telegram mini app. vue 3. личные финансы. Мессенджеры. Развитие стартапа. распознавание речи.. aiogram. llm. python. telegram mini app. vue 3. личные финансы. Мессенджеры. Развитие стартапа. распознавание речи. распознавание чеков.. aiogram. llm. python. telegram mini app. vue 3. личные финансы. Мессенджеры. Развитие стартапа. распознавание речи. распознавание чеков. учёт расходов.
Учёт трат, который не бросаешь через неделю: Telegram‑бот, которому хватает «продукты 500» - 1

Признаюсь сразу: учёт расходов у меня умирал пять раз. Таблица в Google продержалась девять дней. Первое приложение прожило месяц, второе две недели. Потом был бот с кнопками, где на одну шаурму уходило шесть нажатий. Где‑то между «выберите категорию» и «укажите дату» шаурма заканчивалась, а вместе с ней и желание что‑то записывать.

Дело не в лени. Посчитайте сами: открыть приложение, нажать плюсик, набрать сумму, найти категорию в списке из двадцати пунктов, проверить дату, сохранить. И так на каждую покупку, а покупок в день штук семь. К вечеру уже не вспомнить, сколько стоил утренний кофе, и через неделю в отчёте красивая дыра.

Хотелось, чтобы записать трату было так же просто, как написать другу. Так появился «Где деньги».

Как это выглядит

Пишете боту как есть, без формата и без правильных запятых:

продукты 500, колёса 2000, вчера такси 300

Через пару секунд всё записано. Продукты ушли в «Продукты», колёса в новую категорию «Авто», такси в «Транспорт», причём вчерашним числом, потому что было сказано «вчера».

Страница бота
Одно сообщение, три траты, три категории

Одно сообщение, три траты, три категории

Переспрашивать «вы уверены?» бот не станет. Первая версия с подтверждением была, но нажимать «Да» под каждой шаурмой надоедает уже на третий день. Модель ошибается редко, а если ошиблась, под ответом есть «✏️ Изменить» и «🗑 Удалить«.»

И ещё мелочь, которой я горжусь больше, чем стоило бы: бот убирает за собой. Ваше сообщение и его прошлый ответ исчезают, и в чате всегда висит одно сообщение с итогом. Никакой простыни из сотни «✅ Траты добавлены», в которой потом ничего не найти.

Пятёрочка, аптека и прочие загадки

Бот знает, что «пятёрочка» это продукты, «аптека» это здоровье, а «колёса» скорее про машину, чем про скейт. Даты тоже понимает: «вчера», «позавчера», «20 сентября». Не назвали дату, значит сегодня.

Категорий на старте нет вообще. Бот сначала смотрит на ваши категории, потом на стандартный набор и только потом придумывает новую. Через неделю у вас ровно те категории, на которые вы правда тратите, без сорока пунктов на всякий случай вроде «Яхты» и «Прочее 2».

Голосом, когда руки заняты

Выходите из магазина: в одной руке пакеты, в другой ключи. Зажимаете микрофон и говорите «заправка две тысячи и корм коту восемьсот». Бот расшифрует, разложит и, раз котов раньше не было, заведёт им отдельную категорию.

Запись с голоса
Шесть секунд голосом вместо двенадцати нажатий

Шесть секунд голосом вместо двенадцати нажатий

Голосовое может быть до двух минут, так что можно надиктовать хоть весь день разом: «утром кофе двести, в обед бизнес‑ланч четыреста пятьдесят, вечером такси шестьсот».

Чек: сфотографировать и забыть

Длинный чек из супермаркета можно просто сфотографировать. Бот прочитает строки и разложит покупки по категориям: молоко и сыр в продукты, губки для посуды в дом, пластырь в здоровье. Каждая строчка сохраняется как товар, поэтому потом можно узнать, сколько за месяц ушло на сыр. Спойлер: больше, чем кажется.

Слева ответ в чате, справа тот же чек в приложении

Слева ответ в чате, справа тот же чек в приложении

Если строки не сходятся с итогом, бот честно об этом скажет. Чаще всего виновата скидка по карте, которую магазин печатает отдельной строкой где‑то внизу. Здесь как раз она: 40 рублей.

Смотреть и править в мини‑приложении

В чате бот только записывает. Листать месяц трат в переписке неудобно, поэтому всё остальное живёт в мини‑приложении. Это страница внутри Telegram, открывается кнопкой «📱 Открыть«. Регистрации и паролей нет: кто вы, Telegram сообщает сам.»

Слева главная в чате, справа главная в приложении

Слева главная в чате, справа главная в приложении

На главной сумма за месяц и полоски по категориям. Сразу видно, что продукты съедают половину бюджета, а «Кафе и рестораны» скромно стоят в сторонке с 250 рублями. Это был один кофе, честно.

Нажимаете на трату, и снизу выезжает шторка: сумма, категория, дата, счёт. Категория меняется одним касанием. Удалили не то, жмёте «Отменить».

Лента трат и шторка правки

Лента трат и шторка правки

Поиск ищет и по тратам, и по товарам из чеков. Пишете «молоко» и получаете сумму за месяц. Это ровно тот момент, когда хочется закрыть приложение и больше никогда не знать, сколько стоит молоко.

Выгрузка в Excel и CSV занимает два касания. Данные ваши, забирайте когда угодно.

Поиск по товарам и выгрузка

Поиск по товарам и выгрузка

Приложение берёт цвета из вашего Telegram: светлую тему, тёмную или ту самую синюю ночную, которую вы когда‑то выбрали в настройках и забыли.

Одна и та же главная в трёх темах Telegram

Одна и та же главная в трёх темах Telegram

Общий счёт для семьи, дачи и отпуска

Деньги редко тратит кто‑то один. Поэтому кроме личного счёта можно завести общий: «Семья», «Дача», «Отпуск в Сочи». Остальных зовёте ссылкой, людей может быть сколько угодно. Каждый пишет траты боту в личку, как обычно, а итог у всех один.

Петя купил доски для забора, и Ане тут же приходит уведомление. В конце сезона больше не нужно выяснять, кто сколько вложил в эту дачу, и собирать по общему чату фотографии чеков.

Слева Петя записывает доски, справа Ане приходит уведомление

Слева Петя записывает доски, справа Ане приходит уведомление

Траты пишутся в счёт, который сейчас открыт, переключается он кнопками на главной. Записали личный кофе в «Дачу»? Под ответом есть «➡️ В „Основной“», и кофе переезжает обратно.

У каждого счёта своя валюта: рубли, доллары, евро, тенге, лари, драмы и ещё шесть. Удобно в поездке и тем, кто живёт не в России.

Что с данными

Вопрос, который на Хабре задают первым. База лежит на сервере в России. Из Telegram бот не берёт ничего: ни имени, ни фамилии, ни @username. Текст ваших сообщений тоже не хранится, только сами траты. Имя для общих счетов вы придумываете сами, хоть «Котик».

Сколько стоит

Без подвоха. Записывать траты текстом и голосом, смотреть отчёты, править и выгружать можно бесплатно и без срока. 

Для тех, кто пролистал сюда ради кода

Python 3.12, aiogram 3, SQLite. Мини‑приложение на Vue 3 и TypeScript, собирается Vite, без готовых наборов компонентов. Веб‑сервер на aiohttp живёт в одном процессе с ботом. Типы фронтенда генерируются из моделей API, руками их никто не пишет, и это спасло меня от десятка глупых багов.

Разбирает траты языковая модель. Отвечает она строго по JSON‑схеме: описание, сумма в копейках, категория и дата. Проверяю это на 34 фразах вроде «пятёрочка 1.5 к», «кофе 5 долларов» и «позавчера аптека 1200». Основная модель проходит все 34, а разбор одного сообщения стоит примерно треть цента.

С голосом вышла отдельная история. Сначала голосовые расшифровывал локальный Whisper. Работал он хорошо, но съедал два гигабайта памяти, и сервер из‑за него стоил вдвое дороже. Теперь голос расшифровывает модель, а ogg из Telegram перегоняется в mp3 за две десятых секунды.

Попробовать

@gde_dengi_tracker_bot. Напишите /start, а потом первую трату. Хоть «кофе 200», хоть сразу весь вчерашний день.

Очень жду в комментариях фразы, которые бот понял неправильно: каждую добавлю в тесты. И расскажите, чего не хватает, чтобы перейти на него с вашего нынешнего приложения. Только «а можно без нейросети» не предлагайте. Без нейросети у меня уже было пять попыток.

Автор: Anonimuz

Источник