Telegram bot на python 3

InLine клавиатура

На мой взгляд, наиболее интересной является InLine клавиатура. Она позволяет вместе с сообщением отправлять пользователю интерактивные кнопки, например с вариантами ответов, а после их нажатия обрабатывать результат.

Давайте добавим простой вопрос от бота на команду /test:

Переменная markup объявляет новую переменную с inline keyboard, а markup.add – создает отдельную кнопку. Основные параметры при создании кнопки – text и callback_data: первый отвечает за текст на кнопке, второй – данные, которые будут переданы боту при выборе пользователем определенного варианта ответа.

Запустим скрипт и напишем /test:

Отлично, бот прислал нам варианты ответов. Но при нажатии на кнопку ничего не произойдет, т.к. мы не описали обработку результатов. Исправим это:

bot.answer_callback_quer – это всплывающее окно, которое будет показано пользователю после нажатия кнопки. А в call.data будет передано значение, которое мы указывали при создании клавиатуры в параметре callback_data. Ответим боту, выбрав один из ответов:

Отлично, все работает. Но будет лучше, если после ответа, клавиатура будет исчезать из чата. Это можно сделать добавив в конец функции query_handler следующую строку:

Это функция редактирования клавиатуры, вызванная без указания объекта клавиатуры. Теперь после ответа пользователя клавиатура будет убрана ботом:

Что такое Serverless в самом бытовом понимании?

Не буду очень глубоко уходить в дебри, на Хабре регулярно появляются обзорные статьи на эту тему. Это возможность разместить в облаке функцию, на каком-то из поддерживаемых платформой языков программирования, задать условие её срабатывания — и всё. Когда случится триггер — поднимется виртуальное окружение, в нем отработает функция, и выключится. Вместе с окружением.


В чем преимущества такого подхода?

Безопасность

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

Вместо того, чтобы следить за обновлением пакетов на настоящей ОС в Виртуальной машине, заниматься настройкой политик безопасности и файрволла — вы загружаете программу на сервер, и она работает.

Стабильность и отказоустойчивость

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

Цена, особенно в условиях домашних малонагруженных проектов

При тарификации учитывается объём памяти, резервируемый под функцию за время её исполнения и количество вызовов. Согласно 10 000 000 запусков функции, работающей 800ms с ограничением по памяти 512мб будут стоить 3 900₽.

Да, 4.6 копеек. Плюс я не буду тратить время на настройки, что ещё приятней. Никаких правил для pm2, никакой актуализации Dockerfile или окружения, и вишенкой на торте — SLA 99,9.

Из пока нерешённых задач (но, полагаю, это вопрос времени) — привязка внешних доменов, а так же тонкая настройка http методов, которые служат триггером функции. Сейчас http триггер срабатывает на любой из DELETE, GET, HEAD, OPTIONS, PATCH, POST или PUT запросов на авто-генерируемую точку входа типа https://functions.yandexcloud.net/xxxxxxxxxxxxxxxx.

Из хороших новостей — это полноценный https, который отвечает всем требованиям Telegram для работы с api через webHooks. Но у AWS Lambda есть дополнения в виде API Gateway, да и сама настройка триггера шире, если вам это нужно.

Очевидное ограничение самого serverless подхода, не зависимо от платформы — пользоваться приходится ровно тем, что дают. Написать код на неподдерживаемых языках программирования или использовать нестандартные параметры компилятора/интерпретатора вы не сможете. Также возможны дополнительные призванные защитить всех участников процесса разработки.

Как создать .js файл, чтобы работать в Яндекс.Облаке?

Краткий гайд через веб интерфейс:

  • создаём Функцию
  • создаём в веб интерфейсе файл с любым именем и расширением js
  • выбираем интерпретатор — nodejs10 или nodejs12
  • в файле пишем функцию с одним параметром в exports.myFunction (ну, в произвольное поле в exports)
  • указываем таймаут работы функции, оперативную память (128МБ-1024МБ с шагом в 128МБ), точку входа (имяфайла.myFunction)
  • делаем функцию публичной

Функция написанная в файле может:

Получить данные http запроса через входящий параметр:

функция не получает request в чистом виде, и конечно же не управляет ходом запроса — она получает в своём единственном параметре с информацией о запросе:

Unix and Linux curl command with proxy syntax

The syntax is:

## Set the proxy address of your uni/company/vpn network ## 
export http_proxy=http://your-ip-address:port
 
## http_proxy with username and password 
export http_proxy=http://user:password@your-proxy-ip-address:port
 
## HTTPS version ##
export https_proxy=https://your-ip-address:port
export https_proxy=https://user:password@your-proxy-ip-address:port

Another option is to pass the -x option to the curl command. To use the specified proxy:

curl -x <protocol://user:password@proxyhost:port> url
--proxy <protocol://user:password@proxyhost:port> url
--proxy http://user:password@Your-Ip-Here:Port url
-x http://user:password@Your-Ip-Here:Port url

Configuration

Bot configuration

No bot configuration is needed, but there are optional settings.

Commands available on @BotFather:

  • Shows your bot’s token.
  • Revoke the token and give you a new one.
  • Change the bot’s name.
  • Set the bot’s description, a window displayed when a person opens a chat with the bot.
  • Set the bot’s about message, displayed on the bot’s profile page.
  • The bot’s photo.
  • The commands that will be listed as bot’s options.
  • Defines if the bot may or may not join groups.
  • Set if the bot reads all the messages on a group or only messages that it is cited.
  • Used to destroy the bot.

Create a file named on the folder :

Then paste the code:

Change the file permission and allow it to be executed

Go to file

find the line . And include:

The easiest way to find is typing .

Restart Zabbix-server service.

Media type

On the Zabbix interface, go to Adminstration, Media types, and click on Create media type.

  • Name:
  • Type:
  • Script name:
If using Zabbix 3.0.1:
  • Script Parameters
    • {ALERT.SENDTO}
    • {ALERT.SUBJECT}
    • {ALERT.MESSAGE}

Actions

Open Zabbix web interface, go to Configuration, Actions and click on Create Action.

  • Name:
  • Subject:
  • Message:

    The fields Subject and Message are supposed to be customized as your needs. HTML tags supported:

Go to tab Conditions and add settings as your needs.

Go to tab Actions and add settings as your needs.

Users

The last step is to set who will receive the alerts.

Go to Administration, Users and choose who will receive the notifications. Then, go to Media and click on Add.

  • Type:
  • Send to: | Refer to Telegram ID

aiogram — асинхронная библиотека

Реализовывать свой проект удобнее при помощи библиотек, таких как — это, пожалуй, лучшая стабильная асинхронная библиотека для Python (). 

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

Когда в потоке выполнения команды возникает какая-то пауза, например, работает функция и у нее при этом есть какой-то таймаут ожидания, мы получаем участок времени, который не занят решением алгоритма. Асинхронность в aiogram позволяет заполнить эти промежутки, ускоряя работу нашего бота и быстро отвечая на сообщения. Устанавливается эта библиотека следующей командой

Установка PHP 7

В репозитории CentOS находится PHP версии 5.4. Для свежих версий GLPI требуется более новая версия php. Для этого установим репозиторий REMI:

Теперь ставим php7:

yum —enablerepo=remi-php72 install php

* на момент написания статьи последняя стабильная версия была 7.2 (ссылка на PHP: Downloads).

Откроем на редактирование файл:

И правим следующее:

upload_max_filesize = 256M . post_max_size = 256M . date.timezone = «Europe/Moscow»

* где upload_max_filesize — максимальный размер одного загружаемого файла; post_max_size — объем всех отправляемых на сервер данных за раз; date.timezone — временная зона по умолчанию, которую будет устанавливать интерпретатор php.

ШАГ 2. Настраиваем мониторинг

Описание сервиса происходит путём создания ini-файла в папке serviсes. Нужно задать пять параметров:

  1. MSMS_SERVICE_NAME: наименование сервиса — будет использоваться в оповещениях и журнале мониторинга.
  2. MSMS_SERVICE_ENDPOINT: endpoint сервиса, на который мы будем обращаться curl’ом.
  3. MSMS_CURL_PARAMS: дополнительные параметры curl, см. пример ниже.
  4. MSMS_EXPECTED: ожидаемый ответ сервиса. Используется, если ответ короткий.
  5. MSMS_EXPECTED_FILE: имя файла с ожидаемым ответом сервиса. Если указан, перезаписывает MSMS_EXPECTED.
  6. MSMS_RECIPIENTS: файл со списком получателей оповещений.

Запрос на google.com возвращает фиксированный html c редиректом, будем использовать его как ожидаемый ответ сервера:

Создадим файл services/google.ini:

В можно задать всё, что умеет curl, в том числе:

  1. Отключить сообщения curl, чтобы не засорять консоль и лог:
  2. Задать таймаут соединения с проверяемым сервисом (в секундах):
  3. Задать таймаут получения ответа:
  4. Отключить проверку сертификата для SSL (например, если используется самоподписанный сертификат):
  5. Указать тип http-запроса:
  6. Указать заголовки:
  7. Указать тело запроса в виде строки или файла. Пример для файла:

Мы отключили оповещения и задали таймауты 3 сек. на соединение и 7 сек. на получение ответа сервиса.

Внимание: указывайте значения параметров в одинарных кавычках, как в примере. К сожалению, bash в этом смысле довольно хрупок, и случайно залетевшая бабочка не там поставленная кавычка может привести к гибели вселенной сложно диагностируемым ошибкам

Мы настроили мониторинг. Проверим, что все ОК:

Скрипт должен вывести сообщение вида:

Телеграмм-бот, опрашивающий linux-сервер / Хабр

В последнее время увлекаюсь Pythonом. Хотелось написать что-то более существенное, чем коды типа helloworld. Поскольку с интересом смотрел еще и в сторону ботов телеграмма, родилась идея создать бота, который бы запускал команды или скрипты на удаленном сервере (linux) и возвращал бы результат в телеграмм. Зачем? Удобно! Не надо логиниться на сервак, чтобы получить информацию о нагрузке на процессор, свободной памяти или объеме диска. Можно даже запускать скрипты.

И так изучаем python и api telegram bot, регистрируем своего бота в телеграмм, скачиваем готовые скрипты, запускаем их на своем серваке и меняем config.py под себя.

Поехали по порядку:

1) Регистрация бота телеграмм. Находим отца всех ботов – @BotFather. Пишем ему:

В ответ на его сообщение вводим имя вашего нового бота. Оно обязательно должно иметь на конце слово bot.

Если имя не занято и оно введено верно, то вы получите токкен – вам необходимо будет его скопировать в файл config.py скрипта:

2) Загружаем скрипт. Это первая тестовая версия скрипта – для того чтобы оценить возможности во-первых самого питона, во-вторых – бота telegram. Приветствуются любые пожелания и предложения – допилю. Можете сами что-то добавить – просьба тоже поделится. Каковы возможности программы (их можно посмотреть набрав в своем боте /help):

  • посмотреть сетевые настройки (запускает на сервере команду ifconfig)

получить информацию о дисковом пространстве (запускает на сервере команду df -h)

получить информацию о памяти (запускает на сервере команду free -m)

получить информацию о нагрузке на процессор (запускает на сервере команду mpstat)

получить информацию о размере папки, заданной в config.py (запускает на сервере команду du -sh имя папки)

проверяет наличие и размер файла в папке (запускает на сервере команду ls -lh файл). Делаю бэкап базы 1с в монтируемую сетевую папку с именем файла по дате – поэтому возникла такая необходимость.

Что еще планирую реализовать: запуск любого скрипта (возможно без вывода всего выполнения, а только конечного результата), улучшить вывод результата – более удобочитаемого, сбор статистики в базу данных и вывод графиков по нагрузкам и т.п.

Для запуска скрипта необходим python 3 и python-telegram-bot. У меня стоит centOS. Там уже стоит 2 версия питона. Ставим рядом 3 питон и библиотеку для работы бота:

Состав скрипта:

В приложение телеграмма вводите:

Таким образом вы получаете ваш личный id. Его необходимо ввести в строку (вместо 123456789) admin = . Это сделано в целях безопасности, чтобы остальные команды могли вводить только пользователи с определенных аккаунтов телеграмма. Можно через запятую прописать несколько id: admin = .

В строке dir1 прописываем путь к папке объем которого бы мы хотели контролировать (у меня это путь до папки с базами pgsql)

В строке dir_backup – путь к папке где лежит файл, объем (или наличие) которого необходимо контролировать. У меня это файл вида 20170218.tar.gz. По умолчанию именно вариант с названием файла годмесяцдата.tar.gz проверяется. Если вы хотите изменить маску проверяемого файла, то вам необходимо найти и отредактировать в файле bot.py строку

Имейте ввиду, что дальнейшем при исправлении файла config.py вам не нужно будет перезапускать скрипт. Все настройки перечитываются скриптом каждый раз заново.

Неплохо бы добавить этот скрипт в автозагрузку. Для CentOS 7:

Содержимое этого файла:

Стартуем новый сервис:

Добавляем его в автозагрузку:

Проверяем статус:

Можем вводить команды. Начинаем с /help.

→ Ссылка на архив со скриптом

Спасибо, riot26 за выкладку на githab:gist.github.com/riot26/bb55e8a19fae0b58d687040c54cbc148

Скрипт для отправки оповещений

Напишем очень простой скрипт, который будет использовать zabbix для отправки оповещений в telegram. Стандартная настройка для директории со скриптами, которые использует заббикс для отправки уведомлений — /usr/lib/zabbix/alertscripts. Поменять ее можно в параметре AlertScriptsPath. Создадим скрипт.

# mcedit /usr/lib/zabbix/alertscripts/telegram.sh
#!/bin/bash
token='526250249:AAFtAqy4ln0BqK5vtU_9IoSlLduhtl8IaGg'
chat="$1"
subj="$2"
message="$3"
/usr/bin/curl -s --header 'Content-Type: application/json' --request 'POST' --data "{"chat_id":"${chat}","text":"${subj}n${message}"}" "https://api.telegram.org/bot${token}/sendMessage"

Сохраняем файл и делаем исполняемым.

# chmod +x /usr/lib/zabbix/alertscripts/telegram.sh

Проверим отправку сообщений с помощью нашего скрипта. Для этого запустим его и передадим 3 параметра:

# /usr/lib/zabbix/alertscripts/telegram.sh 210806260 Тест 'Проверяю отправку оповещений ботом'

Вы должны получить сообщения в телеграме. Если этого не происходит, разберитесь с ошибками, прежде чем двигаться дальше.

Как настроить цепочку автоответов в редакторе чат-бота

В визуальном редакторе цепочки автоответов строятся с помощью специальных блоков: «Сообщение», «Цепочка», «Действие» и «Пауза». Они расположены на панели слева.

Блоки, из которых строится цепочка автоответов

Дальше рассмотрим сам процесс построения цепочки.

Создаем цепочку

Выбираем триггер и нажимаем «Создать цепочку». Либо же к триггеру можно привязать цепочку, созданную ранее, если у вас уже имеются таковые.

Создание цепочки для выбранного триггера

Настраиваем стартовый блок

Справа в окне редактора цепочки вводим сообщение, которое отправляется пользователю в ответ на выбранный триггер. В нашем примере сообщение отправится после того, как пользователь напишет слово «Привет».

Стартовый блок в визуальном редакторе чат-бота

Вы можете отправить следующее сообщение только после того, как пользователь отреагировал на ваше предыдущее сообщение. Например, нажал на кнопку, которую нужно добавить в это сообщение. Рассмотрим, как добавить кнопку в редакторе.

Добавляем кнопку

Нажмите «Добавить кнопку» и введите текст кнопки. В нашем случае будет три кнопки: «Узнать о школе», «Мастер-классы», «Контакты менеджера».

Добавляем кнопки для дальнейшего развития цепочки

В одно сообщение вы можете добавить до двенадцати кнопок. Текст кнопки вмещает 20 символов без пробелов. В кнопки можно добавлять ссылки.

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

Создаем следующее сообщение

Перетащите блок «Сообщение» с левой панели в рабочую зону и соедините его с нужной кнопкой.

Для развития цепочки перетаскиваем блок «Сообщение» в рабочую зону

Заполните сообщения текстом и, если нужно, добавьте другие элементы.

Какие элементы можно добавить в сообщение чат-бота в SendPulse:

  • текст;
  • эмодзи;
  • изображение и вложение;
  • кнопка со ссылкой или без;
  • создать несколько реплик в одном сообщении, разделяя их задержкой до 5 секунд, чтобы текст не слипался;
  • переменные из адресной книги;
  • ввод данных пользователем, которые можно сохранить в уже существующую переменную или создать новую — для этого можно использовать кнопки быстрых ответов.

Элементы, которые можно добавить в сообщение

Чтобы добавить небольшую паузу между репликами в сообщении, воспользуйтесь элементом «Задержка». Укажите в редакторе, какая пауза будет между репликами — это до 5 секунд. Задержка в чате выглядит так:

Задержка между репликами в сообщении

Ввод данных пользователя

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

Ввод данных пользователя через быстрые ответы

Подробнее о том, как использовать ручной ввод данных в переменные, читайте в нашей базе знаний.

Блок «Пауза»

Используется для задержки отправки следующего сообщения. Вы можете указать паузу от нескольких минут до одного дня.

Блок «Действие»

Для блока действие есть такие опции:

  • «Открыть чат» — повышает приоритет чата: оповещает администратора о сообщении и открывает чат в панели SendPulse.
  • «Отписать от бота» — если в какой-то ветке сценария бота нужно удалить клиента из списка подписчиков и больше не отправлять ему сообщения.
  • «Добавить тег» — после нажатия на кнопку подписчику будет присвоен выбранный вами тег, с помощью которого вы сможете отправлять рассылки с сегментацией. О том, как использовать теги подробно читайте в базе знаний.
  • «Установить переменную» — система установит или обновит значение для выбранной вами переменной.
  • «Отправить вебхук» — можно отправить POST запрос с данными подписчика на ваш URL. Это нужно, чтобы, к примеру, отправить данные о подписчике и о том, что он прошел по какой-то ветке бота, в свою CRM. Подробнее о вебхуках читайте в нашей базе знаний.

Опции блока «Действие»

Блок «Цепочка»

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

Блок «Цепочка»

Ответы бота

Отправка текста

$response = array(
	'chat_id' => $data,
	'text' => 'Хай!'
);	
		
$ch = curl_init('https://api.telegram.org/bot' . $token . '/sendMessage');  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);

Отправка картинки

$response = array(
	'chat_id' => $data,
	'photo' => curl_file_create(__DIR__ . '/image.png')
);	
		
$ch = curl_init('https://api.telegram.org/bot' . $token . '/sendPhoto');  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);

Отправка файла

$response = array(
	'chat_id' => $data,
	'document' => curl_file_create(__DIR__ . '/file.xls')
);	
		
$ch = curl_init('https://api.telegram.org/bot' . $token . '/sendDocument');  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);

Минимальный «hello world» telegram-бот / Хабр

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

Тем самым Вы получите сообщение от бота на все свои устройства с клиентом telegram.

Последний вызов можно использовать в bat-файле или консоли или раздать друзьям не имеющим telegram и пишущим с умного утюга ( но только очень хорошим друзьям так как <Bot_token> конфиденциальная информация вообще-то).

Варианты использованияЗаменив <Bot_token> и <chat_id> на свои данные, получим:
Пример для консоли:

Пример для bat-файла, сохраненного как utf-8 без BOM и выполняющегося из taskschd.msc раз в 2 недели:

Напомнинаю вариант запуска разового задания из консоли:

Пример на python:

Настройка уведомлений Zabbix через Telegram

Для настройки будем использовать сервер Zabbix3.2 установленный на CentOs7 и проект «Telegram messenger CLI».

Ставим git

sudo yum install git

Клонируем «Telegram messenger CLI» с github

git clone —recursive https://github.com/vysheng/tg.git

переходим в директорию tg

cd tg

Ставим необходимые зависимости для сборки пакета

sudo yum install gcc libevent-devel openssl-devel \

readline-devel libconfig-devel lua-devel jansson-devel

Собираем telegram-cli

./configure

sudo make

Произведем настройку пользователся Telegram из под которого будем осущевствлять отправку уведомлений.

bin/telegram-cli -k tg-server.pub -W

Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license".
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license" for details.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/root/.telegram-cli]
phone number: +7**********
code ("CALL" for phone number): ****
>

Указываем номер телефона для регистрации учетной записи в телеграм и вводим код подтверждения, который будет прислан на указанный номер

Для вызова справки можно использовать команду «help»

Добавляем контакт

> add_contact "телефон" Admin_User

Заметка: Для разделения слов в имени контакта используется знак подчеркивания «_»

Теперь мы можем непосредствено отправлять этому пользователя сообщения

> msg Admin_User "Привет!"

Но скорее всего вы захотите рассылать уведомления в чат, что бы его получали несколько контактов:

> create_group_chat "Имя_чата" список пользователей
> create_group_chat Zabbix_Alert Admin_User Vasya

Мы создали чат с двумя контактами.

Для выхода из консоли используем команду «quit»

В домашней директорий пользователся под которым мы запускали telegram-cli была создана директория .telegram-cli с настройками, перенесем её в домашнюю директорию пользователя zabbix, туда же переносим папку с клонированным с github проектом и выставим на них права.

chown -R zabbix:zabbix /var/lib/zabbix

Создадим скрипт для отправки уведомлений Zabbix

В конфигурационном файле /etc/zabbix/zabbix_server.conf указываем директорию для хранения скриптов

cat /etc/zabbix/zabbix_server.conf

....
AlertScriptsPath=/usr/lib/zabbix/alertscripts
...

Перезапускаем севрер

systemcl restart zabbix-server

Создаем скрипт уведомлений tg.sh

cat /usr/lib/zabbix/alertscripts/tg.sh

#!/bin/bash

to=$1
msg="$2"

tgpath=/var/lib/zabbix/tg
cd $tgpath

(sleep 3; echo "msg $to $msg"; echo "safe_quit") | bin/telegram-cli -k tg-server.pub -W

sleep необходимо для того что бы telegram-cli успел запуститься.

$1,$2 — параметры, которые будет передавать Zabbix при запуске скрипта

Разрешаем выполнение скрипта

chmod +x tg.sh

Теперь переходим к настройки самого Zabbix через веб-интерфейс

Заходим в Administation->Media types

Создаем новый способ оповещения: называем его telegram, указываем имя скрипта tg.sh и задаем два параметра для передачи скрипту, это будет имя кому отправлять и тело сообщения

Далее привязываем способ оповещения к пользователю

Administration->Users->Media

Добавляем способ оповещения: указываем тип — telegram (созданый ранее), куда отправлять (указываем наш чат Zabbix_Alert), указываем время когда можно отправлять оповещения и уровень важности

Все настройка готова.

Настройка Zabbix Telegram

Zabbix умеет отправлять оповещения, используя скрипт. Zabbix отправляет 3 параметра: получатель, тема сообщения, текст сообщения.

Создание скрипта

Давайте напишем скрипт, который и будет передавать нам информацию из Zabbix нашему боту, который в свою очередь будет передавать ее нам:

#!/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
wget -O /dev/null "http://crierbot.appspot.com/$1/send?message=Subj: $2 || Message:$3"

Где $1, $2, $3 переданные Zabbix’ом параметры: получатель, тема сообщения, сообщение.

Данный скрипт сохраняем с произвольным именем, например. telegram.sh в директорию Zabbix’а, где хранятся скрипты уведомлений (в Freebsd по умолчанию это директория:     —       (Для версии 3.2)

Делаем наш скрипт исполняемым:

chmod +x /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Выдаем zabbix права на этот скрипт:

chown zabbix:zabbix /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Настройка способа оповещения через telegram

Теперь переходим в веб-интерфейс Zabbix’а и переходим по Меню: «Администрирование» -> «Способы оповещения» и нажимаем «Создать способ оповещения»

Тут заполняем:

Имя — Произвольное

Тип — Скрипт

Имя скрипта — так, как вы назвали скрипт при его создании

Параметры срипта:

{ALERT.SUBJECT}

{ALERT.MESSAGE}

(Это как раз и есть наши $1, $2 и $3)

И ставим галочку «Активировано»

И нажимаем Добавить (у меня обновить, так как он уже создан у меня)

Добавление способа оповещения пользователю

Далее заходим в «Администрирование» -> «Пользователи«. Выбираем нашего пользователя и переходим на вкладку «Оповещения» и нажимаем «Добавить»

В появившемся окне выбираем тип — под каким именем мы создали действие, вставляем наш токен, который выдал нам бот и нажимаем «Добавить»

После этого у пользователя в Оповещениях появится новый способ оповещения. Нажимаем «Обновить«.

Теперь нам осталось только создать действий, по которому нам будет приходить какое-либо сообщение.

Настройка действий

Итак, приступим к созданию действия. Для этого переходим в «Настройка» -> «Действия«. Справа вверху где «Источник событий» выбираем» Триггеры. Нажимаем «Создать действие«.

Действие:

Имя — Пишем любое понятное для нас имя

Условие — Настраиваем условие, при котором будет происходит наше действие (ниже я приведу пример 1 из своих действий)

Операции:

Выбираем что будет присылаться нам во время срабатывание нашего условия

В операциях нажимаем Новый и добавляем наш способ оповещения:

Должно получиться что то типа вот этого.

На вкдадке Операции восстановления Выбираем в операциях «оповещение о восстановлении», чтобы знать, что проблема ушла.

И нажимаем «Добавить«. В принцип на этом этапе мы уже все настроили!

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: