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

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

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

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


Первое, что пришло в голову — 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, ни самим скриптом.

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

Комментарии (11)


  1. Akdmeh
    31.10.2016 20:35
    +2

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


    1. extempl
      01.11.2016 10:05

      Это может помочь тем, кто не доверяет «честному слову» об отсутствии логирования

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


  1. Elsedar
    31.10.2016 21:33
    +2

    Первое, что приходит в голову это email, но никак не sms.


    1. Kenya
      01.11.2016 11:26

      а мне вот тоже в первую очередь sms пришли в голову, хотя бы из-за того, что будет прочитано с большей вероятностью, чем письмо


      1. Elsedar
        01.11.2016 12:32

        Прочитано может быть и будет. Но нужно учитывать специфику уведомлений. Смс накладывает существенные ограничения на содержание. Если уведомления ориентированы на техническую аудиторию, то, на мой взгляд, выбор однозначен в пользу email. Можно и текст отформатировать, и файл приложить, так же будет возможность прочитать из desktop клиента и оттуда сразу перейти по ссылкам.


  1. stas404
    01.11.2016 07:12
    +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. M_Muzafarov
      01.11.2016 10:46
      +1

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


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


    1. ivanych
      01.11.2016 11:24
      +1

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

      А где посмотреть chat_id? Что за url?


      1. Mendel
        01.11.2016 13:26

        Тоже уткнулся в этот вопрос. Вроде как по документации должно было бы имя проканывать, но видно не проходит. Вот в тостере пишут: https://toster.ru/q/276982


        1. Mendel
          01.11.2016 13:36

          UPD: По совету из того тостера получилось отправить.
          Тестовый пример здесь. https://jsfiddle.net/ktsLLvpg/
          В обеих формах нужно вставить ключ в action.
          Первая форма используется для отправки сообщения. Первое поле — ид чата, второе собственно сообщение. Вторая форма для получения входящих сообщений из которых мы по совету из тостера получаем ид чата/юзера.
          Вкратце совет — шлем сообщение себе, смотрим в полученных сообщениях ИД.


        1. stas404
          01.11.2016 18:24

          Имел ввиду url чата, если зайти в него через web-морду телеграма. Так же для верности (или для автоматизации) можно прямо из браузера отправить запрос своему боту, получить в ответ json и посмотреть в нем поле «id» у «chat»:
          https://api.telegram.org/bot[token]/getUpdates