Как я написал бота для пар
Всё началось с хлеба. Точнее, с того, что я его опять не купил.
Схема у нас с девушкой была отработанная. Днём прилетает сообщение: «купи по пути домой хлеб и корм коту». Я читаю его между делом, закрываю чат, вечером прихожу с пустыми руками. Дальше по накатанной: «ну я же просила». Я не саботажник, просто сообщение тонет в переписке, напоминание себе поставить лень, и так по кругу примерно раз в три дня.
В какой-то момент дошло, что это чинится не разговорами о внимательности, а обычной кнопкой. Так и родился бот.
Что он умеет
Если коротко, это ежедневник и учёт денег внутри Telegram, но с одной особенностью, ради которой всё и затевалось.
Ты связываешь свой аккаунт с аккаунтом второго человека. После этого можно кидать задачи друг другу. Пишешь боту в чат «Люба, купи хлеба по пути домой», и Любе прилетает задача с напоминанием и подписью, от кого она. Ей ничего настраивать не надо, просто приходит уведомление. Можно голосом: наговорил, бот распознал и превратил в задачу сам.
Остальное выросло вокруг этого. Обычные напоминания (разовые, по времени, по интервалу), учёт доходов и расходов с категориями и графиками, конвертер валют. Валюты я добавил рубль, доллар, донг и бат, потому что писал бота, когда мы жили в Азии и постоянно пересчитывали цены в голове.
Почему именно так
Отдельное приложение под App Store и Google Play я делать не стал. Причин две. Во-первых, там ревью, аккаунт разработчика и деньги за всё это. Во-вторых, моя аудитория и так сидит в Telegram, а Mini App открывается по одной кнопке, ставить ничего не нужно. Для продукта «на двоих», которым пользуешься между делом, так честнее.
Внутри это Next.js, база на Neon (Postgres), крутится на Vercel. Голос распознаётся через Groq (модель whisper), а разбор текста в задачу делает языковая модель, тоже через Groq. Бесплатных лимитов пока хватает с запасом.
Самая душная часть
Я думал, что сложнее всего будет с напоминаниями. Ошибся. Сложнее всего оказалось понять, кому адресована задача.
Когда пишешь «Люба, купи хлеба», всё очевидно. А когда «позвонить Любе»? Это я должен ей позвонить, или это поручение для неё? Сначала бот ловил только строгие фразы, начинающиеся с имени. Работало топорно: половину нормальных формулировок он не понимал.
Пришлось отдать разбор языковой модели и научить её отвечать одним из трёх вариантов: задача мне, задача партнёру, либо непонятно. На «непонятно» бот просто переспрашивает кнопками «мне или партнёру?». Звучит элементарно, но чтобы модель перестала считать «позвонить Любе» поручением для Любы, я переписывал инструкцию раз пять и гонял её на двух десятках живых фраз, пока не сошлось.
Ещё была смешная возня с часовыми поясами. Бот какое-то время бодро записывал встречи на три часа раньше, потому что сервер живёт по UTC, а я по Москве. Классика, на которую наступают все.
Как оно сейчас
Честно? Нас семеро. Шестерых я позвал лично, седьмая это девушка. Я пока не знаю, нужен ли бот кому-то, кроме нас, и иллюзий про «выстрелит» не питаю.
Но пару вещей уже понял. Первое: фича «кидать задачи друг другу» цепляет людей сильнее, чем весь остальной список возможностей вместе взятый. Когда я показываю бота, спрашивают именно про это, а не про графики расходов. Второе: я делал «ежедневник с финансами», а получился «инструмент для пар», и понял я это не сам, а по реакции знакомых. Иногда продукт знает лучше тебя, чем он на самом деле является.
Сейчас доделываю приглашения по ссылке, чтобы связать двоих было делом одного тапа, а не диктовки кода голосом. Дальше буду смотреть, возвращаются ли люди на второй день. Если нет, значит идея греет только меня, и это тоже нормальный ответ.
А хлеб я теперь покупаю. Ради этого, в общем-то, всё и было.