Lanciare un’azione IFTTT con un bot di Telegram #nodejs

Mattia Accornero
4 min readJun 5, 2016

--

Nell’ultimo periodo si sente spesso parlare di bot, ma cosa sono realmente?

Su Wikipedia troviamo questa definizione:

Il bot (abbreviazione di robot) in terminologia informatica in generale è un programma che accede alla rete attraverso lo stesso tipo di canali utilizzati dagli utenti umani (per esempio che accede alle pagine Web, invia messaggi in una chat, si muove nei videogiochi, e così via).

Ed in effetti sono robot software, per cui nessun droide che parla o si muove con sembianze umane, ma più o meno semplici intelligenze artificiali in grado di comunicare con l’uomo.

Negli ultimi giorni ho deciso di provare a crearne uno, partendo da una necessità precisa: accendere la luce senza utilizzare l’app dedicata, ma chiedendolo ad un bot di Telegram.

In stanza ho da qualche tempo installato delle lampadine Lifx. Bellissime e comodissime, ma purtroppo non hanno un client per Mac, per cui mi son detto, perché non creare un bot Telegram per comandarle?

Di seguito vi illustro come fare.

Ingredienti

  • Un account Telegram (con relativo client installato)
  • Un account IFTTT
  • Una o più lampadine Lifx (o qualsiasi altra cosa comandabile via IFTTT)
  • Conoscenze di programmazione

Telegram

Iniziando da Telegram, aggiungiamo ai nostri contatti BotFather e seguiamo le sue istruzioni per creare il nostro bot.

Scriveremo il comando /newbot, che ci permetterà di definire il nome del bot (che deve per forza finire con “bot”), e di conseguenza ci verrà fornita una chiave (token) attraverso la quale potremo connetterci alle API e ricevere i messaggi del bot, ma questo lo vediamo più avanti.

Una volta creato il bot e salvata la chiave, potremo creare i primi comandi attraverso /setcommands. Dovremo fornire una lista di comandi [comando — descrizione] come questa:

accendi_luce_finestra - Accende la luce vicino alla finestra
spegni_luce_finestra - Spegne la luce vicino alla finestra
accendi_tutto - Accende tutte le luci
spegni_tutto - Spegne tutte le luci

In questo modo, avremo a disposizione i comandi necessari per accendere e spegnere le nostre luci.

A questo punto il nostro bot è creato e lato Telegram è tutto pronto.
(BONUS) Se proprio vogliamo, possiamo anche fornire un’immagine al bot con il comando /setuserpic, ma non è ovviamente necessario per il corretto funzionamento.

LIFX

Per quanto riguarda le lampadine LIFX non c’è molto da dire, basta inserirle nelle lampade, scaricare l’app dedicata, seguire la procedura per la prima configurazione e verificare che si accendano e si spengano correttamente via app.

IFTTT

Per chi non lo conoscesse, IFTTT (acronimo di if this than that) è un sito che permette di collegare quei prodotti che sono sempre connessi a internet e che ricevono comandi via app o web (e cioè l’hardware IoT — Internet of things).

Ovviamente per poter far parlare IFTTT con le nostre lampadine LIFX è necessario che le due cose siano collegate. Per fare questo ci basterà andare sul canale dedicato ed eseguire la semplice procedura di connessione.
(BONUS) Se non vogliamo collegare le LIFX, ma altri dispositivi, potremo cercare il canale alla pagina https://ifttt.com/channels.

A questo punto abbiamo collegato IFTTT con le nostre lampadine e potremo quindi andare a creare gli eventi che saranno associati ai comandi che abbiamo scelto sopra e comunicato al bot di Telegram.

Prima di creare gli eventi, dobbiamo però informare IFTTT che il nostro account deve essere in grado di ricevere richieste proprietarie e per fare questo abbiamo bisogno una chiave (“key”) di IFTTT Maker che possiamo generare qui.

Ora che abbiamo anche questa chiave, possiamo andare alla pagina di creazione ricetta e scegliere “this”, cercare il canale “maker”, scegliere “Receive a web request” ed impostare come Event name il primo comando che abbiamo definito sopra “accendi_luce_finestra”. (Attenzione che anche se in Telegram il comando verrà avviato con /accendi_luce_finestra, noi non andremo ad inserire la “/”).

Una volta scelto “Create Trigger”, potremo impostare il “that”, scegliendo il canale LIFX (o comunque quello legato al nostro hardware IoT). Si aprirà quindi il dettaglio di tutte le azioni disponibili per le nostre LIFX, da Accendi luci o Spegni luci, fino al cambio colore o al lampeggiamento.

Per il nostro esempio, scegliamo l’azione di “Turn lights on” e dai menu a tendina successivi scegliamo la lampadina di riferimento, la durata dell’accensione, il colore e la luminosità e scegliamo “Create Action”.

Scrivendo infine il titolo della “ricetta” o lasciando quello di default, potremo quindi premere “Create Recipe”.

Abbiamo quindi creato la parte di evento che verrà scatenata dal nostro bot. Facile no?
Fino a qui in effetti, è molto semplice. E infatti ora viene la parte un po’ più complicata.

Server NodeJS

Per permettere al nostro bot Telegram di eseguire l’evento che abbiamo creato su IFTTT, dobbiamo creare uno script che stia su un server, che riceva i comandi da Telegram e che li inoltri a IFTTT. Questo si può scrivere in molti linguaggi, come PHP, Ruby, ecc.. Io personalmente ho usato NodeJS, in quanto lo trovo molto piacevole e anche piuttosto veloce.

Visto che mi piace programmare, ma non mi interessa reinventare la ruota, ho utilizzato alcune librerie già pronte e ho poi messo a disposizione il codice che ho scritto su GitHub. Per cui vi basterà scaricare il codice da GitHub, configurarlo e metterlo su un server in grado di eseguire un’app NodeJS.

Prossimamente pubblicherò alcuni articoli su come deployare un’app NodeJS sui server più famosi.

Note finali

Se non avete idea di che server utilizzare, posso consigliare Heroku o OpenShift by RedHat che hanno piani gratuiti ottimi per test o piccoli esperimenti.
Personalmente ho caricato il bot sul mio VPS Dreamhost che permette l’utilizzo di NodeJS via Phusion Passenger, se non usate Passenger, potete tranquillamente evitare di caricare il file .htaccess e la cartella /tmp.

Originally published at Mattia Accornero.

--

--

Mattia Accornero

Co-Founder @AlwaysBeta. Dreaming of user-friendly digital products. Let's make tech less crazy! 🚀