Простые и удобные уведомления

Привет! Достаточно часто разработчики и системные администраторы сталкиваются с необходимостью присылать уведомления, например об ошибках или отчёт о работе таска, а у кого-то это финансовый отчёт за день. Тут всё ограничено фантазией и поставленными задачами. Каждый сам выбирает удобный инструмент или пишет что-то своё.

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

Определил требования:

  • бесплатно (плату за трафик не учитываем)
  • работает на большинстве популярных платформ
  • групповые и индивидуальные уведомления
  • простая реализация отправки


Первое, что пришло в голову — SMS, но это не бесплатно, а на больших объёмах очень даже дорого. Второе — pushover, но он тоже платный, хотя и достаточно приятный. И тогда я решил посмотреть в сторону чего-то готового, что уже есть на современных телефонах, а именно на мессенджеры. Боты в Telegram полностью покрыли мои задачи!

Так появился бот Alarmer.

Принцип работы крайне прост:

  1. добавляете его в контакт-лист или в чат
  2. получаете ключ
  3. обычным https-запросом отправляете сообщение и ключ
  4. получаете это сообщение у себя в Telegram

Если бот добавлен в чат, то уведомление получат все участники этого чата. Давайте рассмотрим простой пример:

image

Получен ключ: 21dd13-b6486d-8ba16b

Отправляем запрос (CURL, wget, file_get_contents, ...):

alarmerbot.ru/?key=21dd13-b6486d-8ba16b&message=Habrahabr

И получаем уведомление:



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

Важно: бот принимает только сообщения, начинающиеся с символа "/". Это будет интересно тем, кто добавил бота в чат и обсуждает там что-то секретное. И да, запросы не логируются, ни на стороне NGINX, ни самим скриптом.

Хорошего вам дня и, надеюсь, статья была полезна!
Поделиться публикацией

Комментарии 12

    +2
    Исходники выложить не планируете? Это может помочь тем, кто не доверяет «честному слову» об отсутствии логирования или добавить собственный функционал.
      0
      Это может помочь тем, кто не доверяет «честному слову» об отсутствии логирования

      А как исходники относятся к коду на недоступном для вас сервере? Правильно, по честному слову.

      +2
      Первое, что приходит в голову это email, но никак не sms.
        0
        а мне вот тоже в первую очередь sms пришли в голову, хотя бы из-за того, что будет прочитано с большей вероятностью, чем письмо
          0
          Прочитано может быть и будет. Но нужно учитывать специфику уведомлений. Смс накладывает существенные ограничения на содержание. Если уведомления ориентированы на техническую аудиторию, то, на мой взгляд, выбор однозначен в пользу email. Можно и текст отформатировать, и файл приложить, так же будет возможность прочитать из desktop клиента и оттуда сразу перейти по ссылкам.
        +6
        Во дают. Еще и исходники кто-то спрашивает.
        Не надо никаких ни исходников ни сторонних гостеприимных сайтов:

        1. Пишем официальному боту @botfather​ и создаем нового бота — отвечаем на вопросы, получаем [token]
        2. Пишем нашему только что созданному боту, добавляем его в чат и смотрим [chat_id] (например, из url берутся только цифры и в начале ставится минус).
        3. Делаем post-запрос на https://api.telegram.org/bot[token]/sendMessage с передачей данных:
          {"chat_id":"<b>[chat_id]</b>","text":"ky-ky"}

        Примеры запросов на curl:
        #!/bin/sh
        
        # your data here
        chatID=-123456789
        botToken=987654321:AABBCCDDEEFFGGHH
        
        # post message
        message='ky-ky'
        curl -s -X POST "https://api.telegram.org/bot"$botToken"/sendMessage" -F chat_id=$chatID -F text="$message"
        
        # post image
        image="./inv.png"
        curl -s -X POST "https://api.telegram.org/bot"$botToken"/sendPhoto" -F chat_id=$chatID -F photo="@$image"
        
        # post image with caption
        caption='ImageCaption'
        curl -s -X POST "https://api.telegram.org/bot"$botToken"/sendPhoto" -F chat_id=$chatID -F photo="@$image" -F caption=$caption
        
          +1

          Зашел в статью, чтобы написать такой комментарий)))


          Как дополнение, кто пользуется IFTTT, их канал Maker также умеет отправлять сообщения от лица бота по вышеприведенным запросам.

            +1
            >Пишем нашему только что созданному боту, добавляем его в чат и смотрим [chat_id] (например, из url берутся только цифры и в начале ставится минус).

            А где посмотреть chat_id? Что за url?
              0
              Тоже уткнулся в этот вопрос. Вроде как по документации должно было бы имя проканывать, но видно не проходит. Вот в тостере пишут: https://toster.ru/q/276982
                0
                UPD: По совету из того тостера получилось отправить.
                Тестовый пример здесь. https://jsfiddle.net/ktsLLvpg/
                В обеих формах нужно вставить ключ в action.
                Первая форма используется для отправки сообщения. Первое поле — ид чата, второе собственно сообщение. Вторая форма для получения входящих сообщений из которых мы по совету из тостера получаем ид чата/юзера.
                Вкратце совет — шлем сообщение себе, смотрим в полученных сообщениях ИД.
                  0
                  Имел ввиду url чата, если зайти в него через web-морду телеграма. Так же для верности (или для автоматизации) можно прямо из браузера отправить запрос своему боту, получить в ответ json и посмотреть в нем поле «id» у «chat»:
                  https://api.telegram.org/bot[token]/getUpdates

                  0

                  Можно добавить бота @get_id_bot в нужный чат и выполнить команду /my_id@get_id_bot. После бота можно выпилить. Плюс, он умеет показывать ChatID нужного контакта.

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

              Самое читаемое