Личный телеграм-бот за 30 минут

Alexandr Subbotin
Jun 3 · 6 min read

Любые идеи и решения, зарождающиеся в вашей голове — это эволюция того, что вы переварили: посмотрели, прочитали, попробовали. В одно время в моей голове оказались темы ведения личного бюджета и подход nocode. И вот что получилось.

💡Идея

Я пробовал вести личный бюджет просто записывая траты, анализируя выгрузки из банка, через zenmoney и в последнее время остановился на гугл-таблице из статьи в тиньков журнале.

Всё просто: не нужно стараться учитывать каждую трату и бесполезно разбивать траты по категориям. Главное — понимать текущий “баланс”. Если знать, что зарабатываешь 50к, тратишь на квартиру 10к и хочешь отложить 10к — остаётся 30к в месяц на траты, то есть по 1 000 рублей в день. Вчера потратил 300 рублей — сегодня есть 1 700, потратил 2к — сегодня 0. И так баланс со всех предыдущих дней переходит в следующие.

Как обычно, в чужом меня что-то не устраивает и я переделал таблицу под себя, получилось немного проще для ведения.

На странице «расходы» вводим траты (можно суммарно за день, можно каждую транзакцию), на странице «06.2020» видим текущий баланс.

Спустя неделю я понял, что невозможно заставить себя открывать таблицу и записывать расходы. Нужно это как-то упростить, чтобы тратить минимум времени и мыслетоплива.

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

🛠 Технологии

Первая идея — по-старинке написать бекенд с rest api, куда-то всё задеплоить. Но это всё поддерживать, решать проблемы с локальным дебагом, деплоить каждое изменение, за сервера платить и рано или поздно там что-то сломается и нужно будет тратить время на поддержку.

Вторая идея — использовать serverless / AWS Lamda / etc. Это ленивый вариант для обработки хуков от любых сервисов — освобождаемся от поддержки. Но опять же, что-то писать, выбирать технологии, язык… Долго.

Как раз недавно я начитался Вастрика про nocode и решил попробовать сделать бота без единой строчки кода и не пожалел, т.к. сделал рабочее решение менее, чем за 30 минут.

👨🏻‍🔧Создание

🕘 21:00

Чтобы не отвлекаться потом — подготовимся.

Регистрируем аккаунт в integromat — сервис для интеграции всего со всем без написания кода. Я пробовал раньше zapier и iftt, но integromat мне показался самым удобным.

Создаём бота в телеге через botfather — придумываем имя, отправляем боту всю необходимую информацию и в ответ получаем токен вида 1234567890:AAAaaA0AAA0aa0aAAAA0aa00Aa__0aaAaaa, который сохраняем для использования.

21:04

Создаём новый сценарий в integromat— мы будем слать сообщения телеграмм-боту, который будет записывать наши траты и в ответ будет отдавать наш баланс. Вот так:

Интегромат не умеет из коробки обрабатывать сообщения, приходящие боту, поэтому интеграцию сделаем через webhook. Итого для сценария нам будут нужны модули webhook, telegram bot и google sheets.

Началом скрипта будет получение вебхука — добавляем новый и копируем адрес.

Говорим телеграмму, чтобы все сообщения, полученные ботом он отправлял на этот адрес — используем метод setWebhook. Самый простой способ — сделать это через JS-консоль в браузере:

fetch("https://api.telegram.org/bot<bot-token>/setWebhook", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({url: "https://hook.integromat.com/<integromat token>"})
}).then(console.log).catch(console.log)

Получаем подтверждение

{"ok":true,"result":true,"description":"Webhook was set"}

Для проверки шлём любое сообщение боту и видим Successfuly determined, значит integromat получил наше сообщение.

21:09

Идём попить водички

21:11

У нас есть сообщение, которое получил бот — теперь нужно забрать из него сумму и положить отдельной строкой в таблицу. Добавляем модуль Google Sheets → Add row, авторизуемся и выбираем нашу таблицу и страницу Расходы. Делаем маппинг — в какую ячейку что мы будем класть.

  • Первый столбец — дата. Она хранится в поле message.date

Нажимаем run once и пробуем послать боту любое число. Отлично, всё работает:

Но в поле дата попадает timestamp вместо конкретной даты — нам нужно сделать преобразование — из таймстемпа получить дату, а её преобразовать в строку вида 01.06.2020. Используем весь свой многолетний опыт программирования:

Запускаем, тестируем:

Бинго — расходы записываются, на странице 06.2020 видим траты по дням и баланс. Текущий — в ячейке G5

21:21

Нужно получить баланс и послать его в ответ. Добавляем модуль Google Sheets → Get a cell, выбираем нашу таблицу, страницу 06.2020 и ячейку G5.

Добавляем модуль Telegram bot → Send a text message or reply. Подключаем нашего бота, применив скопированный bot-token и конструируем наш ответ:

Запускаем, проверяем:

Поздравляю, простейший бот готов!

21:24

MVP есть, немного отполируем.

Добавим возможность отправлять не только расходы, но и описание. Для этого нужно распарсить наше сообщение — разобьём сообщение в массив по пробелам и в первом элементе будет сумма, а соединив оставшиеся элементы обратно пробелами получим описание. Немного программируем:

21:26

Если мы делаем что-то для себя или для быстрого старта — это всё равно должно выглядеть и работать приятно. Добавим описание и welcome-message.

Теперь надеваем шляпу дизайнера — открываем любой редактор и создаём картинку 512x512. Включаем креатив и накидываем аватарку для нашего бота. Я предпочитаю эмодзи. Например, вот так:

Устанавливаем аватарку через botfather.

21:28

Сейчас кто угодно может послать сообщение нашему боту — добавим фильтр, чтобы он работал только с нами. Добавляем его между вебхуком и модулем google sheets, фильтруем сообщения по отправителю

🕥 21:30

One more thing: чтобы ботом было удобно пользоваться в любой ситуации — пиним его в мессенджере. Теперь чат с ботом будет всегда наверху:

На этом всё — идём ставить кофе под Элвиса Пресли / кататься на самокате / писать статью про создание бота за 30 минут.

В следующих итерациях:

  • Добавляем waitlist, если кто-то захочет использовать нашего бота — зачем терять потенциальных лидов? Потом всё-таки сделаем прилу с подпиской и монетизируем их!

Итоги

  • MVP — это не сделать быстро и плохо, а сделать быстро работающий продукт. И даже не из говна и палок — запуская каждый новый продукт ты получаешь больше опыта и делаешь его MVP лучше предыдущего.

P.S. Если бот вам интересен — добавляйте. Соберётся много заявок — сделаю публичную версию.

— — —

Вопросики? Пиши в телеграмм @alexsubbotin. И подписывайтесь на канал Saturday Night Hack.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store