Учёт трат, который не бросаешь через неделю: Telegram‑бот, которому хватает «продукты 500»


Признаюсь сразу: учёт расходов у меня умирал пять раз. Таблица в Google продержалась девять дней. Первое приложение прожило месяц, второе две недели. Потом был бот с кнопками, где на одну шаурму уходило шесть нажатий. Где‑то между «выберите категорию» и «укажите дату» шаурма заканчивалась, а вместе с ней и желание что‑то записывать.
Дело не в лени. Посчитайте сами: открыть приложение, нажать плюсик, набрать сумму, найти категорию в списке из двадцати пунктов, проверить дату, сохранить. И так на каждую покупку, а покупок в день штук семь. К вечеру уже не вспомнить, сколько стоил утренний кофе, и через неделю в отчёте красивая дыра.
Хотелось, чтобы записать трату было так же просто, как написать другу. Так появился «Где деньги».
Как это выглядит
Пишете боту как есть, без формата и без правильных запятых:
продукты 500, колёса 2000, вчера такси 300
Через пару секунд всё записано. Продукты ушли в «Продукты», колёса в новую категорию «Авто», такси в «Транспорт», причём вчерашним числом, потому что было сказано «вчера».
Страница бота

Переспрашивать «вы уверены?» бот не станет. Первая версия с подтверждением была, но нажимать «Да» под каждой шаурмой надоедает уже на третий день. Модель ошибается редко, а если ошиблась, под ответом есть «✏️ Изменить» и «🗑 Удалить«.»
И ещё мелочь, которой я горжусь больше, чем стоило бы: бот убирает за собой. Ваше сообщение и его прошлый ответ исчезают, и в чате всегда висит одно сообщение с итогом. Никакой простыни из сотни «✅ Траты добавлены», в которой потом ничего не найти.
Пятёрочка, аптека и прочие загадки
Бот знает, что «пятёрочка» это продукты, «аптека» это здоровье, а «колёса» скорее про машину, чем про скейт. Даты тоже понимает: «вчера», «позавчера», «20 сентября». Не назвали дату, значит сегодня.
Категорий на старте нет вообще. Бот сначала смотрит на ваши категории, потом на стандартный набор и только потом придумывает новую. Через неделю у вас ровно те категории, на которые вы правда тратите, без сорока пунктов на всякий случай вроде «Яхты» и «Прочее 2».
Голосом, когда руки заняты
Выходите из магазина: в одной руке пакеты, в другой ключи. Зажимаете микрофон и говорите «заправка две тысячи и корм коту восемьсот». Бот расшифрует, разложит и, раз котов раньше не было, заведёт им отдельную категорию.
Запись с голоса

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

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

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

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

Приложение берёт цвета из вашего 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», хоть сразу весь вчерашний день.
Очень жду в комментариях фразы, которые бот понял неправильно: каждую добавлю в тесты. И расскажите, чего не хватает, чтобы перейти на него с вашего нынешнего приложения. Только «а можно без нейросети» не предлагайте. Без нейросети у меня уже было пять попыток.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.