- PVSM.RU - https://www.pvsm.ru -
Периодически возникает желание получать уведомления, иметь возможность настраивать источник, фильтровать сообщения по темам, и писать как можно меньше кода. Например, присылать себе картинку/цитату/слово дня или дельту по изменениям ордеров на бирже. В результате получился универсальный инструмент - бот [1] и персональное АПИ для отправки сообщений в Telegram. Прошу под кат.
Сервис состоит из следующих компонентов:
MQTT-брокера
REST API, которое его оборачивает и позволяет отправлять сообщения
Telegram-бота, который подписан на MQTT и пересылает сообщения
MongoDB для хранения пользователей и подписок
Отправка сообщений организована вокруг топиков, через бота [1] можно подписаться/отписаться. При этом реальное имя топика будет выглядеть так: <telegramId>/<topic>
, поэтому каждый пользователь получает свое пространство имен и API-ключ.
Для отправки сообщений, нужно сделать следующее:
Добавить Mqtt2TelegramBot [1]
Запустить команду /start
, бот расскажет, как отправлять сообщение в уже созданный топик (по умолчанию их нет)
Подписаться на какой-то топик: /sub <my-topic>
, бот сразу покажет команду для отправки сообщения с помощью HTTPie (//url) и логин/пароль для Basic Auth
О всех возможностях бот расскажет сам по команде /commands
.
curl -v -X POST -u "${LOGIN}:${PASSWORD}"
https://mqtt2telegram.projects.royz.cc/api/v1.0/send
-H "Content-Type: application/json"
-d "{"topic": "${TOPIC}", "payload": "${MESSAGE}"}"
где, LOGIN
- telegramId/chatId, PASSWORD
- выдаст бот, либо по команде /creds
,TOPIC
- топик, на который вы подписались командой /sub <topic>
, MESSAGE
- текст сообщения (с поддержкой Markdown)
import requests
url = "https://mqtt2telegram.projects.royz.cc/api/v1.0/send"
login = "1234567"
password = "aaBBccEEdd"
topic = "YOUR_TOPIC"
json = {
"topic": topic,
"payload": "YOUR_MESSAGE"
}
requests.post(url, auth=(login, password), json=json)
import got from "got"
async function sendMessage(login, password, topic, message) {
const url = 'https://mqtt2telegram.projects.royz.cc/api/v1.0/send'
const hash = btoa(`${login}:${password}`)
const options = {
headers: {
authorization: `Basic ${hash}`
}
}
const json = {
topic,
payload: message
}
return got.post(url, {...options, json})
}
каждый день я отправляю себе цитату [2] дня и картинку [3] дня из Википедии с помощью scheduled job в github actions
каждые 5 минут этот скрипт [4] мониторит состояние ордеров на Binance, если что-то создалось/продалось, приходит уведомление
у меня есть IoT-кнопка [5], анти-прокрастинатор, которая включает busy/idle режим в toggl.com [6], это не имеет ничего общего с пересылкой телеграм, просто запустил MQTT на той же инфраструктуре, и как побочный эффект могу этим же ботом подписаться на топик об изменениях состояния кнопки
(пока идея) т.к. в MQTT позволяет отправить сразу картинку, можно отправлять изображение с камеры по расписанию или при обнаружении движения
Сервер на Javalin [7] (довольно сырой фреймворк, приходится просить доделывать фичи), TelegramBots [8]
MQTTv5: HiveMQ [9] в облаке, бесплатного аккаунта хватает
MongoDB [10] в облаке для хранения пользователей и топиков
CI/CD: github actions (деплой вручную с помощью helm в k8s под урпавлением Rancher [11])
Код проекта [12] и документация [13].
Подключайтесь и рассказывайте о ваших примерах использования или идеях новых фич.
Спасибо за внимание!
Автор: Сергей
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/378123
Ссылки в тексте:
[1] бот: https://t.me/Mqtt2TelegramBot
[2] цитату: https://github.com/zjor/automation/blob/master/send_qotd.py
[3] картинку: https://github.com/zjor/automation/blob/master/send_potd.py
[4] этот скрипт: https://github.com/zjor/automation/blob/master/binance_notifier/src/check_binance_orders.py
[5] IoT-кнопка: https://github.com/zjor/arduino/tree/master/iot-toggle
[6] toggl.com: http://toggl.com
[7] Javalin: https://javalin.io/
[8] TelegramBots: https://github.com/rubenlagus/TelegramBots
[9] HiveMQ: https://www.hivemq.com/
[10] MongoDB: https://cloud.mongodb.com/
[11] Rancher: https://rancher.com/
[12] Код проекта: https://github.com/zjor/mqtt2telegram
[13] документация: https://zjor.github.io/mqtt2telegram/
[14] Источник: https://habr.com/ru/post/683698/?utm_source=habrahabr&utm_medium=rss&utm_campaign=683698
Нажмите здесь для печати.