Бот таск менеджер Телеграм

Данное техническое задание предполагает разработку MVP сервиса по управлению задачами (таск-менеджера) — экосистему, работающую внутри мессенджера Telegram и имеющую самостоятельное Веб-приложение, доступ к которому дается пользователю через Telegram-бота при помощи Telegram Web Apps (Веб-приложения внутри телеграм). С этим нововведением от Telegram мы хотим подключить к боту стороннее web-приложения, которое будет открываться в дополнительном окне внутри телеграмма.

Основные функции продукта:
● возможность ставить задачи, через телеграмм-чат команды и личные сообщения,
● контролировать выполнение задач,
● проводить их изменение и отслеживать этапы работы при помощи telegram-бота и web-приложения в телеграм боте (telegram web apps).

В качестве прототипареференса для нашего проекта со стороны TelegramBot использовать будем kindreminderbot.com, со стороны WebApp будет прототип в Figma, для общего понимания, стандартный таск менеджер на подобии weeek.net easy-task.ru и тд.

Телефонные обзвоны с использованием Telegram Bot или встроенного таск-менеджера

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

— Рассматриваем разработчиков с опытом работы от 5 лет, способных взять продукт под ключ или взять на себя полную реализацию одной из двух частей продукта:
1. WebApp
2. Telegram Bot

— Важен имеющийся опыт: кейсы с подобными проектами, опыт работы в таком же направлении или с таким же уровне сложности проекта.

— Ищем человека, заинтересованного в разработке продукта и готового на этапе сотрудничества погрузиться в его разработку с головой, а в дальнейшем при комфортной работе в обе стороны остаться с нами в проекте, будь то аутсорсинг или в формате-remote

Источник: www.fl.ru

Бот в качестве таск-менеджера?

Бот в качестве таск-менеджера?

2016-07-12 в 7:30, admin , рубрики: ERP-системы, task management, telegram, управление проектами, метки: бот

Предлагаю читателям «Хабрахабра» историю о том, как я искал удобный таск-менеджер для работы среди множества готовых решений и в итоге остановился на самописном.

Вам будет интересно почитать, если вы:

  • Не довольны своим таск-менеджером, так как он очень сложный/неудобный
  • Работаете с не большой командой
  • Часто взаимодействуете с коллегами через месенджеры, и вам хотелось бы иметь таск-менеджер под рукой
  • Хотели бы начать знакомство с простым и понятным таск-менеджером

Решение распространяется под лицензией GNU GPL, ссылка на репозиторий будет в конце статьи.

Програмистские мтарства

С того времени, когда я, будучи начальником отдела, активно искал удобный и понятный таск-менеджер для своей команды прошло уже около двух лет. Я много чего перепробывал, всего и не упомнишь. Использовали мы и бесплатные решения с минимальной функциональностью, и платные продукты с возможностью дорабатывать и расширять функционал, и известные онлайн-платформы, столь любимые многими. Проблема всегда одна — задачи обсуждаются и формируются в месенджере, а ставятся в браузере. Мне это всегда казалось не удобным, ибо в ходе долгого обсуждения нового функционала и «разбора полетов» с командой, часто просто нет времени регистрировать все всплывающие задачи в стороннем решении, а искать их в истории месенджера не удобно.

Так же я заметил одну интересную вещь — я никогда не использую таск-менеджер более чем на 10-20% от его возможностей. Я не пользуюсь декомпозицией, диаграммой Ганта, приоритетами и датой окончания задачи. Как правило все эти функции постепенно становятся невостребованными и наша команда использует только две из них — постановка задачи и ее маркеровка для поиска.

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

Таск-бот

Долго обдумывая функционал идеального, по моему мнению, таск-менеджера, я набросал себе простенькое ТЗ и решил реализовать придуманное в виде бота для Telegram. Идея бота довольна проста — бот должен регистрировать задачи, помечая их метками для поиска, а после исполнения задачи, бот должен помечать ее как завершенную. Для удобства использования, бот был снабжен двумя важными функциями: комментирование ранее созданной задачи и оповещение об изменении задачи.

Еще по теме:  Как забанить человека в Телеграмме в группе навсегда

Решение было написано мной за несколько ночей в свободное от работы время. В качестве языка был использован PHP, так как это мой основной (на данный момент) ЯП, а так же несколько открытых пакетов и Doctrine 2. Бот пока не использует webhook для получения сообщений от пользователей, а работает на простом полинге. Такое решение было выбрано мной дабы не усложнять реализацию на начальном этапе, ведь будущее проекта еще туманно. Само решение доступно на GitHub, но на время бета теста я подготовил рабочий демо-стенд, который вы сможете использовать для ознакомления с ботом.

Возможности

Функционал бота разделен на две категории: работа с метками и работа с задачами. Метки используются для поиска задач по ключевым словам, а задачи аккумулируют все остальные данные.

Работа с метками

Рассмотрим пример работы с метками. Предположим вы решили создать несколько задач для вашей команды, занимающийся проектом «Зевс». Между вами и ботом будет следующий диалог:

Вы: /ms зевс backend Бот: ок Вы: /t Новая задача Бот: ок Вы: /t Еще одна задача Описание задачи Бот: ок Вы: /ts Бот: 1 — Новая задач 2 — Еще одна задача

Все создаваемые вами задачи будут помечены вашими текущими метками (зевс и backend), которые вы задали с помощью команды /ms .

Текущие метки индивидуальны для каждого пользователя. Это позволяет работать с ботом команде разработчиков и не мешать друг другу. Для получения списка ваших текущих меток используется команда /ms (без аргументов), а для получения списка всех меток, используется команда /ms * .

Работа с задачами

Задача включает следующие данные:

Рассмотрим пример работы с задачами. Предположим ваша команда приступила к выполнению поставленных ранее задач:

Разработчик: /ts Бот: 1 — Новая задач 2 — Еще одна задача Разработчик: /t 1 Бот: Старт: 12.07.2017 Метки: зевс backend Новая задача Разработчик: /t 1 c Комментарий разработчика Бот: ок Разработчик: /t 2 t Новое название для задачи Бот: ок Разработчик: /d 2 Бот: ок

Как видно из примеров, команда /t позволяет не только создавать задачи, но так же просматривать их и редактировать. При редактировании задачи, помимо идентификатора целевой задачи используется флаг, определяющий редактируемое поле. Доступны следующие флаги:

Для завершения задачи используется команда /d . Завершенные задачи автоматически помечаются «виртуальной» меткой «выполнено», что позволяет получить к ним доступ в будущем, на пример так:

Вы: /ts выполнено зевс backend Бот: 2 — Новое название для задачи

Так же к «виртуальным» меткам относится «сегодня». Этой меткой помечаются все созданные или завершенные за последние сутки задачи.

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

  • Изменение названия задачи
  • Изменение описания задачи
  • Комментирование задачи
    Если вы подписаны на оповещения конкретной задачи, бот напишет вам в личный чат при каждом изменении и укажет, что и как было изменено у конкретной задачи.

Работа с пользователями

Просмотреть все задачи, участниками которых являются конкретные пользователи так же просто, ведь используются обычные метки:

Послесловие

Скажу честно, опробовать бота на реальном проекте мне еще не довелось. Надеюсь сделаю это после отпуска. Если вас заинтересовало данное решение, вот несколько ссылок:

Источник: www.pvsm.ru

Как создать тайм-трекер с помощью API Telegram Bot и веб хуков

Как создать тайм-трекер с помощью API Telegram Bot и веб хуков

В данной статье вы узнаете, как вести учет рабочего времени с помощью Telegram Bot API и механизма веб хуков (англ. Webhooks). Мы разберем этапы создания, настройки и развертывания тайм-трекера. Но сначала хотелось бы рассказать, как эта идея пришла мне в голову. Если же вас интересует только техническая часть повествования, переходите сразу к следующему разделу.

Введение

Как-то в разговоре моя жена сказала, что ей нужно написать почасовой отчет о работе, проделанной за 3 последних месяца, и определить точное количество отработанных часов. Не имея в распоряжении никакого инструмента для регистрации рабочего времени, ей было довольно сложно рассчитать эти показатели по старым заметкам и чатам. Тогда она поддержала предложение своего руководителя создать группу в WhatsApp, куда будет отправлять сообщение в момент начала и окончания работы. Имеющиеся сообщения упростят составление подобных отчетов.

Еще по теме:  Как снести частный канал в Телеграме

Идея отличная: телефон практически всегда под рукой, так что ничего не стоит просто написать слова “начало”/“окончание” или что угодно. Я вдохновился этой идеей и задумался о способах ее реализации. Часами я искал хороший инструмент для учета рабочего времени, руководствуясь следующими обязательными условиями: 1) он должен легко вводить сообщение “Задание выполняется” или “Задание готово”; 2) он работает на всех имеющихся устройствах.

Я опробовал несколько соответствующих приложений, которые запускались на компьютерах Mac, Linux и смартфонах, но ни одно из них меня не зацепило. Тогда я вернулся к способу учета времени, которым жена пользовалась на тот момент, и еще раз осмыслил классную задумку прописывать в мессенджере время начала и окончания работ. Изучив материал по теме ботов и веб хуков, я создал инструмент на основе Telegram.

Суть идеи состоит в создании Telegram-бота и реализации веб хуков для специально отформатированных сообщений, которые сохраняют временные метки и описания задач в формате CSV. Далее рассмотрим его принцип действия.

Создание проекта

Прежде всего, я начал искать существующие библиотеки и примеры использования веб хуков Telegram. Я нашел на GitHub один модуль — node-telegram-bot-api. Решил им воспользоваться по двум причинам: из-за его простоты и моей любви к Node. Поскольку он предоставлял библиотеку, необходимо было создать приложение Node. Отдавая предпочтения TypeScript, я создал проект соответствующим образом.

Есть один классный инструмент под названием typescript-starter , который запускается как исполняемый файл npm через npx typescript-starter . Он задает вопросы, например уточняет намерение создать библиотеку или приложение, последнее как раз представляет наш случай. Создав проект и сохранив значения по умолчанию в диалоговом окне установки typescript-starter , я задал конфигурацию запуска для отладки в VS Code. В результате ряда экспериментов она приняла следующий вид:

«type»: «node»,
«request»: «launch»,
«name»: «Launch Program»,
«program»: «$/build/main/index.js»,
«console»: «integratedTerminal»,
«preLaunchTask»: «tsc: build — tsconfig.json»,
«outFiles»: [
«$/out/**/*.js»
]
>

Основная часть кода находится в src/main/index.ts . Чтобы настроить веб хуки для сообщений, отправляемых в Telegram-бот, node-telegram-bot-api предлагает отличный шаблон, который я немного адаптировал. Сначала установил нужные пакеты:

Код Telegram-бота

Далее я изменил импорты из кода примера с require на import с целью обеспечения безопасности типов для импортируемого кода и добавил свой токен. Код выглядел следующим образом и был готов к тестированию:

С помощью хуков on и onText вызываются функции для каждого входящего сообщения ( on ) или сообщений, совпадающих с определенным регулярным выражением ( onText ). В этих функциях код отвечает, отправляя сообщения обратно в соответствующий чат. На мой взгляд, библиотека предоставляет отличный уровень абстракции. Итак, все готово к тестированию.

Сначала я создал бота: перешел в Telegram (или Web Telegram), открыл чат в BotFather (по ссылке t.me в документации), написал /newbot , дал ему имя и имя пользователя в соответствии с требованиями. BotFather предоставил токен, который присваивается const token в начале кода. Затем запустил бота Telegram API посредством ранее добавленной команды запуска в VS Code.

Далее открыл новый чат в боте. Для этого прошел по ссылке, полученной из BotFather, и нажал на Start в правом верхнем углу. После этого я смог протестировать веб хуки, отправив боту /echo Hello . Он ответил Hello (через функцию onText ) и прислал другое текстовое сообщение Received your message , т.е. сообщение получено.

Отлично! Теперь сделаем код более функциональным.

Добавление обработчиков и кода для учета рабочего времени

Как ранее упоминалось, цель проекта — сохранить результаты учета времени в формате CSV для последующего редактирования в Excel. В Node работать с файлами CSV очень просто. Вместо того, чтобы воспользоваться одной из многочисленных библиотек, предназначенных для решения этой задачи, я решил ради интереса написать все с нуля. Для своего прототипа выбрал следующие команды бота:

  • /work $message -> начать работу над задачей $message ;
  • /done -> завершить последнюю начатую задачу;
  • /state -> показать состояние последней задачи (начато или завершено);
  • /print -> записать весь CSV в чат.
Еще по теме:  Как зделать 2 аккаунта на один номер в Телеграмме

Для чтения и записи CSV были реализованы 2 функции:

const getEntries = async () => if (!fs.existsSync(csvFilePath)) fs.writeFileSync(csvFilePath, «»);
>

const val = fs.readFileSync(csvFilePath).toString();
const entries = [];
if (val == «») return entries;
>
val.split(«n»).forEach((row, index) => if (row === «» || index == 0) return;
>
const [work, startDate, endDate, duration] = row.split(delimiter);
const entry = work,
startDate,
endDate,
duration
>;
entries.push(entry);
>);
return entries;
>

const writeFile = (entries) => let str = «work;startDate;endDate;duration;n»;
entries.forEach(e => str += Object.keys(e).map(k => e[k]).join(delimiter);
str += ‘n’;
>);
fs.unlinkSync(csvFilePath);
fs.writeFileSync(csvFilePath, str);
>;

Функция getEntries возвращает содержимое CSV в виде объектов JS, а функция writeFile сохраняет объекты JS в файл CSV. Таким образом, нет никакой реальной необходимости использовать библиотеку. С помощью этих 2-х функций были реализованы 4 ранее упомянутых обработчика:

bot.onText(//work (.+)/, async (msg, match) =>
const chatId = msg.chat.id;
const work = match[1]; // перехваченный «whatever»
const startDate = new Date();
const entries = await getEntries();
entries.push( work,
startDate: startDate.toJSON(),
endDate: null,
duration: null,
>);
writeFile(entries);

bot.sendMessage(chatId, `You started $ at $. Go ahead!`);
>);

bot.onText(//done(.*)/, async (msg, _match) => const chatId = msg.chat.id;
const endDate = new Date();

const entries = await getEntries();
if (entries.length < 1) bot.sendMessage(chatId, `You didn’t start any work that can be ended. Uff.`);
return;
>
const targetEntry = entries[entries.length — 1];
targetEntry.endDate = endDate.toJSON();
const startDate = new Date(targetEntry.startDate);
const diff = format(endDate.valueOf() — startDate.valueOf(), < leading: true, >);
targetEntry.duration = diff;

writeFile(entries);

bot.sendMessage(chatId, `You finished $ at $. It took $. Congrats!`);
>);

bot.onText(//state(.*)/, async (msg, _match) => const chatId = msg.chat.id;
const endDate = new Date();

const entries = await getEntries();
if (entries.length == 0) bot.sendMessage(chatId, `You don’t have any work saved yet. Please start by using /work $myTodo`);
return;
>
const targetEntry = entries[entries.length — 1];
if (!targetEntry.endDate) bot.sendMessage(chatId, `Your current task is $ from $.`);
return;
>
bot.sendMessage(chatId, `You recently finished $ at $. It took $.!`);
>);

bot.onText(//print(.*)/, async (msg, _match) => const chatId = msg.chat.id;

const entries = await getEntries();
let str = «work;startDate;endDate;duration;n»;
entries.forEach(e => str += Object.keys(e).map(k => e[k]).join(delimiter);
str += ‘n’;
>);
bot.sendMessage(chatId, str);

>);

Команда work добавляет запись с начальной датой startDate и соответствующий текст, внесенный в /work . Команда /done проверяет, есть ли в файле хотя бы одна запись, и устанавливает дату окончания endDate и продолжительность. Аналогично функционируют обработчики /state и /print , выполняя вышеописанные действия. Вот и все!

Кода не так много, но зато какое классное чувство испытываешь при работе с этим инструментом! Я запустил его в режиме отладки и убедился, что все функционирует как надо. Теперь переходим к последнему этапу: развертывание.

Развертывание инструмента для учета времени в Telegram

Я добавил Dockerfile с многоэтапной сборкой для запуска на любом хосте. Также для развертывания можно передать токен как переменную env или что-то подобное. Самый простой способ запустить его на сервере (с настройкой Docker) — отправить свой репозиторий на сервер, а затем создать и запустить контейнер (после изменения токена на токен бота):

  • docker build -t telegram-timetracker:latest ;
  • docker run -ti —rm telegram-timetracker:latest ;

Можно установить токен через переменную env во избежание редактирования кода, но этим мы добьемся лишь незначительной оптимизации. Весь репозиторий находится по ссылке. Как по мне, так это превосходный способ вести учет выполнения задач.

  • Как создать Telegram бота с помощью Python
  • Telegram-бот с помощью таблицы Google
  • Создаем бота клиентской службы с помощью Python, Flask и Pinecone

Источник: nuancesprog.ru

Рейтинг
( Пока оценок нет )
Загрузка ...