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.

1 {"ok":true,"result":[{"update_id":840677512,
2 "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.

1 {
2     "require": {
3         "guzzlehttp/guzzle": "^6.3",
4         "telegram-bot/api": "^2.3"
5     }
6 }

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.

1 <?php
2
3 require_once 'vendor/autoload.php';
4
5 use TelegramBot\Api\BotApi; //carregando a classe BotApi do TelegramBot
6 use GuzzleHttp\Client; //carregando a classe Client do GuzzleHttp
7
8 $client = new Client(); //criando nova instância do GuzzleHttp
9 $url = ''; // url do sistema
10 $botId = ''; //id do bot do telegram
11 $chatId = ''; //id do chat do telegram
12   
13 try
14 {
15 $res = $client->request('GET', $url); //realizando uma requisição get na url
16 $responseCode = $res->getStatusCode(); //retornando o status code da requisição
17 } catch (GuzzleHttp\Exception\ClientException $e){ //capturando o response code caso o sistema retorne 404
18 $responseCode = '404';
19 }
20
21 if ($responseCode != '200') //caso o response code não seja 200
22 {
23
24 $bot = new BotApi($botId); //cria nova instância da classe do BotApi
25 $bot->sendMessage($chatId, 'O sistema: ' . $url . ' está fora do ar'); //envia a mensagem no telegram
26
27 }

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:

1 # crontab -e
2 */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.

Fonte: Rodrigo Cardoso, pós graduado em Engenharia de Softwares Orientado para Serviços pela Metrocamp, Campinas/SP. Bacharel em Matemática Aplicada e Computacional pela Universidade Federal Rural do Rio de Janeiro, Community Manager do iMasters. Programador PHP desde 2002. Evangelista PHPSP. Desenvolve sistemas desde batalhas Pokemon em mIRC, a robôs automatizadores de tarefas.