Telegram 3.0: Creare un Bot

Da poco tempo le app di Telegram si sono aggiornate alla versione 3.0, introducendo, tra le tante novità, delle vere e proprie API per i Bot, facilitandone la creazione. Vediamo come funzionano e come poterne creare uno nostro!

Telegram

Prima…

Non che prima non ci fossero, ma se qualche disgraziato (come me), ha provato a scrivere Bot telegram prima di quest’aggiornamento, sa bene cosa intendo. Bisognava trovare o scrivere librerie per il protocollo MTProto di telegram, per la tecnologia a layer TL-schema ed il suo relativo linguaggio TL, finendo con il programmare in esadecimale. Senza contare che prima serviva un numero di telefono vero e proprio! Insomma chi più ne ha, più ne metta.

…Ora

Ma grazie a questo update, la parte programmativa dei nostri Bot sarà la cosa più semplice del mondo, lasciando che sia il lato creativo quello più importante. Infatti ogni richiesta del singolo bot, si dovrà trasformare in una banalissima richiesta GET o POST, con i risultati in JSON.

In più non sarà più necessario il numero di telefono per i bot, e questi avranno delle limitazioni, come avere sempre lo stato “Bot” invece di “online” o “last seen:..”, ma anche delle comodità. Una delle tante è le tastiere personalizzate. Potremo infatti decidere di avere una tastiera composta da 5 tasti con le relative stelline, per esempio per una votazione da 1 a 5, o solo alcune lettere come ABCD per una risposta ad un quiz ad esempio.

Ma entriamo nel vivo, e vediamo ora come creare un Bot.

Gli argomenti che tratterò in quest’articolo sono tratti dalla pagina dedicata alle API di Telegram.

Creazione

Ironia della sorte, per creare un Bot, bisogna scrivere ad un Bot, chiamato @BotFather.

Telegram BotFather - Comandi

Telegram BotFather – Comandi

Non appena inizierà la chat, questo ci avviserà dei comandi utilizzabili.

Il primo comando è proprio ciò che ci serve: /newbot.

Dando questo comando @BotFather ci chiederà dapprima il nome del nostro Bot, e poi l’username con cui potremo farlo aggiungere a chi vogliamo (il nome dopo la @, per intenderci).

Quest’ultimo dovrà necessariamente terminare con “Bot”. Nomi validi quindi sono ilmiobot, superbot, ecc…, sempre che non siano già stati scelti da altri utenti.

Una volta finita la creazione del Bot, @BotFather ci risponderà così:

Telegram BotFather - Token

Telegram BotFather – Token

L’informazione più importante è ovviamente il token, una stringa lunga 45 caratteri, che avrà la funzionalità di una coppia “utente-password“. Con questa comunicheremo con il serverpiù avanti.

Se vogliamo poi modificare il titolo del Bot (/setdescription), l’username (/setname) o altri parametri potremo farlo, ma dal momento che ritengo ciò piuttosto semplice una volta capito come funziona @BotFather, salterò questi argomenti, a favore delle famigerate…

… Richieste GET!

Finalmente passiamo al dialogo bot-server. Ogni richiesta che faremo, sarà fatta a:

https://api.telegram.org/botTOKEN/<metodo>

Dove al posto di <token> dovremo sostituire il token datoci da @BotFather, e al posto di <metodo> la specifica richiesta che vogliamo fare. Per fare un test di funzionamento possiamo usare la funzione getMe:

https://api.telegram.org/botTOKEN/getMe

Che ritorna le informazioni sul Bot, quali id, first_name, last_name e username.

Se il test è andato a buon fine, possiamo procedere. La prima cosa che normalmente si vuole fare, è richiedere i messaggi ricevuti dal Bot, per poi magari elaborarli e dare una risposta. Abbiamo due metodi per far ciò, dove però uno esclude l’altro: getUpdates e setWebhook.

getUpdates

Ecco la semplice richiesta GET:

https://api.telegram.org/botTOKEN/getUpdates

Eventuali parametri da passare a questa richiesta sono offset, limit, e timeout. Ad esempio questa richiesta chiede tutti gli update più recenti di quello numero 914544921, al massimo 10 update, e, se non sono presenti, aspettane fino a 30 secondi:

https://api.telegram.org/botTOKEN/getUpdates?offset=914544922&limit=10&timeout=30

Notare come, per dire “più recenti di quello numero 914544921”, occorra inserire come parametro offset lo stesso numero+1. Da dove salta fuori questo numero? Se provate a richiedere getUpdates senza parametri, vedrete tutti gli ultimi messaggi ricevuti; ecco, quel numero è il valore del parametro update_id del messaggio.

setWebhook

Un secondo metodo, non per neofiti, per ricevere messaggi è setWebhook. Passando come parametro url un indirizzo, appena il Bot riceverà un messaggio, verrà inviata una richiesta HTTPS POST a quell’url, con i dati formattati in JSON.

Questo metodo, se usato, impedisce di ricevere i messaggi con getUpdates, non supporta connessioni http ma solo https, e non supporta certificati auto-firmati.

sendMessage

Una volta preso il messaggio e dopo averlo elaborato, occorre mandare una risposta!

Il metodo sendMessage fa al caso nostro. I parametri obbligatori sono l’id della chat (utente o gruppo che sia) e il testo del messaggio, rispettivamente chat_id e text.

Il parametro chat_id potrete ottenerlo da un messaggio ricevuto, ad esempio con getUpdates. Una volta ottenuto il messaggio, questo parametro si trova sotto message->chat->id.

E Tanto Altro con Telegram!

Questa è la logica del nuovo funzionamento per i Bot, come avete visto è molto semplice.

Tanti altri metodi, che ora non abbiamo trattato, come sendPhoto, sendAudio, sendLocation ecc.. vi aspettano documentati sulla pagina delle API di Telegram.

Nel prossimo articolo vedremo le richieste GET in pratica, in un linguaggio come il Ruby.

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

Appassionato fin da piccolo al mondo telematico, segue la sua passione studiando Ingegneria Informatica presso il Politecnico di Milano. Predilige linguaggi lato client come C, Java, Ruby e Python, ma ha conoscenze anche nel web con PHP, SQL, Javascript, HTML e CSS. Preferisce lavorare approfonditamente ai cuori dei programmi, tralasciando la grafica come parte finale ‘opzionale’.



  • Samuel Bruno

    Ciao, non ho ben capito come mandare un messaggio, e soprattutto vorrei capire come implementare il codice ai comandi come /command ad esempio.
    Grazie in anticipo

    • BenedettoNespoli

      Scusami per il ritardo della risposta, tempo di vacanza 😉
      Comunque se vuoi approfondire nella pratica come mandare un messaggio, puoi cliccare sul link a fine articolo, che manda ad una sorta di guida più pratica e meno teorica nel linguaggio ruby.
      Per quanto riguarda i comandi come /command, basta che il bot, una volta ricevuti i messaggi con getUpdates ad esempio, controlli il testo. Qualcosa come:
      if t==”/comando” then

      else

  • Bistecca

    ciao potresti fare un video tutorial?

  • Alessandro “Brio94” Orsini

    Quando provo ad andare sul link tramite il token e il comando, mi rimanda sulla pagina “https://core.telegram.org/bots”

    Come posso risolvere? Grazie mille.

    • acerbisgianluca

      Anche a me accadeva perchè non rimuovevo le all’inizio e alla fine del token, invece dovevo fare bottoken senza virgolette.

      • Alessandro “Brio94” Orsini

        Grazie, provo subito!

  • Mario Barretta

    Bella guida, avevo letto anche della possibilità di far reperire al bot dei feed rss da postare poi in automatico su un proprio canale ma non trovo più la guida.
    Riesci a darmi qualche aiuto ?
    grazie

    • BenedettoNespoli

      Gli utilizzi di un bot di telegram sono infiniti, tra cui, come dici tu, quello di sfruttarlo assieme ai feed rss per dare aggiornamenti su un canale.

      Guide specifiche, anche se esistessero, non possono essere esaustive, ma, come ho detto ad Alessandro, se sai programmare allora tutto sarà semplice, basteranno delle API per il linguaggio che usi. Per il linguaggio ruby qui puoi trovare qualche aiuto: http://www.insidevcode.eu/index.php/2015/07/05/telegram-bot-in-ruby-con-telegramapi/

      Se non sai programmare, prova ad usare servizi di generazione automatica dei bot, come paquebot o zapier

      • Mario Barretta

        Avevo trovato una guida molto chiara ma l’ho perso ( ricordo solo che faceva uso anche di IFTT )

        Purtroppo non so programmare altrimenti credo che avrei trovato una soluzione al mio “problema” e per questo cerco aiuto nei più esperti come voi.

        Ora provo paquebot che sembra fare qualcosa in più.

        Grazie

    • C’è un sito, https://www.allaroundsiena.com, che fa proprio questo.

      • Mario Barretta

        a me pare che si tratti di SPAM e basta ( spero di sbagliarmi ovviamente )

        • Il nome trae in inganno. Vada a vedere il sito.

          • Mario Barretta

            è proprio perchè ho guardato il sito che lo definisco SPAM.

            Se al suo interno vi è qualcosa di valido sarebbe utile postarlo e non redirigere alla home page di un sito che non ha come unico oggetto la costruzione di bot per telegram

          • considerando che uso questo servizio, non capisco la sua polemica. Nella home page è ben descritto lo scopo del sito ed il servizio offerto. Mi pare che fosse lei a cercare “della possibilità di far reperire al bot dei feed rss da postare poi in automatico su un proprio canale”, o sbaglio ?

          • Mario Barretta

            giusto ma dalla descrizione in home page non lo si evince :

            Benvenuto !

            AllAround è uno strumento innovativo per coinvolgere i tuoi utenti ed accrescere l’audience del tuo sito usando i canali Telegram. Scarica ed installa il nostro plugin di WordPress, ottieni la tua chiave Api e inizia a coinvolgere tutti i tuoi amici e followers in tutto il mondo !

            “Forse” proverò a guardare il plug in che “propongono” ( https://wordpress.org/plugins/wp-allaround/ ) ma con estrema diffidenza e poco gradimento dato che quando si promuove un proprio prodotto sarebbe onesto sia eticamente che moralmente palesarlo sin dal principio invece di fingere di star aiutando un utente spammando il proprio link ed autopromuovendo un prodotto che non ha nessun recensione e che quindi, sulla carta, vale zero.

            Probabilmente presentandosi subito come il creatore del plug in e richiedendo supporto ed aiuto per provarlo usarlo e rilanciare dei feedback avrebbe riscosso un differente benvenuto rispetto allo spam che ha pubblicato

          • Beh, si. Sono l’ideatore e lo sviluppatore sia del sito che del plugin. E se lo avessi detto subito, sarei stato probabilmente bollato come quello che voleva farsi pubblicità. In realtà, non essendo uno strumento di lucro, ho preferito essere modesto.

          • Mario Barretta

            La “scusa” del modesto purtroppo non regge così come il non lucro che tutti sanno bene esistete nelle più disparate forme.

            Non è necessario vendere il plug in o per “lucrare” sull’attività di promozione delle proprie pagine dato che “ci si guadagna” in molti altri modi.

            Se vorrà far provare e conoscere il suo plug in questo è proprio il metodo più sbagliato che si possa scegliere di adottare.

            Spero le sia di suggerimento per il prosieguo della sua attività lavorativa sia che si tratti di sviluppo che di promozione.

          • Ottima risposta… Anche se non ci conosciamo e se sei un nostro lettore, hai dato delle grandissime risposte, nonché giustissime.

          • Mario Barretta

            grazie mlle 🙂

            Non è mai troppo tardi per “conoscersi” e poi sul web basta leggersi ogni tanto e si può dire, in un certo senso, di “conoscersi” 🙂

          • ben detto @twittoeritwitto:disqus
            Comunque compila il form qui http://www.insidevcode.eu/contattaci/, dove alla voce >>> Tipo di richiesta >>> metti Voglio l’e-book
            Così riceverai l’e-book dedicato a Telegram, che io e @BenedettoNespoli:disqus stiamo realizzando, ma che soprattutto lanceremo dopo il 10 Novembre sul mercato…

      • @zerozone:disqus effettivamente @twittoeritwitto:disqus ha ragione… guarda caso, hai di nuovo lo stesso identico messaggio di due mesi fa (http://www.insidevcode.eu/2015/06/27/telegram-3-0-bot/#comment-2966089127)
        Non lo trovo giusto che nel nome del servizio gratuito e il non scopo di lucro tu vada a commentare così in giro sotto i post e i blog delle altre persone…

        direi che sarebbe molto più rispettoso e onesto contribuire alla discussione con commenti che completano ed offrono dettagli utili e non link che riportano a progetti personali…

        Sai Michele pensaci bene a questa frase detta da Mario:
        “Se al suo interno vi è qualcosa di valido sarebbe utile postarlo e non redirigere alla home page di un sito che non ha come unico oggetto la costruzione di bot per telegram”
        Perché lui è la voce degli utenti che cercano risorse e soluzioni, se tu metti un semplice link a un tuo sito che non porta a nulla di consistente, non solo fai incazzare la gente, ma perdi molto pubblico…
        dovresti farti un giro in tutto il sito InsiDevCode, per capire che cosa significa dare risorse alle persone…

        Concludo la mia risposta, citando Mario, che tra le altre cose ringrazio per quanto detto fino adesso:
        “Se vorrà far provare e conoscere il suo plug in questo è proprio il metodo più sbagliato che si possa scegliere di adottare”

        PS: abbiamo attivato il nofollow noindex sui link nei commenti, quindi ai fini di ritorno SEO è pari e uguali a zero…

        • Scusatemi per l’intrusione. E certo il link non era per ottenere vantaggi in termini di SEO, sia chiaro. L’intenzione era quella di rispondere alla necessità palesata da Mario Barretta, non certo di scatenare una discussione di questo tipo. Saluti.

          • Mario Barretta

            anche questa è una scusante nota… se mi volevi rispondere spiegavi come raggiungere il risultato e fare copia incolla del TUO link

          • Ok. Come ben sai per pubblicare automaticamente su canali/gruppi di Telegram è necessario un BOT di collegamento, ospitato su una piattaforma con SSL, che invia i contenuti.

            In molti non hanno la possibilità o le conoscenze per scriversi un BOT con queste caratteristiche, pertanto ho sviluppato un sistema automatico -AllAroundSiena- che collega una sorgente (Blog di WordPress attraverso il plugin oppure feed RSS con harvest periodico) con uno o più canali di Telegram.

            Ovviamente per poter far funzionare il sistema, l’utente deve inserire il token di accesso del proprio BOT sul proprio account di AllAroundSiena, che sarà utilizzato per pubblicare i contenuti nei canali indicati.

            In pratica, per riassumere, il flusso è il seguente:

            [sorgente] –> [server di allaround] –> [telegram]

            Spero di essere stato più chiaro. In ogni caso, a disposizione per ulteriori chiarimenti.

          • Mario Barretta

            ohh così si che “mi piace” e, se hai notato, ti permette di :

            – arricchire il sito su cui sei ospite
            – far conoscere il tuo dichiarato servizio senza che sia percepito come becero spam
            – essere UTILE a tutti i lettori del sito

            Quindi per poter fruire del tuo plug in dovrei :

            – avere un blog su wordpress ( può anche essere su wordpress in secondo livello oppure è necessario che wordpress sia installato su un dominio di primo livello? )
            – creare un bot ( come e con che cosa consigli? )
            – scaricare il tuo plug in ed installarlo nel mio cms

            sorgono quindi le prima domande come :

            – Come gestisci i dati che transiteranno sul tuo server attraverso il tuo plug in?
            – Che livelli di sicurezza sono applicati ai server?
            – Archiviano storico e logo dei contenuti pubblicati? ( se si dove e per quanto?

            Grazie a te

          • Per poter usufruire del servizio è sufficiente avere un feed RSS con i contenuti da rimbalzare sul canale Telegram. Il plugin per WP è solamente un comodo ausilio che semplifica un paio di passaggi e poco più.

            E’ comunque necessario creare un BOT attraverso le già note procedure descritte con BotFather, prendendo nota del token di accesso che deve essere inserito su AllAroundSiena.

            Il server è ospitato su piattaforma LAMP con certificato SSL. Sviluppato in PHP da zero, la creazione di un account non richiede particolari credenziali o l’inserimento di “dati sensibili”. Si può anche usare il single sign-on di Facebook.

            Per i dati, trattasi di qualcosa di esposto già in pubblico (come un feed RSS) o di un riassunto del post pubblicato nel blog (il plugin invia solo l’excerpt del post, il link all’immagine di copertina, se presente, ed altri metadati come i tag e l’autore). I tag, se presenti, vengono memorizzati per poter essere usati -in un futuro- per fare ricerche da parte dell’utente (una specie di metamotore di ricerca).

            Nell’interfaccia di gestione di ogni utente sono disponibili ulteriori informazioni, come il numero di click al link dell’articolo completo, statistiche e grafici (in via di completamento) ed il controllo delle code. I post, infatti, non vengono pubblicati tutti subito ma ho applicato un sistema cadenzato gestibile direttamente dall’utente (post ogni 30 minuti, ogni ora, ogni 2 ore…).

          • Mario Barretta

            Perfetto, grazie mille..

            Non credi che ORA questo contributo sia molto più utile a TUTTI e che anche se hai promosso il tuo plug in nessuno potrà mai sognarsi di criticare il tuo contributo?

            Grazie di nuovo ( mi sa che ci proverò a breve )

          • @zerozone:disqus se volevi dare un contributo utile, potevi fare così: http://www.insidevcode.eu/2015/06/27/telegram-3-0-bot/#comment-2966203520

        • Mario Barretta

          ” abbiamo attivato il nofollow noindex sui link nei commenti, quindi ai fini di ritorno SEO è pari e uguali a zero…”

          ottima mossa 🙂

          • è per evitare casi come questi che abbiamo adottato questa scelta… perché noi si attraverso i post offriamo un servizio gratuito, così come gli interventi in giro per l’Italia a volte sono gratuiti… ma è anche vero che dobbiamo mangiare pure noi no 😀

          • Mario Barretta

            ergo… il non scopo di lucro sono “solo” belle parole sul web dato che il lucro maggiore e più ovvio è la visibilità XD

  • Alessandro Memolla

    se fai un tutorial è meglio perche non capisco niente…..se no se mi mandi u link che io non ne trovo…….grazie mille

  • Anonimouser

    Qualcuno sa se c’è un modo di chiedere le coor4dinate GPS in modo automatico (senza l’intervento diretto dell’utente del BOT?)

    • Fortunatamente no, altrimenti ogni bot al mondo saprebbe dove siamo! 😀
      Perché un bot sappia le coordinate geografiche di un utente, quest’ultimo deve inviargliele con il classico “invia posizione”
      Ciao!

  • Anonimouser

    Grazie della risposta,
    comunque questo scelta non la condivido, potrebbero consentire l’autorizzazione permanente al singolo BOT (lasciando la libertà di negarla) e comunque inviando le coordinate solo se il bot in questione ha una sessione attiva. Poi chi nega tale autorizzazione (eventualmente mettendo un flag nelle impostazioni di telegram per negarla di default) continua a condividere la posizione a mano. Diventa più comodo per l’utilizzatore (che non deve continuamente condividere la posizione).

    • BenedettoNespoli

      Potrebbero, ma non lo fanno. I perche’ sono molteplici. Primo tra tutti: se vuoi qualcosa che continui ad ottenere la posizione dell’utente, fai una vera e propria app 😛

  • marioilgrande

    non capisco come configurare il TOKEN….

    • @marioilgrande:disqus allora come prima cosa quello che devi fare te è entrare in contatto con il BotFather.
      Il BotFather, quindi il bot padre, ha lo scopo di aiutere te e tutti gli sviluppatori a generare nuovi bot. Chattando attraverso Telegram con il BotFather, esso ti restituisce una serie di informazioni utili per la creazione di un bot e la generazione di un API token dedicato.

      Esempio:

      Tu: /newbot

      BotFather: Alright, a new bot. How are we going to call it? Please choose a name for your bot.

      Tu: il_nome_del_tuo_bot oppure ilnomedeltuobot o ilmiobot

      BotFather: Good. Now let’s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

      Tu: nomebot

      BotFather: Done! Congratulations on your new bot. You will find it at telegram.me/NomeBot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands.

      Use this token to access the HTTP API: 34240952345234:BBE8Y15d2O_Augr8CrFcs3_WW4R48u515DA
      For a description of the Bot API, see this page: https://core.telegram.org/bots/api

      Ecco Mario il token di cui hai bisogno è proprio questo restituito dal BotFather: “Use this token to access the HTTP API: 34240952345234:BBE8Y15d2O_Augr8CrFcs3_WW4R48u515DA”

      ATTENZIONE: il mio è solo un esempio, quindi non va usato questo token, devi farti restituire quello dedicato al tuo bot che vuoi realizzare

      Spero di esserti stato utile e se hai problemi, scrivici ancora

  • Volevo segnalarvi questo nuovo servizio (https://www.allaroundsiena.com) che permette di collegare il proprio blog/feed rss ad un canale Telegram.

  • giuseppe

    buongiorno è buona domenica, o creato un bot telegram per inoltrare dei post nei vari canali o installato il bot è funziona perfettamente ora però o perso il Token come faccio ha recuperarlo? grazie per la sua gentile risposta.
    https://uploads.disquscdn.com/images/be54715ba544f27551e2706971d15db9518ea962eb1e795f8c121788e6549088.jpg

    • salve @disqus_0InVYNqNTT:disqus
      La cosa è molto semplice da fare, vai in Telegram e poi cerca @BotFather a questo punto dai il comando: /mybots
      Bene una volta dato questo comando ti usciranno fuori tutti i bot che hai realizzato, una volta che hai cliccato su uno dei bot che ti interessa, ti uscirà fuori una lista di funzionalità: API Token, Edit Bot, Bot Settings, Payments e Delete Bot… Quindi ecco che se clicchi su API Token ti uscirà fuori il token assegnato al bot da te realizzato.

  • Pingback: Creare un canale Telegram ed alimentarlo automaticamente con un feed RSS - InsideTelegram()

Cerca

Seguici

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

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

Chiudi