E ai, pessoal! Tudo bom?
No artigo de hoje, mostrarei um pouco sobre um case que eu falei na minha última palestra que apresentei na CapiConf, em Curitiba e no Darkmira Tour, em Brasília. No caso, eu apresentei uma palestra sobre Chatops e como utilizar as coisas boas da moda chatbots. Caso queira acessar os slides da palestra, clique aqui.
Um dos cases que mostrei – de modo didático – é como criar um bot de Telegram para te avisar caso um site esteja fora do ar. A ideia é mostrar uma funcionalidade bem fácil e que você pode adaptar à sua realidade. No caso, o script que mostrarei envia uma mensagem para o seu Telegram caso um site não retorne um status 200 (ok).
O primeiro passo é criar o seu bot no Telegram. Para isso, você deverá abrir uma conversa com o BotFather (@Botfather). Você deverá seguir os seguintes passos:
- Enviar /newbot.
- Depois escolher um nome para seu bot e em seguida, um username para seu bot (esse username deve finalizar com bot).
No exemplo abaixo, o nome do bot é “pokeops” e o username “pokeopsbot”:
Feito isso o BotFather irá te retornar a chave (token) que você usará na sua integração. Após isso, você deverá abrir um chat com seu bot criado, @{nome_do_bot}, exemplo: @pokeops.
E falar qualquer coisa. No meu caso, eu escrevi clear, e em seguida, ir no seu navegador e digitar https://api.telegram.org/bot{token}/getUpdates.
Exemplo: https://api.telegram.org/bot999999:HEUeuwyhsyeieow736d/getUpdates.
Você verá um json com um atributo chamado “id”. No exemplo abaixo está 999999999. Esse é o chat id.
{"ok":true,"result":[{"update_id":840677512, "message":{"message_id":82,"from":{"id":999999999,"is_bot":false,"first_name":"Pokemaobr","username":"pokemaobr","language_code":"pt-BR"},"chat":{"id":999999999,"first_name":"Pokemaobr","username":"pokemaobr","type":"private"},"date":1524241662,"text":"clear"}}]}
Com isso, podemos agora criar o script. Antes de tudo, vamos criar um diretório (Telegram) e criar o composer.json abaixo.
{ "require": { "guzzlehttp/guzzle": "^6.3", "telegram-bot/api": "^2.3" } }
Com o composer.json no diretório, basta dar um composer install.
A biblioteca que faremos a integração com o Telegram é a telegram-bot/api, que é bem simples e no Constructor já conseguimos mandar a mensagem que queremos.
Agora vamos criar o arquivo telegram.php. Você deve substituir os valores das variáveis: $url, $botId e $chatId de acordo com seu sistema, seu bot Id e seu chatId.
<?php require_once 'vendor/autoload.php'; use TelegramBot\Api\BotApi; //carregando a classe BotApi do TelegramBot use GuzzleHttp\Client; //carregando a classe Client do GuzzleHttp $client = new Client(); //criando nova instância do GuzzleHttp $url = ''; // url do sistema $botId = ''; //id do bot do telegram $chatId = ''; //id do chat do telegram try { $res = $client->request('GET', $url); //realizando uma requisição get na url $responseCode = $res->getStatusCode(); //retornando o status code da requisição } catch (GuzzleHttp\Exception\ClientException $e){ //capturando o response code caso o sistema retorne 404 $responseCode = '404'; } if ($responseCode != '200') //caso o response code não seja 200 { $bot = new BotApi($botId); //cria nova instância da classe do BotApi $bot->sendMessage($chatId, 'O sistema: ' . $url . ' está fora do ar'); //envia a mensagem no telegram }
Agora você só precisa criar um crontab ou agendador de tarefas para chamar o script de tempos em tempos. No caso, para chamar o script de dois em dois minutos pelo crontab, utilizaríamos:
# crontab -e */2 * * * * php /path.to/telegram.php
Onde path.to é o caminho para o arquivo telegram.php, e então, quando o site estiver fora do ar, o seu bot irá te enviar uma mensagem de sistema fora do ar.
Espero que tenha ajudado vocês a não precisarem verificar manualmente toda hora se o seus sistemas estão fora do ar.