Как можно изменить скрипт бота, чтобы Zabbix отправлял не только тестовые сообщения, но и реальные уведомления?

Как внести изменения в наш скрипт, чтобы Zabbix отправлял все уведомления в Яндекс Мессенджер, а не только тестовые сообщения с параметром Sent_message?
  • 23 ноября 2024 г. 20:53
Ответы на вопрос 2
Для того чтобы изменить скрипт вашего бота и настроить Zabbix для отправки всех уведомлений в Яндекс Мессенджер, вам необходимо внести несколько изменений в код вашего скрипта.

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

```python
import requests

def send_message_to_yandex_messenger(message):
    url = "https://messenger.yandex.com/api/send"
    payload = {
        "text": message,
        "chat_id": "your_chat_id"
    }
    headers = {
        "Authorization": "Bearer your_token"
    }
    
    response = requests.post(url, json=payload, headers=headers)
    return response.status_code == 200

def main():
    # Получаем данные из Zabbix
    sent_message = "Это тестовое сообщение"
    if send_message_to_yandex_messenger(sent_message):
        print("Сообщение отправлено успешно")

if __name__ == "__main__":
    main()
```

### Изменения для отправки всех уведомлений

1. **Обработайте входные данные**: Вместо того чтобы использовать фиксированное тестовое сообщение, вы можете извлекать содержимое уведомлений Zabbix через параметр, который будет передаваться скрипту.

2. **Измените логику скрипта**: Вам нужно обновить логику скрипта, чтобы он принимал любые сообщения.

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

```python
import requests
import sys

def send_message_to_yandex_messenger(message):
    url = "https://messenger.yandex.com/api/send"
    payload = {
        "text": message,
        "chat_id": "your_chat_id"
    }
    headers = {
        "Authorization": "Bearer your_token"
    }
    
    response = requests.post(url, json=payload, headers=headers)
    return response.status_code == 200

def main():
    # Получаем данные из Zabbix, сообщение передается как аргумент при вызове скрипта
    if len(sys.argv) < 2:
        print("Ошибка: Сообщение не передано.")
        return

    message = sys.argv[1]
    
    if send_message_to_yandex_messenger(message):
        print("Сообщение отправлено успешно")
    else:
        print("Ошибка при отправке сообщения")

if __name__ == "__main__":
    main()
```

### Как вызвать скрипт из Zabbix

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

```bash
python your_script.py "{ALERT.SEND.MESSAGE}"
```

Где `{ALERT.SEND.MESSAGE}` – это переменная, содержащая текст уведомления Zabbix.

### Дополнительные шаги

1. **API токен и chat_id**: Убедитесь, что вы правильно настроили токен для авторизации и chat_id для отправки сообщений в нужный чат Яндекс Мессенджера.

2. **Настройка триггеров и действий в Zabbix**: Убедитесь, что триггеры и действия настроены в Zabbix для вызова этого скрипта при возникновении нужных событий.

Эти изменения позволят вашему скрипту отправлять любые уведомления из Zabbix в Яндекс Мессенджер.
Скрипт вызывает функцию send_message('') с пустой строкой, что явно не то, чего ты хочешь. Zabbix при вызове скрипта передаёт параметры через аргументы командной строки (sys.argv). Это нужно правильно обработать. 

if len(sys.argv) > 1:
    message = " ".join(sys.argv[1:])
else:
    message = "nekitosikpendosik"


Запринтуй или залогируйвывод, чтобы видеть аргумент
Похожие вопросы