Расскажите о сути проекта?
Tyzenhaus — это Telegram-бот, упрощающий взаимные долги в групповых чатах.
Как Splitwise, только в Telegram.
Как появилась идея? Что вдохновило?
До вспышки уханьского коронавируса мы с друзьями, бывало, путешествовали по Европе. Знаете, типичные евротрипы, когда забукано 4 перелёта, 10 поездов и автобусов, 7 ночлегов в 3-х странах. С этими платежами проблем почти нет: обычно всё дублируется на электропочту, поднять историю и выяснить кто кому сколько должен не сложно.
Проблемы начинаются уже в трипе. Купили перекусить в аэропорту — кто-то оплатил чей-то кофе. В сувенирной лавке отказались принимать карту — и вот уже я покупаю магнит кому-то за налик. В магазине купили продуктов — платил кто-то один. Взяли пиццу на всех — платил другой. Доехали до следующей страны — а там вообще не евро.
Бесконечный поток "потом сочтёмся".
Первый раз не сочлись. Разобрались с основными платежами, а на остальное забили. Во второй раз каждый был сам за себя, и это тоже не сработало. В третий раз мы сохраняли чеки, иногда подбивали промежуточные долги. В четвёртый — вопользовались какой-то прилагой, может даже Splitwise. Помню, она была далеко не идеальная и хотела подписку за снятие ограничений и сокрытие рекламы. На пятый раз я бы купил ту подписку, но проблема ушла в прошлое вместе с евротрипами и большими компаниями.
А сейчас снова вернулась. И я решил написать бота для решения этой проблемы. Всё равно ведь все сидим в Telegram!
Что вошло в прототип и сколько времени на него было потрачено?
Первую версию можно описать этим полуминутным видео:
Ключевые моменты:
- Это Telegram-бот;
- Его надо добавить в чатик;
- Почитать справочку;
- Нужно регистрировать в боте общие траты;
- В любой момент времени можно узнать кто кому сколько чего должен;
Какой технологический стек вы использовали? Почему?
Бэкенд: Kotlin
Деплоймент: пока на Heroku
БД: PostgreSQL
Фронтенд: Telegram
Kotlin я выбрал потому, что люблю этот язык и мне доставляет удовольствие писать на нём. К тому же, он на 30% выразительнее Java.
Heroku потому, что пока что это выходит абсолютно бесплатно. Но я не прибит к нему гвоздями — подойдёт любой VPS или даже serverless.
PostgreSQL как раз из-за Heroku: до 10К строк там бесплатно. Мне, например, понравилась возможность хранить JSON в колонках. Получается эдакая документная БД: primary key и, собственно, данные в виде JSON-объекта. И за схему париться не нужно. С моими масштабами — самое то. Да и если вдруг понадобиться масштабироваться — найти предложения по PostgreSQL или даже развернуть базу самому будет несложно.
Формат Telegram-бота (а не мобильный апплик или вёб-SPA) потому, что таков путь. Решение, конечно, такое себе, ведь сделать хороший UX в Telegram-боте дьявольски сложно. Но и ещё одна прилага для взаимных долгов нафиг не нужна, а вот ботов подобных я не встречал.
Как вы запускались и искали первых пользователей?
Первые пользователи — это я с женой. У нас что-то типа раздельного бюджета, так что бот нам пригодился. С друзьями плотненько надеюсь потестировать бота в ближайшие пару месяцев.
Здесь тоже ищу людей, которым пригодится этот бот, ну и фидбек послушать было бы здорово.
С какими самыми неожиданными трудностями пришлось столкнуться?
Самая большая трудность, с которой приходилось сталкиваться постоянно — это, собственно, Telegram как платформа для ботов. А именно:
- Очень сложно организовать хороший UX для пользователей;
- Ограничения в API;
ИМХО, боты хорошо подходят для оповещений, т.е. когда информация, по сути, не интерактивна и направлена в одну сторону: к пользователю. Неплохо делать ботов без состояния, которые обрабатывают одиночные запросы. Будь то классические текстовые боты, или инлайн-боты. Последние, кстати, вообще супер: попробуйте как-нибудь pic, vid, QuizBot, или GachimuchiKBot.
Но боты с состояниями и активным вводом инфы — это ужасно и никогда не сравнятся с мобильными аппликами по удобству. Ну, если только Павел Дуров не придумает какой-нибудь встроенный язык разметки интерфейсов для использования в Telegram. Тогда-то все остальные приложения с телефона можно будет и удалить :)
В API, например, не хватает таких базовых вещей как "получить список всех пользователей этого чата". Из-за этого я чуть не бросил делать бота вообще, но потом придумал самостоятельную "регистрацию" пользователей через выполнение команды. Но даже после этого, имея идентификаторы пользователей чата, нельзя получить их юзернеймы одним запросом.
Сколько потратили и заработали? Есть идеи как это можно монетизировать?
Потратил пока что ноль денег и несколько сотен часов на неспешную разработку, тестирование и рисование промо-ролика.
Заработал тоже ноль денег. Хороших идей по монетизации тоже нет, разве что можно раскрутить бота до нескольких тысяч активных чатов, а потом продать с потрохами какому-нибудь Azino777 чтобы те рассылали рекламу. Но это не план, а самоубийство с отягчающими обстоятельствами.
Можно, наверное, было бы ввести ограничения для бесплатных чатов, но чем я тогда лучше прилажек с подписками? У них хотя бы хороший дизайн…
Нужна помощь Клуба!
Я был бы рад найти клубней, которым был бы полезен мой бот. А затем послушать их фидбек и пофиксить найденными баги :) Не стесняйтесь накидывать issues на GitHub (звёздочки тоже ставьте!), в комментарии к этому посту, или в личку.
Какие планы на будущее?
В принципе, бот делает всё, что я от него хочу. Если же он нужен не только мне, то там есть несколько возможных улучшений:
- Добавить возможность быстрого сброса всех долгов в ноль
- Добавить возможность вывода всех транзакций (платежей) и поиска по ним
- Добавить возможность прикрепления чеков к транзакциям
- Переехать на нормальный VPS, а то нещадно тормозит
- Прикрутить статистику и мониторинг
- Сделать лендинг с подробностями (и документацией?)
- Добавить возможность посылать багрепорты и суппорт-реквесты прямо через бота
- ???
- PROFIT (AKA "продаться с потрохами Azino777")
Будут ли доступны коллекторы в премиум-подписке за 14.88?
Респект! Давно вынашиваю идею сделать подобную штуку, но так и не добрался до реализации.
Ха, у меня тоже есть подобный бот: @split_bill_bot и потребность такая же была, делить траты в путешествиях.