На днях сделал себе телеграм-бота, который закидывает все записи в 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. Скачиваем мой шаблон, который уже содержит нужную нам автоматизацию. Не буду рассказывать про инструментарий — сами поиграетесь.
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-кнопки и реакции в сообщения.
Как создавать Телеграм Боты правильно
Для начала надо разобраться, для чего создаются боты и, в частности, Телеграмм-боты.
Общение в чатах спровоцировало появление целой ниши для предоставления услуг и принятия обращений. Поскольку общение с пользователями довольно простая с технической точки зрения задача, которую можно автоматизировать, то и появление таких решений не задержалось.
Сегодня можно без проблем нагуглить «Топ 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