Ad Widget

Collapse

Оповещение Вконтакте

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • djin59
    Member
    • Jul 2023
    • 96

    #1

    Оповещение Вконтакте

    Решил опубликовать, может кому пригодится ..... оповещения в ВК , как альтернатива другим "оповещалкам"
    Собственно сам WebHook:
    Code:
    'use strict';
    
    try {
        var params = JSON.parse(value);
    
        // Проверка обязательных параметров
        if (!params.To || params.To.trim() === '') {
            throw 'Параметр "To" (user_id) обязателен!';
        }
        if (!params.Message || params.Message.trim() === '') {
            throw 'Параметр "Message" обязателен!';
        }
    
        // Формируем сообщение с URL-кодированием (как в shell-скрипте)
        var subject = params.Subject ? encodeURIComponent(params.Subject) : '';
        var message = encodeURIComponent(params.Message);
        var fullMessage = subject ? subject + '%0A' + message : message;
    
        // Токен доступа VK (замените на свой)
        var vkAccessToken = 'ТОКЕН'; // используйте правильный токен
    
        // Генерация random_id (аналог od -An -N2 -i /dev/random)
        var randomId = Math.floor(Math.random() * 0x7FFFFFFF); // 31-битное случайное число
    
        // Параметры запроса в виде строки (для прямой передачи в post)
        var queryString = 'access_token=' + encodeURIComponent(vkAccessToken) +
                          '&user_id=' + encodeURIComponent(params.To.toString()) +
                          '&message=' + fullMessage +
                          '&v=5.199' +
                          '&random_id=' + randomId;
    
        // Создаем HTTP-запрос
        var req = new HttpRequest();
        req.addHeader('Content-Type: application/x-www-form-urlencoded');
    
        // Настраиваем прокси (обязательно, если требуется)
        req.setProxy('ВАШ_ПРОКСИ');  // раскомментируйте и укажите свой прокси
    
        // Отправляем POST-запрос
        var response = req.post('https://api.vk.com/method/messages.send', queryString);
    
        // Логирование
        Zabbix.Log(4, '[VK Webhook] Request: ' + queryString);
        Zabbix.Log(4, '[VK Webhook] Response: ' + response);
    
        // Проверяем статус HTTP
        if (req.getStatus() < 200 || req.getStatus() >= 300) {
            throw 'HTTP Error: ' + req.getStatus() + ' - ' + response;
        }
    
        // Парсим ответ VK
        var respObj = JSON.parse(response);
        if (respObj.error) {
            throw 'VK API Error: ' + JSON.stringify(respObj.error);
        }
    
        return 'OK';
    }
    catch (error) {
        Zabbix.Log(3, '[VK Webhook] ERROR: ' + error);
        throw 'Ошибка отправки: ' + error;
    }
    1) регистрируемся в ВК
    2) создаем сообщество, лучше закрытое или частное
    3) приглашаем в сообщество пользователей= оповещателей, которым будем слать месседжи из Zabbix
    4) Пользователь ОБЯЗАТЕЛЬНО должен написать сообществу сообщение , чтобы была возможность получать сообщения от сообщества
    5) Просим от оповещателей прислать их цифровой ID VK (указываем его для данного оповещения в настройках пользователя Zabbix)
    6) Получаем токен сообщества: Заходим в управляемое сообщество - Управление -Дополнительно -Работа с API- Создаем токен, если нету (вносим в webhook)
    7) Настраиваем прокси в webhook, если нужен...
    Ниже bash , если кому нужен
    Code:
    #!/bin/sh
    
    # Positional args
    vk_user_id=$1
    vk_subject=$2
    vk_message=$3
    
    # Group access token
    vk_access_token="ТОКЕН"
    
    # Get random id
    vk_random_id=$(od -An -N2 -i /dev/random | tr -d '[:space:]')
    
    # Message template
    vk_full_message="$vk_subject%0A$vk_message"
    
    # VK Api link to messages.send method
    vk_api_method_url="https://api.vk.com/method/messages.send"
    
    # Прокси (замените на свои данные)
    PROXY="ВАШ_ПРОКСИ"
    
    # Execute with proxy
    curl -x "$PROXY" \
         -d "access_token=$vk_access_token&user_id=$vk_user_id&message=$vk_full_message&v=5.199&random_id=$vk_random_id" \
         $vk_api_method_url​
Working...