Во что обернулась пересылка MQTT-сообщений в Telegram?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Периодически возникает желание получать уведомления, иметь возможность настраивать источник, фильтровать сообщения по темам, и писать как можно меньше кода. Например, присылать себе картинку/цитату/слово дня или дельту по изменениям ордеров на бирже. В результате получился универсальный инструмент - бот и персональное АПИ для отправки сообщений в Telegram. Прошу под кат.

Архитектура

Сервис состоит из следующих компонентов:

  • MQTT-брокера

  • REST API, которое его оборачивает и позволяет отправлять сообщения

  • Telegram-бота, который подписан на MQTT и пересылает сообщения

  • MongoDB для хранения пользователей и подписок

Как этим пользоваться?

Отправка сообщений организована вокруг топиков, через бота можно подписаться/отписаться. При этом реальное имя топика будет выглядеть так: <telegramId>/<topic>, поэтому каждый пользователь получает свое пространство имен и API-ключ.
Для отправки сообщений, нужно сделать следующее:

  • Добавить Mqtt2TelegramBot

  • Запустить команду /start, бот расскажет, как отправлять сообщение в уже созданный топик (по умолчанию их нет)

  • Подписаться на какой-то топик: /sub <my-topic>, бот сразу покажет команду для отправки сообщения с помощью HTTPie (//url) и логин/пароль для Basic Auth

    О всех возможностях бот расскажет сам по команде /commands.

Примеры кода

cURL
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)

Python
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)

JavaScript
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})
}

Мои примеры использования

  • каждый день я отправляю себе цитату дня и картинку дня из Википедии с помощью scheduled job в github actions

  • каждые 5 минут этот скрипт мониторит состояние ордеров на Binance, если что-то создалось/продалось, приходит уведомление

  • у меня есть IoT-кнопка, анти-прокрастинатор, которая включает busy/idle режим в toggl.com, это не имеет ничего общего с пересылкой телеграм, просто запустил MQTT на той же инфраструктуре, и как побочный эффект могу этим же ботом подписаться на топик об изменениях состояния кнопки

  • (пока идея) т.к. в MQTT позволяет отправить сразу картинку, можно отправлять изображение с камеры по расписанию или при обнаружении движения

Stack

  • Сервер на Javalin (довольно сырой фреймворк, приходится просить доделывать фичи), TelegramBots

  • MQTTv5: HiveMQ в облаке, бесплатного аккаунта хватает

  • MongoDB в облаке для хранения пользователей и топиков

  • CI/CD: github actions (деплой вручную с помощью helm в k8s под урпавлением Rancher)

Код проекта и документация.

Подключайтесь и рассказывайте о ваших примерах использования или идеях новых фич.

Спасибо за внимание!

Источник: https://habr.com/ru/post/683698/


Интересные статьи

Интересные статьи

В данной статье мы рассмотрим систему аутентификации пользователей и внешних систем в личном кабинете через сервер аутентификации Blitz Identity Provider. Согласно требованиям проекта, который мы...
В обновлении «Сидней» Битрикс выпустил новый продукт в составе Битрикс24: магазины. Теперь в любом портале можно создать не только лендинг или многостраничный сайт, но даже интернет-магазин. С корзино...
Есть статьи о недостатках Битрикса, которые написаны программистами. Недостатки, описанные в них рядовому пользователю безразличны, ведь он не собирается ничего программировать.
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...
Основанная в 1998 году компания «Битрикс» заявила о себе в 2001 году, запустив первый в России интернет-магазин программного обеспечения Softkey.ru.