Telegram Bot

Recentemente Telegram ha messo ha disposizione delle API per poter creare dei Bot. In questo contesto un bot è un programma che si collega in chat come se fosse una persona, e con il quale quindi potrete "chattare".
Cosa far fare al bot lo dovete decidere voi, qui faremo un bot che faccia da "echo", cioè si limiterà a rispondere con la stessa frase che noi gli scriviamo; quindi se gli diciamo "ciao" lui risponde "ciao", etc. Questo bot, inutile di per se, ci permette di capire come utlizzare le api ed impostare un bot di base scritto in PHP.

Potete consultare la documentazione ufficiale qui:

(1) REGISTRARE IL BOT

Prima di cominciare dobbiamo accedere a Telegram e registrare il nuovo bot. Per fare questa operazione è necessario chattare con il bot ufficiale @botfather e digitare i seguenti comandi:

/start
/newbot

dopo avervi chiesto il nome del bot il botfather vi darà un "token" che sarà necessario per autenticare il bot sui sistemi di Telegram (il token è una stringa come "110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw", immaginate che sia una sorta di password del bot)

(2) CENNI SULLE API

Ecco in linea generale come imposteremo il codice: c'è un thread che chiama continuamente il metodo getUpdates di Telegram; questa chiamata torna un elenco di "aggiornamenti", dove per aggiornamento intendiamo una qualunque novità che ci interessi (es qualcuno ha scritto al bot, gli ha inviato un file, etc). Poi processiamo ogni aggiornamento ricevuto semplicemente riscrivendo in chat lo stesso messaggio che abbiamo ricevuto (cioè gli facciamo fare l'eco). I messaggi vengono inviati tramite il metodo sendMessage

(3) ECCO LO SCHELETRO DEL BOT! (bot.php)

<?php

// Al posto di questo token inserite quello che vi è stato fornito da @botfather
$token = "110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw";
$url = "https://api.telegram.org/bot$token";
 
/* Funzione generica per chiamare un metodo telegram */
function telegram($method) {
global $token;
global $url;
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "$url/$method"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch);
return json_decode($output);
}
 
/* Funzione per avere gli aggiornamenti da Telegram */
function getUpdates($offset=NULL) {
 if($offset==null) {
return telegram('getUpdates');
 }
 else {
return telegram("getUpdates?offset=$offset&timeout=1");
 }
}
 
/* Invia un messaggio ad utente od un gruppo */
function sendMessage($to, $text) {
return telegram("sendMessage?chat_id=$to&text=$text"); 
}
 
$offset = null;
while(true) {
// la prima volta offset=null quindi chiedo tutti gli ultimi aggiornamenti
$response = getUpdates($offset);
if($response->ok==true) // Se risposta positiva
foreach($response->result as $r) { // Per ogni aggiornamento
$updateId = $r->update_id;
$offset = $updateId+1; // segno il prossimo id aggiornamento
// QUI POTRESTE METTERE TUTTO QUELLO CHE VOLETE
// PER FAR FARE AL VOSTO BOT CIO' PER CUI LO STATE
// PROGRAMMANDO.
// IN QUESTO CASO CI LIMITIAMO A FARGLI FARE "IL PAPPAGALLO"
// CIOE' RIPETERA' QUALUNQUE COSA GLI SCRIVIATE
if(property_exists($r, 'message')) { // se l'aggiornamento e' relativo ad un messaggio
// questo è il messaggio che è stato scritto in chat al bot
$m = $r->message; 
// questo è l'id della chat
$to = $m->chat->id
// scrivo in chat lo stesso messaggio che mi hanno inviato (ECHO)
sendMessage($to, $m->text);
}
}
}
 
(4) ESECUZIONE
Attenzione che anche se quello che abbiamo scritto è codice PHP esso non è una pagina web, ma uno script da eseguire a linea di comando:
php bot.php
finchè lo script sarà in esecuzione il bot vi risponderà. Se terminate lo script invece non ci sarà nessuno a processare gli aggiornamenti.
 
(5) CI VUOLE FANTASIA
Ovviamente di un bot pappagallo non se ne fa niente nessuno, metteteci un po' di fantasia e potrete sviluppare bot con una qualche capacità pratica oppure di intrattenimento!!