Пример для Monit, но можно использовать для любой программы в Linux, если программа в состоянии выполнять дополнительные shell скрипты по событиям.
Здесь описывать как устанавливать и настраивать Monit … не будем, т.е. посмотреть можно например тут https://www.altlinux.org/Motion .
А тут мы рассмотрим простой пример отправки текстовых оповещений, фотографий и файлов с видео записью с использованием Telegram Bot API (на русском тут) .
-→ Создаем / регистрируем бота. Для этого в Telegram существует специальный бот @BotFather. Нам необходимо получить для нового бота уникальный токен.
Подключившись к боту @BotFather и даем команду /newbot … после чего телеграмм просит придумать имя нашему новому боту. Единственное ограничение на имя бота - оно должно оканчиваться на «bot». Например CAMERA_1_bot.
В случае успеха мы получим следующее сообщение:
Done! Congratulations on your new bot. You will find it at t.me/CAMERA_1_bot.
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.
By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it.
Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
5975403111:AAE7KgyWqSMfoj-13V0ULeXMxIb6-0e8XMc
Keep your token secure and store it safely, it can be used by anyone to control your bot.
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Итак мы получили токен 5975403111:AAE7KgyWqSMfoj-13V0ULeXMxIb6-0e8XMc
Обязательно проверим, что бот создался выполнив команду:
# curl -s -X POST "https://api.telegram.org/bot5975403111:AAE7KgyWqSMfoj-13V0ULeXMxIb6-0e8XMc/getMe"
... в случае удачи будет ответ в JSON формате:
{"ok":true,
"result":
{"id":5975403111,
"is_bot":true,
"first_name":"CAMERA_1_bot",
"username":"CAMERA_1_bot",
"can_join_groups":true,
"can_read_all_group_messages":false,
"supports_inline_queries":false}
}
… по команде /help можно получить справку.
-→ Создаем группу CAMERs для получения сообщений от вашего бота и добеливаем в нее своего бота @CAMERA_1_bot
.
Потом получаем ID группы, т.к. он нужен для API телеграмма. Для этого даем команду:
# curl -s -X POST "https://api.telegram.org/bot5975403111:AAE7KgyWqSMfoj-13V0ULeXMxIb6-0e8XMc/getUpdates"
... в ответ мы должны получить следующее сообщение в JSON формате:
{"ok":true,
"result":[{"update_id":372143158,
"message":{"message_id":5,
"from":{"id":190343897,
"is_bot":false,
"first_name":"USER",
"last_name":"FAMALE",
"username":"User_1",
"language_code":"ru"},
"chat":{"id":-688770998,
"title":"CAMERs",
"type":"group",
"all_members_are_administrators":true},
"date":1640601323,
"text":"/start",
"entities":[{"offset":0,
"length":6,
"type":"bot_command"
}]
}
}]
}
Тут нас интересует только ID чата(группы) -688770998
-→ Теперь пробуем отправить тестовое текстовое сообщение командой:
curl -s -X POST "https://api.telegram.org/bot5975403111:AAE7KgyWqSMfoj-13V0ULeXMxIb6-0e8XMc" -F chat_id="-688770998" -F text="Heloyyyy"
В случае удачи Вы идите в общей группе CAMERs сообщение “Heloyyyy” от вашего бота @CAMERA_1_bot
Для отправки результатов от программы Monit, сделаем shell скрипт /etc/motion/telegramm_sends.sh:
#!/bin/bash
# узнаем где установлен bash - whereis bash
# Нужно указать сверху (!)
# при указании переменных нельзя использовать пробелы.
BotToken="5975403111:AAE7KgyWqSMfoj-13V0ULeXMxIb6-0e8XMc"
chatid="-688770998"
for File in `/usr/bin/find /var/lib/motion/*.jpg -type f -mmin -1`
do
# комманда отправки изображения
curl -s -X POST "https://api.telegram.org/bot"$BotToken"/sendPhoto" -F chat_id="$chatid" -F photo="@$File";
done
for File in `/usr/bin/find /var/lib/motion/*.mkv -type f -mmin -1`
do
# комманда отправки изображения
curl -s -X POST "https://api.telegram.org/bot"$BotToken"/sendVideo" -F chat_id="$chatid" -F video="@$File";
done
for File in `/usr/bin/find /var/lib/motion/*.mp4 -type f -mmin -1`
do
# комманда отправки изображения
curl -s -X POST "https://api.telegram.org/bot"$BotToken"/sendVideo" -F chat_id="$chatid" -F video="@$File";
done
# Не забываем, что для того, чтоб скрипт можно было запустить, надо изменить права доступа к нему,
# добавив возможность исполнения файла, например командой
# chmod a+x script.sh
# Пример curl -s -X POST "https://api.telegram.org/bot<token>/sendPhoto" -F chat_id=<chatid> -F photo="@/path/to/your/photo.jpg"
# Запускать командой ./название-скрипта.sh
-→ И последний штрих это добавление скрипта /etc/motion/telegramm_sends.sh в конфигурационный файл /etc/motion/motion.conf программы Monit на желаемые события:
# Command to be executed when an event starts. (default: none)
# An event starts at first motion detected after a period of no motion defined by event_gap
; on_event_start value
on_event_start /usr/bin/curl -s -X POST "https://api.telegram.org/bot5975403111:AAE7KgyWqSMfoj-13V0ULeXMxIb6-0e8XMc/sendMessage" -F chat_id="-688770998" -F text="ON Event Start !"
# Command to be executed when an event ends after a period of no motion
# (default: none). The period of no motion is defined by option event_gap.
; on_event_end value
on_event_end /etc/motion/telegramm_sends.sh
Остается только выполнить тонкую настройку программы Monit для того, что бы правильно получать желаемые события :)