Существует ZOOM CallREC - система записи разговоров от Cisco.
Иногда с ней возникали проблемы:
1. Звонки переставали писаться.
2. Появлялись битые звонки, которые невозможно было прослушать.
Возникла задача мониторинга таких проблем.
Был доступ только к веб-интерфейсу ZOOM CallREC.
Необходим Powershell не ниже 3 версии.
Скрипт на Powershell отправляет post-запрос веб-серверу ZOOM CallREC, получает ответ, парсит его, результат присылает на почту.
Код скрипта:
Иногда с ней возникали проблемы:
1. Звонки переставали писаться.
2. Появлялись битые звонки, которые невозможно было прослушать.
Возникла задача мониторинга таких проблем.
Был доступ только к веб-интерфейсу ZOOM CallREC.
Необходим Powershell не ниже 3 версии.
Скрипт на Powershell отправляет post-запрос веб-серверу ZOOM CallREC, получает ответ, парсит его, результат присылает на почту.
Код скрипта:
#Скрипт делает post-запрос к веб-интерфейсу проверки записей звонков. #Линк на страницу авторизации $link2 = "http://1.1.1.1/callrec/loginAction.do" #Делаем get-запрос по линку. Сохраняем сессию в переменной fb. $r = Invoke-WebRequest $link2 -SessionVariable fb #Определяем параметры авторизации для дальнейшей передачи методом post $form = $r.Forms[1] $form.Fields["login"] = "login" $form.Fields["password"] = "password" #Делаем из сохраненной сессии post-запрос по этому же линку, но уже с передачей логина и пароля. Аналогично можно сделать #"http://1.1.1.1/callrec/loginAction.do?login=login&password=password" $re = Invoke-WebRequest -Uri $link2 -WebSession $fb -Method Post -Body $form.Fields #Из сохраненной сессии идем по линку со звонками. Но по дефолту всего 10 звонков #$zz = Invoke-WebRequest -Uri "http://1.1.1.1/callrec/calldatatable" -WebSession $fb #Нам нужно 500 звонков. Поэтому идем из сохранненной сессии сюда, дальше авторедирект наhttp://1.1.1.1/callrec/calldatatable $xx = Invoke-WebRequest -Uri "http://1.1.1.1/callrec/filteroperation?countperpage=500" -WebSession $fb #Получим ответ от post-запроса $Text = $xx.Content #Найдем все строки, содержащие getDayName(текущая дата), а затем в этих строках найдем строку вида "td>минус_один_или_два_часа_от_текущего:" #Если нашли такую строку, значит за последние два часа звонки пишутся $datestamp2 = get-date -format "\\(d','M','yyyy\\)" $datestampfile = "getDayName" + $datestamp2 $parsedate = $Text.Split("r") | Select-String $datestampfile $minus_one_hour = (get-date).AddHours(-1).ToString("%h") $minus_two_hour = (get-date).AddHours(-2).ToString("%h") $m1 = "td>" + $minus_one_hour + ":" $m2 = "td>" + $minus_two_hour + ":" $stringcalls1 = $parsedate | Select-String $m1 $stringcalls2 = $parsedate | Select-String $m2 #prehratWarning - значок звонка предупреждения. error - значок звонка битого. Посчитаем их количество. $parsewarningcalls = $Text.Split(" ") | Select-String "prehratWarning" $parsebadcalls = $Text.Split(" ") | Select-String "error" #Если количество звонков-предупреждений на 500 общего количества больше либо равно 4 - ошибка. #Если количество битых звонков на 500 общего количества больше либо равно 4 - ошибка. if( ($parsewarningcalls.Count -le 30) -And ($parsebadcalls.Count -le 8) -And ($stringcalls1.Count -gt 0 -Or $stringcalls2.Count -gt 0) ) { $Subject = "Норма при проверке: запись звонков" $text5 = "Все в норме" } else { $Subject = "Ошибка при проверке: запись звонков" $text5 = "`n Проверить по ссылке:http://1.1.1.1/callrec/" } if($parsewarningcalls.Count -gt 30) { $text2 = "`n Обнаружено более 30 звонков-предупреждений из 500 последних `n" } else { $text2 = "" } if($parsebadcalls.Count -gt 8) { $text3 = "`n Обнаружено более 8 битых звонков из 500 последних `n" } else { $text3 = "" } if(($stringcalls1.Count -eq $NULL -And $stringcalls2.Count -eq $NULL) -Or ($stringcalls1.Count -eq 0 -And $stringcalls2.Count -eq 0) ) { $text1 = "`n Звонков не было в течение 2 часов, либо они не пишутся `n" } else { $text1 = "" } $text4 = "`n Количество звонков-предупреждений: " + $parsewarningcalls.Count + "`n Количество битых звонков: " + $parsebadcalls.Count + " `n" #Отправим письмо $EmailFrom = “11@ss.ru” $EmailTo = “22@ss.ru” $body = $text1 +$text2+$text3+$text4+$text5 $Encoding = [System.Text.Encoding]::UTF8 $SmtpServer = “1.1.1.1” [string]$Encoding="utf-8" $messageParameters = @{ Encoding = [System.Text.Encoding]::GetEncoding($Encoding) } Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $body -Subject $Subject