Nola sortu Telegramen bot bat

Telegram mezularitza aplikazioa aspaldian egin zen ezaguna. Askok WhatsAppekin alderatzen badute ere, Telegram tresna ahaltsuagoa dugu. Telegramen, taldeak egiteko aukeraz gain, bot-ak eta difusio kanalak egin ditzakegu. Gainera, Euskaraz erabiltzeko aukera dugu aspalditik Gisa elkarteko, Gaueko Koop., Bitarlan eta Librezaleko lagunei esker.

Telegram zerbitzua zerbitzari pribatuetan dago, baina bezeroak libreak dira eta API irekia du. Honek bot-ak egiteko aukera ematen digu.

Gaurkoan @etziBot egingo dugu:

Bot-a sortu

Hasteko bot-aren interfazea sortuko dugu. Oraingoz ez du erantzunik emango.
Bot-a sortzeko mugikorra hartu eta Telegram aplikazioa @Botfather bilatuko dugu:


Bot kudeatzailea da hau. Ematen dituen aukerak ikusteko idatzi /help:


/newbot idatziko dugu gure bot berria sortzeko. Jarraibideei kasu egin eta izena idatzi:

eta horrela frontend-a sortu dugu. Adi, momentu honetan Api tokena jasoko dugu:


Token hori ondoren erabiliko dugu zerbitzaria konfiguratzeko, <zure_api_tokena> deituko diogu.


Interfazea konfiguratzen bukatzeko beste hainbat komando ditugu @BotFather-en. Kasu honetan, profil irudia sartuko diogu.
/setuserpic idatzi eta profil irudia sartu bot-ari:

Bot-aren zerbitzariko kodea

Bot-ari mezua bidaltzen zaion zerbitzariak bakoitzean /new-message api dei bezala jasotzen du. Beraz, zerbitzariak mezu horri erantzun egin beharko dio.

Zerbitzaria sortzen hasteko fitxategi bat sortuko dugu proiektuarentzat:

$ mkdir etzi-bot 

Proiektua jarriko dugun fitxategira sartu:

$ cd etzi-bot 

Npm instalatu eta proiektua hasieratu:

$ sudo apt-get install npm
$ npm init 

Exekutatzeko behar ditugun dependentziak instalatu:

$ npm install --save express axios body-parser 
  1. express gure aplikazio zerbitzaria.
  2. axios http bezero bat da.
  3. body-parser eskari bakoitzean jasotako erantzuna eraldatzen lagunduko digu.
$ sudo nano index.js

index.js dokumentuan hau sartuko dugu:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
const axios = require('axios')

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({
   extended: true
})); // for parsing application/x-www-form-urlencoded

//This is the route the API will call
app.post('/new-message', function(req, res) {
   const {message} = req.body

   if (!message) { // Mezurik ez badago, bukatu.
      return res.end()
   }

   // kaixo jasotzen badu Ph´nglui mglw´nafh Cthulhu R´lyeh wgah´nagl fhtagn erantzungo du
   if (message.text.toLowerCase().indexOf('kaixo') &gt;=0) {

   axios.post('https://api.telegram.org/bot&lt;zure_api_tokena&gt;/sendMessage', {
      chat_id: message.chat.id,
      text: 'Ph\´nglui mglw\´nafh Cthulhu R\´lyeh wgah\´nagl fhtagn'
   }).then(response =&gt; {
      // Mezua ondo bidali da
      console.log('Mezua bidalia')
      res.end('ok')
   }).catch(err =&gt; {
      // ...and here if it was not
      console.log('Error :', err)
      res.end('Error :' + err)
   })
   } // end if 
});

// Gure zerbitzaria martxan jarri
app.listen(3000, function() {
   console.log('Telegram bot-a 3000 portuan entzuten ari da!');
});

Zerbitzaria martxan jarri

Sortutako kodea nahi den zerbitzarian jar dezakegu martxan. Edonork zerbitzari propioa ez duenez now zerbitzua erabiliko dugu:

$ sudo npm install -g now

#packege.json sortu edo gainidatzi:

$ nano package.json

Gure package.json horrela geratuko da:

{
  "name": "etzi-bot",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;amp;&amp;amp;amp; exit 1",
    "start": "node index.js"
  },
  "author": "tolosa &lt;tolosa@talaios.net&gt; (https://etzi.pm)",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.16.1",
    "body-parser": "^1.17.1",
    "express": "^4.15.2"
  },
  "devDependencies": {},
  "description": ""
}

Hasierako script-a gehitu ondoren, exekutatu honako komandoa proiektua dagoen karpetan bertan:

$ now #zerbitzua zerbitzarian martxan jarriko du

Zerbitzua ondo jarri badu, martxan horrelako zerbait erantzungo du:

&gt; Deploying ~/etzi-bot
&gt; Using Node.js 6.2.1 (default)
&gt; Ready! https://etzi-bot-zzzzz.now.sh

Honenbestez, eman digun helbide horretan gure zerbitzua martxan edukiko dugu. Helbide hori hartu eta ondorengo aginduan sartuko dugu:

curl -F "url=https://etzi-bot-zzzzz.now.sh/new-message" https://api.telegram.org/bot&lt;zure_api_tokena&gt;/setWebhook

Erantzuna hau izango da:

{"ok":true,"result":true,"description":"Webhook was set"}

Dena ondo egin badugu gure Bot-a martxan edukiko dugu: @EtziBot

Iturria: http://www.sohamkamani.com/blog/2016/09/21/making-a-telegram-bot/

 

Zabaldu: