Telegram Bot in Ruby con telegramAPI

Poco tempo fa avevamo parlato dell’aggiornamento 3.0 delle apps di Telegram, portando come maggior novità le API per i Telegram Bot. Queste, seppur semplicissime, sono però pur sempre API esterne ad ogni linguaggio. Mi spiego meglio: ci si può accedere tramite url https, ma non tramite un metodo/oggetto di un linguaggio.

Il sottoscritto ha quindi deciso di scrivere una vera e propria mini-libreria per le API nel linguaggio più semplice (a parer mio), ossia in Ruby, con tutti i metodi e tutti gli oggetti illustrati nella pagina ufficiale di Telegram.

Nella pagina di Github potete trovare le spiegazioni per l’installazione, l’uso, la documentazione ed alcuni esempi pratici.

Prima di tutto installiamo la libreria con:


sudo gem install telegramAPI

Bene, ora possiamo includere telegramAPI nel nostro bot e giocarci!

Come su github, riporto l’esempio di un Echo Bot, ossia di un Bot che non fa altro che risponderci ciò che gli scriviamo.


require 'telegramAPI'
token = "******"
api = TelegramAPI.new token
while true do
 # Get last messages if there are, or wait 180 seconds for new messages
 u = api.getUpdates({"timeout"=>180})
 u.each do |m|
 api.sendMessage(m['message']['chat']['id'], m['message']['text'])
 end
end

Il token è una stringa di caratteri che ci verrà comunicata dal @BotFather come spiegato nel precedente articolo.

Potete testare il bot parlando con @insidevcode_bot.

Ecco il risultato:

sn3

Come vedete, in meno di dieci righe abbiamo scritto il nostro primo bot!

Per ulteriori esempi e per la documentazione vi lascio la pagina di Github.

Seguiteci anche su Facebook, Google Plus, Tumblr e Twitter, per restare sempre in contatto con noi e con le nostre guide.



18 risposte a “Telegram Bot in Ruby con telegramAPI”

  1. florin88 ha detto:

    ragazzo complimenti per la guida… adesso vedrai che bel Bot per InsiDevCode che realizzeremo 😉 😀

  2. Fabryz ha detto:

    ciao, scusa la domanda nabba..ma fisicamente il codice dove bisogna farlo risiedere? occorre un web hosting dove deve stare? per farlo andare h24 naturalmente intendo

    • BenedettoNespoli ha detto:

      Guarda, se hai un server casalingo e nessuna pretesa puoi farlo girare lì 24/7, altrimenti devi utilizzare siti di hosting (anche free) come openshift o heroku, o anche servizi più semplici ma che ti permettano di utilizzare ruby e queste api, oppure altre api per altri linguaggi.

      Personalmente ho sperimentato heroku con un bot in nodejs, e openshift con un bot in ruby, e a parer mio sono entrambi buoni servizi, ognuno con le sue restrizioni da account free, ma ottimi per gli hobbisti.

  3. Andrea D'Ippolito ha detto:

    Ciao, bellissimo tutorial, semplicissimo ed efficace. 2 domande:
    1. per metterlo su heroku basta configurare un procfile e parte da solo giusto?
    2. è possibile far rispondere il bot anche senza citarle, parlo di un gruppo ovviamente.
    Grazie!

    • BenedettoNespoli ha detto:

      Ciao, grazie per i complimenti!
      Allora:
      1. Esatto, ma già i tutorial di heroku dovrebbero essere esaurienti, è molto guidato come sistema.
      2. Quando dici ” far rispondere ad un bot senza citarle”, senza citare cosa?

      • Andrea D'Ippolito ha detto:

        Ciao Benedetto,
        intendevo che in una chat di gruppo in cui c’è anche il bot, per farlo rispondere bisogna citarlo del tipo: “Ciao @nomeBot” altrimenti non intercetta i messaggi.
        Grazie

        • BenedettoNespoli ha detto:

          Ah capisco!
          Di default un bot risponde solo se si esegue un comando che inizia per “/” oppure se lo citi, come dici tu, oppure in altri rari casi.
          Questo è fatto per questioni di sicurezza, perché in questo modo il bot non legge la chat di gruppo.
          Per fare in modo invece che i bot possano leggere i messaggi, basta disabilitare la privacy mode.
          Vai sul BotFather, e usi il comando “/setprivacy” o un comando simile.
          Più info qui: https://core.telegram.org/bots#privacy-mode

          • Andrea D'Ippolito ha detto:

            Grazie Benedetto! Funziona alla grande! (invece ho ancora qualche problema con heroku, cosa c’è di sbagliato in questo Procfile ? “web: bundle exec ruby lib/test.rb” forse non deve essere web: il type? quale hai usato? Grazie, giuro che è l’ultima domanda 😀

          • BenedettoNespoli ha detto:

            Esattamente, se intendi far andare un’applicazione non web, come un bot, il type corretto è worker. Attenzione che dovrai farlo partire manualmente, come viene detto qui: https://devcenter.heroku.com/articles/procfile

            Esempio:
            worker: ruby lib/test.rb

            Comando per farlo partire:
            heroku ps:scale worker=1

            NB: Heroku, come spiegato su insidevcode in un articolo recente, ha il limite di 18 ore giornaliere di lavoro, e le altre 6 di sleeping. Se ne vuoi sapere di più, consulta uno degli ultimi articoli sul nostro sito 😉

          • Andrea D'Ippolito ha detto:

            M I T O ! Grazie 😉

  4. Simone Berchielli ha detto:

    Grazie per la guida, preziosissima! Attualmente il mio bot risiede su un Raspberry Pi e funziona egregiamente. A breve gli implementerò il controllo delle GPIO.

  5. Simone Berchielli ha detto:

    Buongiorno, rinnovo i ringraziamenti per l’ API. Avrei bisogno di aiuto: come è possibile far ritornare lo slash dopo che ho inviato una custom keyboard? Mi rimane l’ icona della della keyboard anche dopo aver inviato una risposta. Devo inviare un comando per nasconderla?

  6. Simone Berchielli ha detto:

    Buongiorno, rinnovo i ringraziamenti per l’ API. Avrei bisogno di aiuto: come è possibile far ritornare lo slash dopo che ho inviato una custom keyboard? Mi rimane l’ icona della della keyboard anche dopo aver inviato una risposta. Devo inviare un comando per nasconderla?
    PS: Ho cancellato il mio precedente post perché le immagini allegate erano enormi

    • BenedettoNespoli ha detto:

      Questa risorsa è molto utile: https://github.com/bennesp/telegramAPI#send-custom-keyboards

      In pratica quando vuoi far scomparire la tastiera personalizzata, invii un normale messaggio, mettendo come markup={“hide_keyboard”=>true}
      Nel link c’è proprio l’esempio, con tutte le opzioni di tastiera che è possibile inviare.

      • Simone Berchielli ha detto:

        Ti ringrazio per la pronta risposta che mi ha fatto risolvere il problema. Il bello è che avevo letto la documentazione ma evidentemente non avevo capito. Semplicemente pretendevo di inviare tutte le opzioni nel markup e quindi l’ “hide_keyboard”, tolto dal commento, non veniva eseguito. Quindi come mi hai suggerito ho creato un markup apposito per chiudere le keyboard: hide_kbd = {“hide_keyboard”=>true}. Thanks!

  7. Mr Hawk ha detto:

    Ciao e complimenti per il tutorial!
    Avrei una domanda un po nabba, come faccio a far in modo che se io scrivo “ciao” lui mi dia una risposta personalizzata?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Cerca

Seguici

Live da Facebook
Live da Twitter
Seguici su Telegram
Canale InsiDevCode Telegram