Bots e Telegram

Telegram è un servizio di messaggistica istantanea basato su cloud e senza fini di lucro sviluppato dalla società Telegram LLC.
Questo servizio può essere scaricato dagli utenti e installato sui propri dispositivi senza alcun costo perchè Telegram è distribuito come Software libero e può essere utilizzato su diverse piattaforme come smartphone,pc e tablet.
I messaggi inviati sono salvati sul cloud di Telegram, così da garantire la sincronizzazione istantanea. Il risultato consente all’utente di poter accedere ai messaggi da diversi dispositivi contemporaneamente.
Sono presenti diversi tipi di chat tra le quali chat di gruppo,canali,chat segrete e da giugno 2015 Telegram ha introdotto una piattaforma per permettere, a sviluppatori terzi, di creare i Bot. I Bot sono degli account Telegram, gestiti da un programma, che offrono molteplici funzionalità con risposte immediate e completamente automatizzate, quindi non sono altro che chat automatiche il cui scopo è quello di rispondere alle nostre domande, alle nostre richieste, farci divertire e facilitare operazioni.
Esistono infatti bot che, su nostra richiesta, possono inviarci determinate immagini, gif o bot che rintracciano un nostro pacco inviandoci notifiche ad ogni suo spostamento.

COME FUNZIONANO I BOT:

Il funzionamento del bot su Telegram si basa sull’interazione tra il bot e gli utenti che può avvenire in due modi distinti e alternativi:

1-Comandi inviati tramite i messaggi via chat. L’utente apre una chat con il bot oppure li aggiunge ai gruppi per inviargli i messaggi e i comandi al bot tramite i messaggi via chat. E’ una modalità utilizzata con i bot di chat per ricevere le notizie in automatico.

2-Comandi inviati tramite le richieste in linea. L’utente invia le richieste direttamente tramite il campo di input ( riga comandi ) del bot, digitando il nome del bot preceduto dal simbolo della chiocciola @ e una query ( richiesta in linea ). In risposta, il bot invia all’utente il contenuto tramite chat, gruppo o canale.

I messaggi, i comandi e le richieste in linea, quelle digitate o spedite dagli utenti, sono trasferite automaticamente da Telegram sul server dove si trova in esecuzione il software del bot.

COME CREARE UN BOT:

La creazione di un bot su Telegram è un’operazione abbastanza semplice. E’ sufficiente aprire un altro account dedicato al bot e ottenere una chiave HTTP API per comandare il bot a distanza tramite un’applicazione esterna. Si può aprire lo username del bot utilizzando il proprio account su Telegram. E’ sufficiente cercare @BotFather nel campo di ricerca dell’instant messenger e avviare l’applicazione ufficiale BotFather che, tra le varie operazioni, consente di creare un nuovo bot tramite il comando /newbot.

Telegram chiede di dare un nome e uno username al bot. Al termine della procedura di creazione pubblica una chiave HTTP API da usare per controllare il bot in remoto tramite un’applicazione esterna ( app, software, programma php sul web, ecc. ).

Infine, occorre sviluppare l’applicazione esterna per controllare il bot in remoto e dichiararla sulla piattaforma dell’instant messagging. E’ abbastanza semplice.

Nel progetto MYLEGALPLANTS è stato creato un bot per gestire i sensori e visualizzare lo stato della pianta. Di seguito si può osservare la parte relativa alla programmazione sviluppata con Arduino:


#include
#include 
#include   
#include 
#include "floatToString.h"

char ssid[] = "xxxxxxxxx"; // network SSID
char pass[] = "xxxxxxxxx"; // network password

// Initialize Telegram BOT
const char BotToken[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";



WiFiClient client;
WiFiSSLClient clientBot;
TelegramBot bot(BotToken, clientBot);

int status = WL_IDLE_STATUS;

// server address:
char server[] = "mylegalplants.it";


 
  // attempt to connect to Wifi network:  
  NetworkConnection();
  printWifiStatus();
  // Telegram connection
  bot.begin();

  // output
  pinMode(pinAttuatore_T, OUTPUT);
  pinMode(pinAttuatore_H, OUTPUT);
  pinMode(pinAttuatore_L, OUTPUT);
}



  // Gestione Telegram Bots 
  // ---------------------------------------
  message m = bot.getUpdates(); // Read new messages  
  if (m.text.equals("T")) {       // leggo T
    Serial.print("T = ");  
    Serial.println(t_value); 
    bot.sendMessage(m.chat_id, "T = "+t_string+"°C");  
  }  
  else if (m.text.equals("H")) {  // leggo H
    Serial.print("H = ");  
    Serial.println(h_value); 
    bot.sendMessage(m.chat_id, "H = "+h_string+"%");  
  }
  else if (m.text.equals("L")) {  // leggo L
    Serial.print("L = ");  
    Serial.println(l_value); 
    bot.sendMessage(m.chat_id, "L = "+l_string+"lux");  
  }
  else if (m.text.equals("Sensori")) {   // leggo tutti i sensori
    Serial.print("T = ");  
    Serial.println(t_value); 
    Serial.print("H = ");  
    Serial.println(h_value);
    Serial.print("L = ");  
    Serial.println(l_value);
    bot.sendMessage(m.chat_id, "T="+t_string+"°C - H="+h_string+"% - L="+l_string+"lux");  
  }
  else if (m.text.equals("Accendi riscaldatore")) {   // attivo riscaldatore
    httpRequestBotT(1);
    bot.sendMessage(m.chat_id, "Riscaldatore attivato");  
  }
  else if (m.text.equals("Spegni riscaldatore")) {   // disattivo riscaldatore
    httpRequestBotT(0);
    bot.sendMessage(m.chat_id, "Riscaldatore disattivato");  
  }
  else if (m.text.equals("Accendi irrigazione")) {   // attivo irrigazione
    httpRequestBotH(1);
    bot.sendMessage(m.chat_id, "Irrigazione attivata");  
  }
  else if (m.text.equals("Spegni irrigazione")) {   // disattivo irrigazione
    httpRequestBotH(0);
    bot.sendMessage(m.chat_id, "Irrigazione disattivata");  
  }
  else if (m.text.equals("Accendi luce")) {   // attivo illuminazione
    httpRequestBotL(1);
    bot.sendMessage(m.chat_id, "Illuminazione attivata");  
  }
  else if (m.text.equals("Spegni luce")) {   // disattivo illuminazione
    httpRequestBotL(0);
    bot.sendMessage(m.chat_id, "Illuminazione disattivata");  
  }
  else {
    Serial.println("no new message");
  }
 

void httpRequestBotH(int H) {
  // chiudiamo le precedenti connessioni e creiamo la nuova
  // liberando il socket nel WiFi
  client.stop();

  // se la connessione ha successo
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    client.print("GET /web_app/attiva_H.php?");
    client.print("H=");
    client.print(H);
    client.println(" HTTP/1.0");
    client.println("Host: mylegalplants.it");
    client.println("Connection: close");
    client.println();

    // memorizziamo il momento della connessione
    lastConnectionTime = millis();
  }
  else {
    // se la connessione fallisce
    Serial.println("connection failed");
    // ripetiamo l'accesso alla rete
    NetworkConnection();
  }
}
void httpRequestBotL(int L) {
  // chiudiamo le precedenti connessioni e creiamo la nuova
  // liberando il socket nel WiFi
  client.stop();

  // se la connessione ha successo
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    client.print("GET /web_app/attiva_L.php?");
    client.print("L=");
    client.print(L);
    client.println(" HTTP/1.0");
    client.println("Host: mylegalplants.it");
    client.println("Connection: close");
    client.println();

    // memorizziamo il momento della connessione
    lastConnectionTime = millis();
  }