[BotTelegram PT.2] Criando seu próprio bot no Telegram usando NodeJS + Deploy na nuvem via Heroku
Tags: node, telegram, bot, heroku
Published: 2020-07-04 22:26:38

[Na parte anterior iniciamos](https://dev.to/soralan/bottelegram-pt-1-criando-seu-proprio-bot-no-telegram-usando-nodejs-deploy-na-nuvem-via-heroku-4ig8) o setup básico e a primeira funcionalidade de um bot no Telegram usando a API do NodeJS. Neste tutorial faremos o deploy do bot usando uma hospedagem grátis com o Heroku.

Então partiu pro código.

![hackerman](https://media1.giphy.com/media/13UZisxBxkjPwI/giphy.gif?cid=ecf05e473b7d828b79aba5fb5fb9e0fa6ff18dcf4ac0e265&rid=giphy.gif)

###1. O que precisaremos?

1.1 [Git instalado](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git);

1.2 Cadastro no [Heroku](https://devcenter.heroku.com/) feito;

1.3 [Cliente do Heroku](https://devcenter.heroku.com/articles/heroku-cli) instalado;

###2. Configurações prévias: Comando start

Quando sua aplicação sobe para o Heroku, ele possui um _modus operandis_ padrão de executar o comando `npm start`. O que acontece é que sem uma configuração prévia o seu bot simplesmente não vai abrir o index.js, já que o comando para que ele rode seja `node index.js`.

Então para resolver isso é muito simples, nós iremos fazer um script que executará `node index.js` quando o comando `npm start` rodar.

No seu arquivo **package.json** procure pela parte de script e adicione o script `"start": "node index.js"`. Caso o script não exista, você pode criar em formato JSON. Ele deve ficar mais ou menos assim:

![package.json](https://i.imgur.com/CR6nQkh.jpg)

###3. Configurações prévias: Express e direcionamento de portas

Para que seu bot fique online sem problemas no Heroku, você precisa dizer para a hospedagem na nuvem quais portas utilizar. Caso contrário, o Heroku simplesmente desliga a sua aplicação. Neste sentido, a melhor dependência que resolva esse problema é o **Express**. 

Então com o terminal aberto dentro da pasta da sua aplicação adicionaremos o Express como dependência:
`npm install express`

Dentro do seu arquivo principal (nesse tutorial o *index.js*) importe o express usando `var express = require('express');`

Inicie a função do express com `var app     = express();` e vamos fazer a configuração das portas:

Como o Heroku fornece dinâmicamente a porta à ser utilizada pelo app, usaremos o método *process.env.PORT* para capturar a porta passada pelo Heroku OU então caso a porta não seja passada usaremos uma porta padrão: 
`app.set('port', (process.env.PORT || 5000));`

Também podemos criar um log para dizer em qual porta a aplicação estará rodando:
`app.get('/', function(request, response) {
    var result = 'App is running'
    response.send(result);
}).listen(app.get('port'), function() {
    console.log('App is running, server is listening on port ', app.get('port'));
});`

[Você pode conferir um artigo do FAQ do Heroku em inglês explicando melhor sobre o uso do Express com o Heroku](https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error)

###4. Fazendo o deploy para o Heroku

Finalmente nossa aplicação está pronta e bonita para ir online! Então com o seu terminal aberto na pasta do seu projeto vamos iniciar a última etapa.

![Coringa doido para soltar o bot na nuvem](https://media1.giphy.com/media/YPIrsRqqO7oB2/giphy.gif)

4.1 Com a sua conta no Heroku criada, execute o comando no terminal `heroku login`, siga os passos para fazer o login na plataforma;

4.2 Execute `heroku create` para criar uma nova aplicação no Heroku (frisando mais uma vez que o terminal precisa estar na pasta da aplicação);

4.3 Execute `heroku config:set TOKEN=Token_unico_da_sua_aplicação_fornecida_pelo_BotFather`.

E depois execute `heroku config:set HEROKU_URL=$(heroku info -s | grep web_url | cut -d= -f2)` para configurar o ambiente;

4.4 O padrão agora é parecido com [fazer o upload de repositórios para o github usando o git](https://dev.to/soralan/subindo-seu-repositorio-no-github-atraves-da-linha-de-comando-3kcm).

4.4.1 Para usar o git para subir os arquivos comece selecionando todos os arquivos da pasta com `git add .`

4.4.2 Faça o commit com `git commit -m "primeiro commit"`

4.4.3 Finalmente jogue para a pasta root da sua aplicação no Heroku com `git push heroku master`;

4.4.4 Seja feliz com o seu bot rodando na nuvem
![Received your message](https://i.imgur.com/IJc5hzb.png)

###5. Outras informações importantes

5.1 Caso você venha a ter algum erro com o seu bot, você pode checar os últimos logs do console usando o comando `heroku logs`, o que pode te auxiliar a resolver eventuais problemas;

5.2 Esse método de deploy é totalmente grátis e, por consequência, existem limitações. Você possui um limite de mais ou menos 600 horas por mês com a sua aplicação rodando online e ela entrará em modo soneca após 30 minutos de inatividade. Existem métodos para adicionar mais horas sem pagar nada e adicionar addons que permitem o seu bot não entrar em modo soneca, mas fica para um outro tutorial.

5.3 Caso você venha a ter um erro de "deprecated Automatic enabling of cancellation of promises is deprecated", tente adicionar o comando `process.env.NTBA_FIX_319 = 1;` na primeira linha do seu index.js. Ou só adicione isso para se prevenir deste erro.

5.4 Se este link lhe foi útil, deixe seu ❤️

---

Alan Pereira
[Meu LinkedIn](https://www.linkedin.com/in/sor-alan/)
[Meu GitHub](https://github.com/sor-alan)
[Meu Instagram](https://www.instagram.com/alanpefab/)