====== Alertas Telegram en Zabbix ====== Recursos en: [[https://github.com/GabrielRF/Zabbix-Telegram-Notification#userid]] [[https://medium.com/chatfuel-blog/how-to-create-an-automated-bot-on-telegram-without-coding-using-zapier-and-paquebot-5a635a3b867b#.iw2d2zz47]] ===== Crear Bot de Telegram ===== Lo primero que necesitamos es crear un bot de Telegram si aún no lo tenemos. Para crear un bot, basta con iniciar la app en cualquier dispositivo. En la barra de búsqueda de telegram escribimos: @BotFather Para crear nuestro bot debemos interactuar antes con BotFather. Le mandamos un mensaje: /start Nos devolverá comandos que nos posibilita la creación de nuestro bot Como podemos ver, el comando que hay que enviarle es el siguiente: /newbot BotFather nos preguntará por el nombre y un subnombreque queremos darle al bot. Éste tiene que acabar con la palabra bot. En nuestro caso hemos elegido zabbixmerkatu_bot zabbixmerkatu_bot Cuando registre el nuevo bot, nos devolverá el token que utilizaremos para añadirlo a nuestro script de python que haremos en el servidor más tarde. (ejemplo el token que nos han dado para zabbixmerkatu_bot): Use this token to access the HTTP API: 348816857:AAFnvD017g6PhfbIkHkaNbSi1bCjstXTEFo Podemos salir de la conversación con GodFather, ya tenemos el token. Otros comandos de BotFather: /newbot – Create a new bot. /token – Generate authorization token. /revoke – Revoke bot access token. /setname – Change a bot’s name. /setdescription – Change bot description. /setabouttext – Change bot about info. /setuserpic – Change bot profile photo. /setcommands – Change bot commands list. /setjoingroups – Can your bot be added to groups? /setprivacy – What messages does your bot see in groups? /deletebot – Delete a bot. /cancel – Cancel the current operation. **IMPORTANTE: Hay que añadir al bot al grupo de chat y enviarle un mensaje** ===== Configurar Zabbix Server ===== Primero debemos saber la version de python que tenemos instalada en el servidor y donde whereis python En nuestro caso, tenemos la v3.4 en el directorio /usr/bin/python3.4 Instalamos la herramienta python pip: apt-get install python-pip Instalamos la API de Telegram: pip install pyTelegramBotAPI ***En caso de que no funcione pip, bajar del repositorio git: cd /usr/src git clone --recursive https://github.com/eternnoir/pyTelegramBotAPI.git cd pyTelegramBotAPI python3.4 setup.py install ===== Configuración Script ===== Revisamos la configuración de Zabbix para saber cual es el path de los alertscripts. Si es necesario, lo cambiamos por la ruta donde dejemos el script: vim /etc/zabbix/zabbix-server.conf Supongamos que tenemos definida la ruta: /var/lib/zabbix. En esta carpeta creamos el fichero por ejemplo que se llame telegram-bot.py vim telegram-bot.py Pegamos el siguiente contenido, cambiando nuestro token: #!/usr/bin/python3.4 #Le indicamos donde se encuentra el interprete de python import telebot,sys BOT_TOKEN='348816857:AAFnvD017g6PhfbIkHkaNbSi1bCjstXTEFo' #cambiamos por el nuestro DESTINATION=sys.argv[1] #Este argumento lo programamos en el front como {ALERT.SENDTO} SUBJECT=sys.argv[2] #Este argumento lo programamos en el front como {ALERT.SUBJECT} MESSAGE=sys.argv[3] #Este argumento lo programamos en el front como {ALERT.MESSAGE} MESSAGE = MESSAGE.replace('/n','\n') tb = telebot.TeleBot(BOT_TOKEN) tb.send_message(DESTINATION,SUBJECT + '\n' + MESSAGE) Le damos permisos de ejecución y cambiamos de propietario para que lo ejecute el usuario zabbix chmod +x telegram-bot.py chown zabbix:zabbix telegram-bot.py Listo ===== Configuración en el Front ===== Accedemos a la GUI del server: [[http://zabbix.merkatu.info:8888/zabbix]] Vamos a la pestaña de Administración >> Media Types >> Create Media-type Name -> Le damos un nombre descriptivo Type -> Le decimos que sea un script Script name -> Le indicamos exactamente el nombre que hemos puesto al script (telegram-bot.py) Añadimos los siguientes parámetros: {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} Marcamos la casilla de enable, damos en update y salimos. Ahora nos vamos a Users >> Admin >> Media >> Add Type -> Desplegamos y seleccionamos nuestro script Sendto -> El id de nuestro grupo en telegram (-139912990) When enable -> Programacion de alertas Use it severity -> Que tipo de alertas queremos que lleguen al chat Marcamos casilla enable y le damos a update. ===== Para conocer los ids de los grupos y usuarios de telegram ===== ==== UserID ==== If you want to get a user id, send a message from this user to the bot. Reload the page and the user id will be shown. Example: "message":{"message_id":59,"from":{"id":9083329,"first_name":"Gabriel","last_name":"R F","username":"GabrielRF"},"chat":{"id":9083329,"first_name":"Gabriel","last_name":"R F","username":"GabrielRF","type":"private"},"date":1446911853,"text":"\/start"}}]} In this case, the user id is 9083329. So, on the step Users, the field Send to would be 9083329. ==== GroupID ==== If you prefer to have your bot working on a group, then create the group and add the bot to it. Reload the page and you will see a message like: "message":{"message_id":60,"from":{"id":9083329,"first_name":"Gabriel","last_name":"R F","username":"GabrielRF"},"chat":{"id":-57169325,"title":"q31231","type":"group"},"date":1446912067,"group_chat_created":true}},{"update_id":727527785, In this case, the group id is -57169325. So, on the step Users, the field Send to would be -57169325. Note that a group id is always negative. Only user's id are positive.