Desenvolvimento

20 abr, 2018

Criando um bot no Telegram para avisar que um sistema está fora do ar

Publicidade

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.