Мне подобная задача встречается практически на всех проектах, с которыми работаю в последние годы. Решил упростить себе жизнь — найти или сделать удобный инструмент для уведомлений.
Определил требования:
- бесплатно (плату за трафик не учитываем)
- работает на большинстве популярных платформ
- групповые и индивидуальные уведомления
- простая реализация отправки
Первое, что пришло в голову — SMS, но это не бесплатно, а на больших объёмах очень даже дорого. Второе — pushover, но он тоже платный, хотя и достаточно приятный. И тогда я решил посмотреть в сторону чего-то готового, что уже есть на современных телефонах, а именно на мессенджеры. Боты в Telegram полностью покрыли мои задачи!
Так появился бот Alarmer.
Принцип работы крайне прост:
- добавляете его в контакт-лист или в чат
- получаете ключ
- обычным https-запросом отправляете сообщение и ключ
- получаете это сообщение у себя в Telegram
Если бот добавлен в чат, то уведомление получат все участники этого чата. Давайте рассмотрим простой пример:
Получен ключ: 21dd13-b6486d-8ba16b
Отправляем запрос (CURL, wget, file_get_contents, ...):
alarmerbot.ru/?key=21dd13-b6486d-8ba16b&message=Habrahabr
И получаем уведомление:
Вот так всё просто! Вы и сами можете реализовать нечто подобное, но если просто требуется инструмент и нет желания переписывать уже готовое, то пользуйтесь алармером.
Важно: бот принимает только сообщения, начинающиеся с символа "/". Это будет интересно тем, кто добавил бота в чат и обсуждает там что-то секретное. И да, запросы не логируются, ни на стороне NGINX, ни самим скриптом.
Хорошего вам дня и, надеюсь, статья была полезна!
Комментарии (11)
Elsedar
31.10.2016 21:33+2Первое, что приходит в голову это email, но никак не sms.
Kenya
01.11.2016 11:26а мне вот тоже в первую очередь sms пришли в голову, хотя бы из-за того, что будет прочитано с большей вероятностью, чем письмо
Elsedar
01.11.2016 12:32Прочитано может быть и будет. Но нужно учитывать специфику уведомлений. Смс накладывает существенные ограничения на содержание. Если уведомления ориентированы на техническую аудиторию, то, на мой взгляд, выбор однозначен в пользу email. Можно и текст отформатировать, и файл приложить, так же будет возможность прочитать из desktop клиента и оттуда сразу перейти по ссылкам.
stas404
01.11.2016 07:12+6Во дают. Еще и исходники кто-то спрашивает.
Не надо никаких ни исходников ни сторонних гостеприимных сайтов:
- Пишем официальному боту @botfather? и создаем нового бота — отвечаем на вопросы, получаем [token]
- Пишем нашему только что созданному боту, добавляем его в чат и смотрим [chat_id] (например, из url берутся только цифры и в начале ставится минус).
- Делаем post-запрос на https://api.telegram.org/bot[token]/sendMessage с передачей данных:
{"chat_id":"<b>[chat_id]</b>","text":"ky-ky"}
#!/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
M_Muzafarov
01.11.2016 10:46+1Зашел в статью, чтобы написать такой комментарий)))
Как дополнение, кто пользуется IFTTT, их канал Maker также умеет отправлять сообщения от лица бота по вышеприведенным запросам.
ivanych
01.11.2016 11:24+1>Пишем нашему только что созданному боту, добавляем его в чат и смотрим [chat_id] (например, из url берутся только цифры и в начале ставится минус).
А где посмотреть chat_id? Что за url?Mendel
01.11.2016 13:26Тоже уткнулся в этот вопрос. Вроде как по документации должно было бы имя проканывать, но видно не проходит. Вот в тостере пишут: https://toster.ru/q/276982
Mendel
01.11.2016 13:36UPD: По совету из того тостера получилось отправить.
Тестовый пример здесь. https://jsfiddle.net/ktsLLvpg/
В обеих формах нужно вставить ключ в action.
Первая форма используется для отправки сообщения. Первое поле — ид чата, второе собственно сообщение. Вторая форма для получения входящих сообщений из которых мы по совету из тостера получаем ид чата/юзера.
Вкратце совет — шлем сообщение себе, смотрим в полученных сообщениях ИД.
stas404
01.11.2016 18:24Имел ввиду url чата, если зайти в него через web-морду телеграма. Так же для верности (или для автоматизации) можно прямо из браузера отправить запрос своему боту, получить в ответ json и посмотреть в нем поле «id» у «chat»:
https://api.telegram.org/bot[token]/getUpdates
Akdmeh
Исходники выложить не планируете? Это может помочь тем, кто не доверяет «честному слову» об отсутствии логирования или добавить собственный функционал.
extempl
А как исходники относятся к коду на недоступном для вас сервере? Правильно, по честному слову.