Я уже писал ранее, что Notion выпустили свое API и я написал интеграцию с Telegram (подробнее тут) и я был несказанно рад этой новости! Писал я про это уже 4 месяца назад и я, сразу-же, сделал себе на коленке небольшого бота, который ставит мне задачи и через которого другие люди также могут ставить мне задачи.
Я очень люблю Notion - я пользуюсь им уже почти год и все больше и больше внедряю его в свои процессы. Вот уже несколько месяцев все свои личные задачи я веду через него. Я стараюсь прийти к тому, что в Notion лежали все задачи, которыми мне нужно заниматься.
Видео-версию можно увидеть на моем YouTube.
Но я для себя заметил, что добавление задач отнимает много времени - зайти в notion, открыть нужную доску, дождаться пока загрузится страница, добавить задачу. Разумеется, мой ленивый разум быстро нашел в этом причину чтобы не вести задачи. Но потом появилось API и я быстро накидал себе бота, который добавляет задачу на каждое сообщение в Telegram.
В рамках данного поста я поделился своим способом достижения этого результата на Typescript.
Первая версия бота
Первое, что я сделал с его появлением - простого Telegram бота, через которого мне можно ставить задачи. Работает он простым образом:
- Я пишу Telegram боту любой текст
- В notion, в моем списке задач, создается карточка, в названии которого лежит текст сообщения
- В ответ бот присылает мне оповещение о том, что задача создана и передает ссылку на карточку
- Также боту может написать человек, которому я дал право ставить мне задачи. Это тоже приводит к созданию карточки задачи с пометкой автора задачи.
Дальше этого бота расширять можно сколь угодно много. Но сегодня мы с вами сделаем простую базовую версию.
Подключение к Notion API
Для начала нужно получить token для работы. Сделать это можно по инструкции здесь. Также опишу этот процесс здесь:
- notion.so/my-integrations переходим по этой ссылке
- Нажимаем New Integration
- Придумываем название интеграции
- Попадаем на страницу с вашим токеном
Дальше этот токен можно скопировать кнопкой Copy и использовать его в своем приложении.
Создаем базу данных задач
Дальше нужно в любом удобном вам месте в Notion создать базу данных с Kan Ban представлением, добавить поля статуса и источника задачи. Или можете просто скопировать мой тестовый список задач и использовать его как шаблон.
Отлично! Теперь у нас есть база задач, которую вы можете наполнять руками через Notion! Но мы здесь с вами не для этого. Теперь нам необходимо настроить интеграцию между notion и telegram ботом.
Заготовка Telegram бота на typescript
Я подготовил проект, в котором реализовал базовую логику интеграции. Вы можете посмотреть его код на GitHub (версия 0.0.1). Внутри есть readme.md, в котором описано как запускать бота, а я пройдусь по основным моментам работы интеграции.
Базовая инициализация бота
const bot = new Telegraf(process.env!.TELEGRAM_BOT_TOKEN) const telegramownerid = Number(process.env!.TELEGRAM_OWNER_ID) const allowTelegramIds = process.env!.TELEGRAM_ALLOW_IDS.split(',').map(e => Number(e)) console.log({ allowTelegramIds, telegramownerid }) bot.start((ctx) => ctx.reply('Welcome')) bot.on('message', async function (ctx: Context) {
В рамках данной инициализации мы используем следующие переменные:
- TELEGRAM_BOT_TOKEN - токен, который мы получили через @BotFather
- TELEGRAM_OWNER_ID - Мой личный Telegram Id, чтобы можно было идентифицировать меня, как администратора
- TELEGRAM_ALLOW_IDS - строка, где, через запятую, перечислены Telegram ID людей, которым доступна постановка мне задач.
Обработка входящего сообщения
Сообщение, которое мы отправляем боту, приходит на наш сервер в виде объекта Context, у которого есть поле message с полями:
- id сообщения
- текст сообщения
- информация об отправителе: имя, username и, самое главное, id
Разумеется есть много чего еще, но нам достаточно этого набора полей.
Подготовка объекта на отправку в notion
Для отправки задачи в Notion мы создаем объект
На 3 строчке есть переменная taskDb
, туда нам необходимо разместить ID вашей базы данных. Получить её можно из ссылки. Где её взять можете увидеть из скрина ниже.
На 23 строчке в примере в переменную tgAuthor
, в моем примере, подставляется username пользователя, чтобы потом можно было сообразить. Также можно увидеть другие поля в этом объекте:
- Name - название задачи,
- TGAuthor - автор задачи,
- Status - статус, в который мы отправляем задачу. В нашем примере это Backlog,
- Source - источник задачи. Проставляем Telegram.
После подготовки объекта мы отправляем POST запрос на метод создания страницы (документация тут). Поскольку мой пример написан на Typescript, я использую NPM пакет @notionhq/client.
После отправки запроса, в Notion, создается карточка задачи, с которой уже можно работать как вам угодно.
Обработка сообщений от других пользователей
В первой же версии я захотел сделать так, чтобы мне могли ставить задачи другие люди. Для решения этой задачи я добавил в env переменные значение TELEGRAM_ALLOW_IDS, где, через запятую, перечислил идентификаторы Telegram пользователей, которые могут ставить мне задачи.
Когда они ставят мне задачу бот также создает задачу в Notion и оповещает меня о том, что кто то осчастливил меня новой задачей.
Вместо заключения
Таким образом я получил себе верного помощника, который позволяет мне забывать меньше задач, а другим быть чуть более уверенным, что я не забуду про то, о чем меня попросили.
Бот активно дорабатывается и расширяется. Так что, в ближайшее время, будет еще контент про то, как можно автоматизировать свои рутинные действия.
Если вам интересны темы интеграции с Notion, то предлагаю прочитать пост про интеграцию Notion с Google Calendar
До связи!