Log bot para Telegram em 10 minutos

Pavel Gerasimov Blocked Unblock Seguir Seguindo 5 de março de 2017

Se você quiser criar o seu primeiro bot desde que o Telegram anunciou o Bot API e ainda não criá-lo – não é um problema. Aqui estão alguns passos simples que devem ajudá-lo a começar com o NodeJS, o MongoDB e o Heroku

Vamos criar um bot simples que deve ser capaz de armazenar todas as mensagens no banco de dados e mostrá-las de volta ao usuário

No começo devemos ir ao BotFather e pedir a ele para criar um /newbot . Ele deve lhe dar token para acessar a API HTTP. É isso – o seu bot está pronto para começar!

Preparando o aplicativo

Seu bot é simplesmente uma conta do Telegram operada por software – portanto, é um aplicativo do lado do servidor que recebe dados da API do Telegram usando sondagens longas ou webhooks. De qualquer forma, você precisa configurar um servidor se quiser que seu bot esteja disponível não apenas quando seu laptop com o servidor local estiver ligado. Heroku é um lugar perfeito para implantar seu aplicativo

Existem muitas implementações de API Bot para diferentes plataformas, para que você possa escolher o seu favorito. Nós usaremos https://github.com/yagop/node-telegram-bot-api

No meu exemplo , usei uma configuração de projeto do tutorial do Heroku:

 git clone https://github.com/heroku/node-js-getting-started.git 
cd node-js-getting-started
npm install
npm instalar node-telegram-bot-api --save
heroku criar
git push heroku mestre

Verifique isto localmente com heroku local web e em servidor de heroku remoto com heroku open . Observe que a versão do nó deve ser pelo menos 6.9.4 para usar a API do Telegram

Na verdade, precisamos apenas

  • Procfile com um comando é executado pelos dynos do seu aplicativo no Heroku
  • app.json – um manifesto descrevendo nosso aplicativo da web
  • package.json segurando metadados variuos para o nosso projeto
  • e index.js com ponto de entrada do nosso aplicativo

mas clonar Heroku exemplo é muito mais fácil pela primeira vez. Agora remova os arquivos desnecessários e mude o nosso index.js para ficar assim:

 var express = require ( 'express' ); 
var packageInfo = require ( './package.json' );

var app = express ();

app.get ( '/' , function (req, res) {
res.json ({version: packageInfo.version});
});

var server = app.listen (process.env.PORT || 5000, function () {
var host = server.address (). endereço;
var port = server.address (). port;

console.log ( 'servidor da Web iniciado em http: //% s:% s' , host, port);
});

Algo funciona, vamos em frente!

Chutando nosso bot do Telegrama

Se quisermos implantá-lo no Heroku, devemos saber que o Heroku encerra o processo em 30 segundos se nenhuma porta HTTP for ouvida. Então vamos criar um servidor web simples baseado em nosso index.js que apenas retorna a versão do aplicativo. Mova a lógica do servidor para web.js , prepare o bot.js vazio e o index.js deve ficar assim:

 require ( './bot' ); 
require ( './web' );

e adicione algo como o New Relic APM ao seu projeto. O único propósito é fazer ping no seu aplicativo heroku a cada 5 minutos para evitar que ele adormeça.

OK, o bot!

 // seu token do BotFather 
token var = 'XXXXXXXXXX: YYYYYYYYYYYYYYYYYYYYYYYYY' ;
var Bot = require ( 'node-telegrama-bot-api' ),
bot = novo Bot (token, {polling: true });
 bot.onText (/ ^  / echo $ /, (msg, match) => { 
bot.sendMessage (msg.chat.id, 'Você disse' + correspondência [1] )
});

E sim, funciona!

Adicionar log ao banco de dados baseado em nuvem

Usaremos o MongoDB por meio da ferramenta de modelagem de objetos do mongoose para o NodeJS. Instale o mangusto via npm e imprima o código a seguir em db.js :

 var mongoose = require ( "mangusto" ); 

var uring =
process.env.MONGODB_URI;

mongoose.connect (uristrando, função (err, res) {
if (err) {
console.log ( 'ERRO conectando a:' + uristring + '.' + err);
} mais {
console.log ( 'Succeeded connected to:' + uristring);
}
});

Você pode criar banco de dados gratuito em mongolabs ou usar o addon Heroku

A tarefa que estamos resolvendo é armazenar mensagens no banco de dados e listá-las por solicitação. Vamos descrever o esquema da mensagem:

 var messageSchema = novo mongoose.Schema ({ 
do utilizador: {
nome: String,
número de identidade
}
mensagem: {
chat_id: string,
id: string,
text: String
}
timestamp: string
});

e crie um modelo com este esquema

 var Message = mongoose.model ( 'Messages' , messageSchema); 

É isso aí, agora basta adicionar alguns métodos ao nosso module.exports:

 getLogs (cb) { 
Message.find ({}). Exec ( function (err, result) {
cb (resultado);
})
}

clearLogs (cb) {
Message.remove ({}, cb);
}

addLog (user, message, cb) {
dbmsg = new Message ({
usuário: usuário,
mensagem: message,
timestamp: new Date (). toISOString ()
}). save (cb);
}

Volte para bot.js : este código nos permite armazenar todas as mensagens recebidas:

 bot.onText (/^(.+)$/, function (msg, match) { 
db.addLog ({
nome: msg.from.first_name,
id: msg.from.id
}, {
chat_id: msg.chat.id,
id: msg.message_id,
texto: correspondência [1]
})
});

Por favor, note que nós armazenamos um texto de mensagem, ID de mensagem, ID de usuário e ID de bate-papo. Essa abordagem nos permite encaminhar a mensagem original para o usuário quando ele quiser visualizar o log:

 bot.onText (/ ^  / get_logs $ /, (msg, correspondência) => { 
db.getLogs ((res) => bot.forwardMessage (msg.chat.id, el.message.chat_id, el.message.id))
});
});

As chamadas assíncronas são o principal problema – o Telegram não garante salvar a ordem das mensagens encaminhadas

Envie números de 1 a 10 e receba mensagens encaminhadas em ordem aleatória

Ser educado

Devido ao acordo do Telegram, precisamos ensinar nossos comandos do bot 2: / start e / help. Faça do mesmo jeito.

Também podemos declarar comandos para nosso bot – o Telegram lhe dirá comandos disponíveis quando você começar a digitar. Para fazer isso basta dizer /setcommands para BotFather

Por que nós criamos esse bot inútil?

Sim, é absolutamente inútil. Mas agora podemos criar

  • um bot de telegrama
  • implantado em Heroku
  • trabalhando com banco de dados baseado em nuvem
  • capaz de acessar dados do usuário e mensagens originais
  • e executar comandos simples

Usando essa base nas próximas partes, vamos tentar ensiná-lo a aceitar pedidos simples na loja online e notificar nossos 'clientes' sobre eles.