Я сделал бота для заметок и задач в Telegram — TG Notion. Недавно добавил общие доски, которые работают прямо в чате. В этой статье расскажу, как это устроено технически, с чем пришлось сильно повозиться и что ещё не готово.
До общих досок бот уже умел личные заметки и задачи. Пользователь заходит, пишет заметку, ставит задачу с чекбоксом — всё как в обычном блокноте, только внутри Telegram. Выглядит примерно так:
Потом я подумал,что для командной работы или просто для компании друзей было бы прикольно использовать общие доски,как для идей,так и для заметок. Использовать их в чатах телеграм.
Сейчас это работает так: Создаёшь доску, выбираешь тип (заметки или задачи), нажимаешь «Поделиться» — и в выбранный чат падает карточка с названием доски и тремя кнопками: «Добавить», «Открыть», «Обновить».
Все участники чата видят эту карточку. Можно добавить заметку или задачу — она появится у всех. Кнопка «Обновить» показывает актуальный список. Кнопка «Открыть» открывает полный интерфейс Mini App, где можно редактировать и удалять свои записи.
Технически это работает через inline‑режим Telegram: бот получает запрос, находит доску в базе и через answerInlineQuery возвращает карточку с кнопками. Кнопки «Добавить» и «Открыть» — это прямые ссылки на Mini App с параметрами. “Обновить” — callback, который перерисовывает сообщение.
Бот написан на Node.js с библиотекой node‑telegram‑bot‑api. База — SQLite через better‑sqlite3, без ORM, чистые SQL‑запросы. Хостится на Bothost. Mini App — отдельная HTML/CSS/JS страница, которая открывается внутри Telegram через WebApp API.
Изначально бот был на Python с aiogram, но Bothost с ним не сдружился — вебхуки работали через раз. После переезда на Node.js проблемы с хостингом ушли. Плюс better‑sqlite3 работает синхронно и быстро, без отдельных серверов для базы.
Код выложен на GitHub, репа открытая: https://github.com/Elrick‑from‑Malnibone/tg‑notion‑node
С чем пришлось повозиться…
Начну с того, что часть проблем ушла после переезда на Node.js. На Python+aiogram я долго не мог заставить Bothost нормально работать с вебхуками — платформа их вроде поддерживает, но на практике всё упиралось в 502. После перехода на Node.js эти проблемы исчезли. Но появились другие.
Вебхуки и allowed_updates. Telegram требует, чтобы для inline‑режима бот принимал обновления типов inline_query и callback_query. Bothost при каждом деплое сбрасывал allowed_updates до дефолтных, и бот переставал видеть inline‑запросы. Я не мог понять, с чего это карточка не отправляется в чат?? Оказалось надо принудительно указывать allowed_updates при установке вебхука прямо в коде:
bot.setWebHook(url, { allowed_updates: ['message', 'inline_query', 'callback_query']});
502 ошибка. Даже после фикса вебхука, getWebhookInfo показывал 502 Bad Gateway. Помогло добавление health‑check эндпоинта /health, который просто отвечает 200 OK. Заодно добавил проверку req.method === ‘POST’ в обработчик вебхука — Telegram шлёт только POST, а Bothost при проверке стучался GET’ом и получал непонятный ответ.
if (pathname === '/health' && req.method === 'GET') { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ ok: true })); return;}
web_app внутри inline_keyboard. Хотел сделать кнопку «Добавить» через web_app, чтобы сразу открывать Mini App. Не работает. Telegram не поддерживает web_app внутри inline_keyboard. Пришлось переделать на прямые ссылки с параметром startapp.
{ text: '➕ Добавить', url: `https://t.me/Telega_notion_bot?startapp=board_add_${hash}` }
Авторегистрация юзеров. Пользователи, которые заходили в доску по ссылке, не регистрировались в боте — я их не видел в статистике. Добавил проверку и авторегистрацию в трёх местах: inline_query, callback_query и при добавлении заметки через API. Наверное потерял много юзеров. А может и нет,как щас узнаешь.
В итоге
Сейчас бот умеет:
-
Личные заметки и задачи (с чекбоксами, тёмной/светлой темой)
-
Общие доски двух типов: для заметок и для задач
-
Доска появляется в чате как inline‑карточка с кнопками «Добавить», «Открыть», «Обновить»
-
Права доступа: редактировать и удалять записи может только автор
-
Авторегистрация пользователей при входе в доску (не нужно жать /start)
Что ещё не умеет,но скоро будет:
-
Добавление задач прямо из чата (пока открывается Mini App)
-
Галочки в inline‑карточке задач, которые можно отмечать без открытия Mini App
-
Английский язык
-
напоминалки и дедлайны
-
Нормальное превью ссылки на доску (OG‑теги)
Сейчас в моём канале @system_develope идёт голосование за следующую фичу. Подписчики решают, что я буду пилить дальше. Так что добро пожаловать, буду рад каждому голосу!).
ссылка на оригинал статьи https://habr.com/ru/articles/1065448/