Найти в Дзене
Технология кода

Инструмент для проверки работоспособности сайтов: проверка сертификата SSL и доступности страницы, часть 4

Итак, все необходимые действия сделаны, соберем телеграмм бота. Ниже приведу весь код с комментариями. Можно подключать свой токен, создавать массив сайтов для проверки и пользоваться ботом.

<?php
$update = json_decode(file_get_contents('php://input'), true);
//слушаем телеграм
if (isset($update['message'])) {
$message = $update['message'];
// сообщение которое получил бот
$chatId = $message['chat']['id'];
// чат из которого было отправлено сообщение
http_response_code(200);
sendChatAction($chatId, 'typing');
if (isset($message['text'])) {
http_response_code(200);
// отправим уведомление телеграму что все ок
sendChatAction($chatId, 'typing');
// бот будет показывать статус "печатает"
handleButton($chatId, $message['text']);
// обработка входящих сообщений
}
}

function handleButton($id, $message) {
switch ($message) {

// обрабатываем полученное ботом сообщение
case "Отчет":
// отчет о состоянии сайтов из массива $site
$site['openai-gpt.ru'] = "
https://openai-gpt.ru/";
foreach ($site as $value=>$item) {
echo $item."<br>".$value."<hr>";
$rst_prom[] .= checkSite($item, $value);
}
$rst = implode("; ", $rst_prom);
$rst1 = implode("\n", $rst_prom);
$msg = "Отчет о состоянии сайтов на ".date('d-m-Y H:i')."\n".$rst1;
sendMessage($id, $msg, getMenuKeyboard());
break;
case "Время":
// это запрос по слову время, сделан для наглядной демонстрации
sendMessage($id, "Время на сервере: ".date('d-m-Y H:i:s'), getMenuKeyboard());
// отправка сообщения ботом пользователю и вызов нашего меню
break;
case "/start":
//обработка запуска бота

Бот запущен и работает
Бот запущен и работает

sendMessage($id, "Привет!", getMenuKeyboard());
break;
}
}
function sendMessage($chatId, $message, $replyMarkup = null){

// собственно функция отправки сообщений ботом
$params = [
'chat_id' => $chatId,
'text' => $message,
'reply_markup' => $replyMarkup,
'parse_mode' => 'HTML'
];

$url = 'https://api.telegram.org/bot
ВАШ_ТОКЕН/sendMessage';
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($params),
],
];

$context = stream_context_create($options);
file_get_contents($url, false, $context);
}
function getMenuKeyboard(){
$keyboard = [
['Отчет', 'Время']
// можно добавить еще один элемент, будет три кнопки в ряд, рядов может быть несколько

Как например в другом моем боте
Как например в другом моем боте

];
$replyMarkup = [
'keyboard' => $keyboard,
'resize_keyboard' => true,
];
return json_encode($replyMarkup);
}
function sendChatAction($chatId, $action){

//отправка статуса "печатает"
$params = [
'chat_id' => $chatId,
'action' => $action,
];
$url = 'https://api.telegram.org/bot
ВАШ_ТОКЕН/sendChatAction';
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($params),
],
];
$context = stream_context_create($options);
file_get_contents($url, false, $context);
}
function checkSite($url, $name) {

//проверка сайтов и ssl сертификатов
$stream = stream_context_create(array("ssl" => array("capture_peer_cert" => true)));
$read = fopen($url, "rb", false, $stream);
$cont = stream_context_get_params($read);
$var = ($cont["options"]["ssl"]["peer_certificate"]);
$r = (!is_null($var)) ? true : false;
if($r) {
$error_sert = "ssl ok";
} else {
$error_sert = "ssl BAD";
}
$headers = @get_headers($url);
if (empty($headers[0])) {
$code = 'BAD';
} else {
$code = "ok";
}
$result = $error_sert;
return $name.": ".$code.", ".$result;
}

Результат работы бота
Результат работы бота

На основе этого несложного примера можно создать любые необходимые вам функции.

Надеюсь, что публикация была вам полезна!

Часть 3

Часть 2

Часть 1