Управление задачами и проектами требует организации и автоматизации процессов. Интеграция популярного приложения для ведения заметок и управления задачами Notion с мессенджером Telegram через создание специализированного бота может значительно упростить эти процессы. Эта статья покажет, как создать такого бота, объяснит его возможности и преимущества использования.

Что такое Notion?

Notion — это универсальное приложение для создания заметок, управления задачами, организации баз данных, планирования проектов и многое другое. Это инструмент, который позволяет пользователям настраивать рабочие пространства по своему усмотрению, используя блоки содержимого, такие как тексты, списки, таблицы и медиафайлы.

Подготовка

Перед началом работы нам потребуется:

  1. Учетная запись Telegram.
  2. Учетная запись Notion и доступ к API.
  3. Сервер или локальный компьютер для запуска бота.
  4. Библиотека Python для работы с Telegram API, например python-telegram-bot.
  5. Библиотека Python для работы с Notion API, например notion-client.

Регистрация и настройка в Telegram

  1. Отправьте сообщение /newbot отцу всех ботов — BotFather в Telegram.
  2. Следуйте инструкциям для создания и получите токен API, который будет использоваться в коде для взаимодействия.

Настройка доступа к Notion

  1. Зайдите в настройки и создайте интеграцию, чтобы получить внутренний токен.
  2. Предоставьте созданной интеграции доступ к нужным страницам или базам данных в Ноушн.

Разработка бота

Основной функционал

  • Получение задач: он может запрашивать список текущих задач из Notion и отправлять их пользователю.
  • Создание новой задачи: пользователи могут добавлять таски в Notion.
  • Уведомления: он может отправлять уведомления о предстоящих задачах или изменениях статуса.

Пример кода

from telegram import Bot, Update

from telegram.ext import Updater, CommandHandler, CallbackContext

from notion_client import Client

# Инициализация клиентов API

telegram_bot_token = 'ВАШ_ТЕЛЕГРАМ_ТОКЕН'

notion_token = 'ВАШ_NOTION_ТОКЕН'

bot = Bot(token=telegram_bot_token)

updater = Updater(token=telegram_bot_token, use_context=True)

notion_client = Client(auth=notion_token)

def start(update: Update, context: CallbackContext):

update.message.reply_text('Привет! Я бот для управления задачами в Notion.')

def get_tasks(update: Update, context: CallbackContext):

tasks = notion_client.databases.query(**{"database_id": "YOUR_DATABASE_ID"})

for task in tasks['results']:

update.message.reply_text(task['properties']['Name']['title'][0]['text']['content'])

# Добавление команд в обработчик

updater.dispatcher.add_handler(CommandHandler('start', start))

updater.dispatcher.add_handler(CommandHandler('tasks', get_tasks))

# Запуск

updater.start_polling()

updater.idle()

Расширенные функции

Расширение функциональности может улучшить взаимодействие пользователя с системой управления. Вот несколько возможностей, которые можно реализовать:

Интерактивное управление

Позволяет пользователям изменять детали – статус, приоритет или сроки, прямо через интерфейс Telegram. Это можно реализовать с помощью callback-кнопок, которые отправляют специфические команды.

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

def task_buttons(update: Update, context: CallbackContext):

task_id = update.callback_query.data

keyboard = [

[InlineKeyboardButton("✅ Завершить", callback_data=f'complete_{task_id}')],

[InlineKeyboardButton("❌ Отменить", callback_data=f'cancel_{task_id}')],

[InlineKeyboardButton("⏰ Отложить", callback_data=f'delay_{task_id}')],

]

reply_markup = InlineKeyboardMarkup(keyboard)

update.callback_query.message.reply_text('Выберите действие:', reply_markup=reply_markup)

def handle_button(update: Update, context: CallbackContext):

query = update.callback_query

query.answer()

# Обработка различных команд

data = query.data

if data.startswith('complete_'):

task_id = data.split('_')[1]

# логика завершения

query.edit_message_text(text="Задача завершена.")

# Добавить обработку других команд

updater.dispatcher.add_handler(CallbackQueryHandler(handle_button))

Интеграция с календарем

Дополните функционал возможностью синхронизации тасков с календарем пользователя. Это позволяет получать напоминания о сроках выполнения.

import datetime

def add_to_calendar(update: Update, context: CallbackContext):

task_id = context.user_data['current_task_id']

task = notion_client.pages.retrieve(task_id)

task_due_date = task['properties']['Due']['date']['start']

due_date = datetime.datetime.strptime(task_due_date, '%Y-%m-%d')

# Добавить в календарь пользователя

update.message.reply_text(f"Задача добавлена в календарь на {due_date.strftime('%d %B %Y')}")

Пользовательский интерфейс и взаимодействие

Улучшение пользовательского интерфейса помогает сделать взаимодействие с ботом более интуитивно понятным и приятным.

Интерактивные кнопки и меню

Использование inline-клавиатур упрощает навигацию и выполнение команд, предоставляя пользователю графические кнопки для интеракции.

def main_menu(update: Update, context: CallbackContext):

keyboard = [

[InlineKeyboardButton("📝 Просмотреть задачи", callback_data='view_tasks')],

[InlineKeyboardButton("➕ Новая задача", callback_data='new_task')]

]

reply_markup = InlineKeyboardMarkup(keyboard)

update.message.reply_text('Выберите действие:', reply_markup=reply_markup)

updater.dispatcher.add_handler(CommandHandler('start', main_menu))

Кастомизация ответов

Настройка текстовых ответов бота для каждого пользователя или группы пользователей может сделать взаимодействие более персонализированным.

def personalized_greeting(update: Update, context: CallbackContext):

user_name = update.effective_user.first_name

update.message.reply_text(f'Привет, {user_name}! Чем могу помочь сегодня?')

updater.dispatcher.add_handler(CommandHandler('greet', personalized_greeting))

Реализация этих функций повысит эффективность бота и сделает его использование более удобным и приятным для конечных пользователей.

Заключение

Интеграция Notion с Telegram через создание бота обеспечивает удобный и эффективный способ управления задачами и проектами непосредственно из вашего любимого мессенджера. Это позволяет сократить время на переключение между приложениями и увеличить продуктивность.