Добрый вечер дорогие форумчане. Я пришел в новую компанию на работу, сам я новичок и дали мне работу с заббиксом и его оптимизацией.
До меня был человек написавший телеграм бота который не работает. Мне дали задание допилить его и улучшить. Только я в bash-скриптинге не шарю и прошу помочь объяснить что происходит в данном коде.
СпойлерКОД#!/bin/bash
export LC_ALL="C"
export LANG="en_US.UTF-8"
#------------------------------------------------------------------------------
BOT_AUTH_TOKEN="token"
LOG_FILE="/var/log/zabbix/telegram.log"
DATETIME=$(date '+%Y/%m/%d %H:%M:%S')
CHAT_ID="$1"
TEXT=$(echo "$2" | grep -v '.UNKNOWN. = .UNKNOWN.' | sed 's/\"//g')
#------------------------------------------------------------------------------
if [[ "${CHAT_ID}" == "getid" ]]; then
RESULT=$(curl -sS -i --max-time 30 "https://api.telegram.org/bot${BOT_AUTH_T OKEN}/getUpdates" 2>&1)
RC=$?
if [ ${RC} -ne 0 ]; then
echo "${RESULT}"
exit 1
elif ! echo "${RESULT}" | grep -iq '"ok":true'; then
echo "${RESULT}"
exit 1
fi
echo "${RESULT}" | awk -F'"chat":' '{print $2}' | awk -F'"date":' '{print $1 }' | sort -u | grep -E "\-?[0-9]{7,}"
exit 0
elif [[ "${CHAT_ID}" =~ ^-?[0-9]+$ && -n "${TEXT}" ]]; then
echo "[${DATETIME}] CHAT_ID:\"${CHAT_ID}\" TEXT=\"${TEXT}\"" >> "${LOG_FILE} "
RESULT=$(curl -sS -i --max-time 30 \
--header 'Content-Type: application/json' \
--request 'POST' \
--data '{"chat_id": "'"${CHAT_ID}"'", "text": "'"${TEXT}"'"}' \
"https://api.telegram.org/bot${BOT_AUTH_TOKEN}/sendMessage" 2>&1)
RC=$?
if [ ${RC} -ne 0 ]; then
echo "${RESULT}" | tee -a "${LOG_FILE}"
echo '' >> "${LOG_FILE}"
exit 1
elif ! echo "${RESULT}" | grep -iq '"ok":true'; then
echo "${RESULT}" | tee -a "${LOG_FILE}"
echo '' >> "${LOG_FILE}"
exit 1
fi
echo "${RESULT}" >> "${LOG_FILE}"
echo '' >> "${LOG_FILE}"
echo "[OK] Message was sent"
exit 0
else
echo "[${DATETIME}] CHAT_ID:\"${CHAT_ID}\" TEXT=\"${TEXT}\"" >> "${LOG_FILE} "
echo "[EE] Invalid arguments" | tee -a "${LOG_FILE}"
echo '' >> "${LOG_FILE}"
exit 1
fi
exit 0
Скрипту передают chatid и сообщение, он отправляет его в чат телеграма с заданным id. Настроены всякие проверки и логирование.
Надо смотреть, что именно не работает. Возможно, токен авторизации не подходит, так как предыдущий админ настраивал его через своего бота, которого удалил после ухода. В конкретном скрипте токен вообще не указан, вместо него просто написано token (BOT_AUTH_TOKEN="token"), а должен быть буквенно-числовой код.
Сама отправка реализована очень просто и стандартно. Вот она:
curl -sS -i --max-time 30 \
--header 'Content-Type: application/json' \
--request 'POST' \
--data '{"chat_id": "'"${CHAT_ID}"'", "text": "'"${TEXT}"'"}' \
"https://api.telegram.org/bot${BOT_AUTH_TOKEN}/sendMessage" 2>&1
Все остальное это обвязка к этой конструкции с проверками.
token (BOT_AUTH_TOKEN="token")
я сам скрыл токен, чтобы не выкладывать токен в открытй доступ