Как на своем компьютере сделать непрерывную работу Телеграм бота

На днях сделал себе телеграм-бота, который закидывает все записи в Notion. Давно об этом мечтал, т.к. в Saved Messages записи теряются и забываются, а в ноушн я залажу каждый день. Теперь я пишу в бота, запись попадает в таблицу-бэклог в ноушне, а затем раз в неделю я этот бэклог разгребаю.

Сделать такого бота мне помог новый сервис автоматизации n8n. Это аналог Zapier, только более мощный, наглядный и бесплатный. Составляем цепочки действий, подцепляем токены, настраиваем триггеры и всё это без кода. На установку и создание бота у меня ушло меньше часа.

У n8n есть 3 опции:

  • Cloud: если не хочется разбираться с установкой, а просто начать пользоваться сервисом. Эта опция платная, от 20$ в месяц.
  • Desktop: ты просто устанавливаешь на компьютер приложение и бесплатно пользуешься. Но чтобы ваша автоматизация работала постоянно, компьютер придется всегда держать включенным.
  • Self-hosted: бесплатная опция, которая потребует свой сервер, домен и немножко кода.

У меня есть свой сервер на Digital Ocean (вот рефка — по ней вам 100$), поэтому я выбрал третью опцию. На сайте n8n есть инструкция для DO, с помощью которой я установил сервис минут за 15.

Удалённое управление ПК через Telegram бота на Python

Дальше расскажу, как я сделал телеграм-бота-пересыльщика.

1. Создаем нового бота через бота BotFather и сохраняем токен

2. Идём в Notion, создаём новую интеграцию и сохраняем токен. Дальше эту интеграцию цепляем к странице с базой данной, в которую хотим сохранять записи.

3. Перейдём к n8n. Скачиваем мой шаблон, который уже содержит нужную нам автоматизацию. Не буду рассказывать про инструментарий — сами поиграетесь.

Создаём своего Telegram-бота без кода с помощью сервиса n8n

4. В левой части экрана, в разделе Workflows, кликаем по Import from file и находим шаблон. Вы увидите уже готовую цепочку действий.

Как создать телеграм бота без кода

5. Теперь нужно завести ключи для токенов бота и ноушена. Кликаем New в Credentials. В поиске находим Telegram API. В Access Token вставляем токен нашего бота из BotFather. В левом углу можно задать имя. Сохраняем.

6. То же самое теперь делаем для ноушена, только теперь ищем Notion API.

7. Возвращаемся к цепочке. Дважды кликаем на Telegram Trigger. Это узел, который слушает не отправлено ли в бота сообщение. В Credential for Telegram API выбираете ваш токен. Если нажать на Listen For Event и отправить в бота сообщение, то оно уже должно появиться справа, в зоне Output. Там же можно увидеть айди вашего личного Telegram-аккаунта — он понадобится на следующем шаге.

8. Переходим к следующему узлу — If. Здесь мы проверяем, что написавший в бота аккаунт, это ваш аккаунт. В Value 2 нужно вставить ваш айди из прошлого шага. В Value 1 мы получаем айди аккаунта, написавшего в бота, и сравниваем его с Value 2.

9. Если значения не равны, то мы попадаем на узел Telegram Message. Этот узел отправит ответное сообщение любому пользователю, кроме вас. В поле Text можно отредактировать это сообщение.

10. Если в бота написали вы, то сценарий перейдет к узлу Notion Action. Дважды кликаем на Notion Action и в Credential for Notion API выбираем токен, который создавали на шаге 6.

11. В поле Database Name or ID у вас должна появиться БД со страницы, подключенной на шаге 2. В блоке Properties, в поле Key Name or ID выбираем свойство, в которое будет попадать запись, скорее всего это будет Name.

12. Всё настроено! Чтобы проверить, нажимаем на кнопку Execute Workflow и пишем в бота. На узлах цепочки должны появиться зеленые галочки, а в вашем ноушене — новая запись.

13. Чтобы автоматизация работала постоянно, нужно в правом верхнем углу переключить в Active. Если переключатель неактивен, то нужно просто задать имя канваса в левом верхнем углу и сохранить.

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

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

Зарегаться в сервисе n8n можно по моей ссылке, за что вам абсолютно ничего не будет! Для него вам вероятно понадобится сервак, и вот тут моя ссылка на Digital Ocean даст вам 100$.

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

Controllerbot: полная инструкция по работе с ботом

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

Как создавать Телеграм Боты правильно

Service Desk

Для начала надо разобраться, для чего создаются боты и, в частности, Телеграмм-боты.

Общение в чатах спровоцировало появление целой ниши для предоставления услуг и принятия обращений. Поскольку общение с пользователями довольно простая с технической точки зрения задача, которую можно автоматизировать, то и появление таких решений не задержалось.

Сегодня можно без проблем нагуглить «Топ 100 ботов для Телеграмм» и т.д. Они могут искать по ключевым словам название фильма или песни, переводить фразы, скачивать музыку, конвертировать картинки и т.д.

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

После регистрации будет сгенерирован специальный ключ (например — 110201543: AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw), с помощью которого, бот сможет получать от сервера Телеграмм все уведомления пользователей. Это позволяет пользователям отправлять сообщения даже в том случае, если бот временно не работает.

Бот может работать в двух режимах:

Автономное приложение — когда запускается скрипт, который на регулярной основе опрашивает сервер Телеграмм. После чего в соответствии с внутренними алгоритмами выполняет различные функции.

Диаграмма работы Телеграмм-Бота:

(Например, вот такой вариант — https://github.com/NadozirnySvyatoslav/telegram-remote-shell — это моя собственная реализация на Python удаленного доступа к компьютеру).

WebHook — данный вариант позволяет настроить Телеграмм-бот таким образом, что все запросы пересылаются на определенный веб-адрес.

Но данный способ имеет определенные ограничения — нужен выделенный веб-сервер, который должен принимать запросы только по протоколу https, что в свою очередь требует валидный SSL-сертификат.

Все сообщения, которые направляются в адрес бота, могут восприниматься как команды, но формально все команды принято начинать слэшем:

Бот может запрашивать месторасположение или контактные данные пользователя:

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

Для упрощения интерфейса с пользователем бот может предложить любые кнопки в интерфейсе мессенджера:

Кроме того, бот может как принимать, так и отправлять файлы (документы, картинки, аудио / видео данные).

Теперь нужно выяснить, что такое правильно, в смысле построения архитектуры программного решения.

Правильная архитектура

Заложить правильную архитектуру программного решения, это как заложить фундамент для дома. Если на фундаменте, предназначенном для 1-этажного домика, начать достраивать 9 этажей, то конечно, что вся конструкция развалится на раз.

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

Чем отличается простой бот от системы и что такое система вообще?

Любая система или программный комплекс состоит из двух основных частей — FrontEnd и BackEnd.

Основная задача ФронтЕнда — обеспечение интерфейса и взаимодействия с пользователем, когда со своей стороны БэкЕнд — это обработка запросов пользователей, администрирования как системы, так и самих пользователей.

С другой стороны — наличие веб-интерфейса не означает, что это ФронтЕнд.

Можно рассмотреть на примере электронного магазина. Если пользователь делает заказ в магазине, то он использует FrontEnd. Для этого есть в наличии каталог товаров. Каждый товар можно детально просмотреть и добавить в корзину. После наполнения корзины пользователь нажимает оформить покупку — и его заказ сохраняется в списке заказов.

Когда администратор магазина заходит под своей учетной записью в систему и просматривает перечень заказов от всех пользователей, он контролирует оплату и наличие товара на складе. А после того отправляет заказ на обработку в состав. Вот таким образом выглядит BackEnd.

Еще по теме:  Кэш картинок из веб Телеграмма

Обычно административная часть, которая отвечает за обновление системы, установки дополнительных модулей и контроль пользователей, является составной BackEnd, но лучше ее отделять в административную часть.

Вот как выглядит такая структура в платежных системах:

Следовательно, при проектировании системы обязательными элементами являются:

  • Модульная система
  • Наличие FronEnd, BackEnd, системы администрирования
  • Возможность расширять функционал программного обеспечения с помощью модулей или плагинов
  • Наличие системы управления пользователями
  • Для каждого пользователя создаются сессии
  • Имеющаяся ролевая система — для разных ролей доступен различный функционал
  • Существующая система доступов, которая позволяет контролировать и ограничивать доступ к различным данных
  • Существующая система контроля сущностями системы (CMDB)
  • Используется реляционная база данных
  • Каждый модуль системы реализовано с помощью архитектурного шаблона — Model-View-Controller
  • Все интерфейсы строятся с помощью шаблонов

Сегодня трудно найти решение, ориентированное на клиентов, которое не использует веб-интерфейс. Это де-факто уже давно стало стандартом. Для построения веб-интерфейсов существует множество готовых систем, содержащих основные компоненты для правильной архитектуры (CMS — Content Management System).

Их основой является фреймворки — или Symfony, или Laravel. Основная их задача — реализовать архитектуру MVC:

Например, для создания бота на Python после 15 минут google.com можно пойти таким путем:

Такой код будет рабочим, но это будет не системный подход.

Системный подход

Создание BackEnd

В качестве БэкЕнда будем использовать самописную CMS на базе Symfony, которая имеет CMDB. CMDB — это по своей сути те же таблицы, но специфического назначения.

В CMDB будут созданы следующие сущности:

Process. Содержит поля — название и процесс в формате XML / BPMN. Это необходимо для того, чтобы не кодировать логику обработки сообщений в коде, а вынести в БэкЕнд, что позволит делегировать эту задачу не программисту, а бизнес-аналитику для эффективного использования. Как показывает практика, одна из самых больших проблем при разработке программного обеспечения — это сбор требований бизнес-аналитиком и донесения их до программистов в виде технического задания. Поэтому в данной задачи будет создан базовый функционал, который не будет напрямую обрабатывать запросы пользователей. Запросы будут обрабатываться верхним уровнем абстракции — «бизнес-процессом». В дальнейшем можно будет предусмотреть различные логики обработки обращений для различных ботов.

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

Клиенты. Содержит поля — номер телефона, имя, фамилия, никнейм, емейл, внутренний номер Телеграмм сервере и т.д.

Эта табличка предназначена для хранения данных пользователей, которые будут пользоваться ботом. Все обращения клиента будут храниться в таблице заявки.

Заявки. Содержит множество полей и предназначена для сохранения непосредственно данных, которые отправил клиент.

В отличие от обычных табличек, каждый CMDB-заявки позволяет присоединять файлы к каждой заявки, а также хранить историю событий связанных с заявкой — или она была принята администратором бота или отклонена, какой статус назначено и т.д.

Основные контроллеры

  • Для обработки запросов от сервера Телеграмм нужен WebHookController, на который будет приходить запрос в формате JSON: < «update_id»: 933862871, «message»: < «message_id»: 462, «from»: < «id»: 549709518, «is_bot» : false, «first_name»: « ud835 udd7e ud … и который будет запускать процесс BPMN на обработку.
  • Для управления процессами нужен ProcessController, который будет обрабатывать отображения списка процессов, создание нового процесса, отображение сохраненного процесса, изменения процесса, сохранения и удаления, что, в свою очередь, будет использовать соответствующие шаблоны для отображения.
  • Для обработки обращений администратором бота необходим TicketController, который позволит отображать список заявок, редактировать заявку, сохранять и удалять, также будет использовать соответствующие шаблоны для отображения.
  • Дополнительно для администратора нужны контролеры — управление пользователями, управление каталогами CMDB, управление доступом и т.д.

В вебхук контроллере надо предусмотреть прием запросов не только от бота, но и от других систем, что позволит запускать процессы на обработку.

Для объектов CMDB «Заявки» и «Процесс» нужно создать по отдельному классу для обеспечения обработки на стороне BackEnd. Поскольку бизнес-процесс содержит всего два поля и основная его задача на данный момент это храниться в системе, то логика работы с сущностью процессов будет описана направления в контроллере.

Еще по теме:  Бот для Телеграм с расписанием на день установить себе

Самая сложная задача, это обработка процесса в формате BPMN. Для этого можно использовать готовое решение, такое как Camunda, Bizagi BPM Suite, jBPM или другие. А можно реализовать свой обработчик. В нашем случае используется язык программирования PHP, то было бы уместно использовать в логике процесса частично синтаксис PHP при реализации своего обработчика процессов.

Стандарт BPMN содержит большое количество элементов и постоянно развивается. Но для решения текущих задач достаточно реализовать только обработку некоторых.

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

Для выполнения каждого Task-а необходимо предусмотреть основной функционал, который можно реализовать в бизнес-процессе:

  • Создание элемента CMDB
  • Загрузка элемента CMDB в контекст процесса
  • Обновления элемента CMDB из контекста процесса
  • Удаление элемента CMDB
  • Присоединение к элементу CMDB файлов с веб-ссылок
  • Выполнение текстового поиска (упрощение логики для автоматизации)
  • Выполнение запроса REST / API, который будет обращаться на сервер Телеграмм для отправки сообщений пользователю

Таким образом, логика выглядит следующим образом:

Настал черед описать бизнес-процесс:

Вот так формируется запрос на отправку сообщения клиенту с использованием АРІ-Телеграмм:

Через контроллер WebHookController формируется переменная $post, которая передается в контекст процесса. В результате, когда пользователь отправляет сообщение боту, то эта переменная содержит все необходимые данные, такие как текст сообщения в $post-> message-> text, или идентификатор чате — $post-> message-chat-> id, или данные пользователя — $post-> message-> contact-> phone_number.

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

Таким же образом выполняется проверка условия при разветвлениях в процессе.

Запуск бота и обработка обращений

Для начала загружаем процесс в систему.

Добавляем в базу бота и ему нужно назначить номер процесса:

Добавляем вебхук по ссылке https://api.telegram.org/bot831869419:asldkjljLKJLJKsdaldkjLKJlkjSLKJLKJSD/setWebhook?url=https://bot.servicedesk.site/webhook?token=831869419:asldkjljLKJLJKsdaldkjLKJlkjSLKJLKJSD

И уже можно переходить к самому Телеграмм-клиенту протестировать как работает бот.

После регистрации пользователя, пользователь может подать обращение.

А что с стороны BackEnd?

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

Преимущества правильной архитектуры

1. Система может масштабироваться без кардинального рефакторинга. То есть в процессе развития не придется менять фундамент, а есть возможность улучшать. Любые изменения в любом месте системы не приведут к глобальной переделке системы.

2. Для изменения логики FrontEnd-а не нужно привлекать программистов. Всю логику может обеспечить бизнес-аналитик сразу в бизнес-процессе, который в отличие от чистого кода визуально легче воспринимается и не приводит к логических ошибок.

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

4.Функционал системы может расширяться в самые неожиданные стороны, например, если внести изменения в ядро ​​Symfony — Symfony Component HttpKernel HttpKernel, то при выполнении запросов можно перенаправить на процессы перед или после загрузки контроллеров. То есть всю логику работы с формами можно описать процессами, при наличии такого процесса, что позволит кардинально пересмотреть подход к разработке как сайтов, так и систем в целом. Как такие: регистрация пользователей, изменение данных в заявках, обработка сущностями CMDB и т.д.

5. В системе можно подключать различные категории пользователей и давать доступ им к данным, за которые они должны отвечать.

6. Так, как сделано для одного бота, то можно подключать множество различных и ботов, и сервисов.

Источник: www.servicedesk.site

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