Programmare un Bot per Telegram in PHP su Heroku con Dropbox #1/2

Alcune linee guida per lo sviluppo di un bot per Telegram utilizzando servizi gratuiti, e senza usare server casalinghi.

telegram bot banner

Dopo aver letto l’articolo di Benedetto Nespoli su InsiDevCode (Telegram 3.0: Creare un bot) che spiega le basi per creare da zero un bot per Telegram, mi è venuta voglia di provare a creare un bot che viva senza pagare nessun servizio che fornisca il protocollo https. Infatti Telegram accetta solo tale protocollo per i propri bot, e un servizio http, quindi, non è accettato.

La guida sarà formata da due step, che descriveranno

  1. Come creare un bot su Telegram e legarlo gratuitamente ad un’app in PHP su Heroku
  2. Come creare un progetto e deployarlo su Heroku tramite Dropbox

Oggi tratteremo solo il primo punto, cioé faremo un nuovo bot per Telegram, faremo una nuova app su Heroku, infine stabiliremo un legame tra di loro.

 

Creare un nuovo Bot su Telegram

Per creare un nuovo Bot di Telegram è necessario fare la richiesta ad un altro bot chiamato BotFather

@BotFather

@BotFather

Appena aggiunto e lanciato il comando /start, ci darà una lista di comandi da usare

  • /newbot → create a new bot
  • /setname → set name for your bot
  • /setdescription → setdescription for your bot
  • /setcommands → define commands for your bot
  • /setuserpic → set picture for bot (minimum size 512X512)
  • /token → get your access token
  • /revoke → delete access token of bot
  • /deletebot → remove the bot forever

I comandi sono tutti in inglese, noi possiamo usare il comando /newbot, e seguendo le linee guida andremo ad impostare il nome e il nick. Poi, tramite il comando /setcommands, andremo ad inserire i suggerimenti ai comandi disponibili del bot.

Usando poi il comando /token andremo a ricevere la chiave token che utilizzeremo per poter dare degli ordini al nostro bot dall’esterno.

Io ho creato un nuovo bot di test chiamandolo creanuovobot, e per comandarlo mi è stato dato il token mostrato in figura

crea nuovo bot telegram

Salviamo questo token in un file di testo e teniamolo al sicuro, perché dopo ci servirà.

 

Passiamo ad Heroku

Heroku è una piattaforma cloud di programmazione progettata per la fruizione di applicazioni online. Offre sia servizi gratuiti che a pagamento, e fortunatamente noi potremo fare uso di quelli gratis per il funzionamento del nostro bot.

registrazione heroky francesco celiento

Andiamo su Heroku.com, registriamoci gratuitamente e creiamo una nuova app (sempre gratuitamente) che utilizzi PHP. Noi chiameremo la nostra app creanuovobot, con lo stesso nome del nostro bot giusto per comodità.

crea nuova app heroku creanuovobot

Andiamo a questo punto a copiarci l’url della nostra applicazione, che se non abbiamo toccato nulla risulterà essere

https://creanuovobot.heroku.com

Altrimenti possiamo modificarlo andando in Settings -> Domain

Possiamo felicemente notare la presenza del protocollo https, perché senza questo non possiamo andare ad utilizzarlo per Telegram. Per adesso con Heroku abbiamo terminato, il prossimo articolo descriverà come caricare l’applicazione, che verrà utilizzata dal bot di Telegram, direttamente da Dropbox.

Per i più bravi: Heroku permette di caricare un repository direttamente da Github, io descrivo Dropbox perché non mi va di sprecare un repository di Github per un semplice bot di Telegram in PHP.

 

Colleghiamo il Bot di Telegram con l’App su Heroku

Recuperiamo il token del bot che abbiamo precedentemente salvato, e l’url della nostra app su Heroku e aprendo il browser componiamo questo url e lanciamolo

https://api.telegram.org/bot[TOKEN]/setWebhook

che nel nostro caso sarà

https://api.telegram.org/bot213258505:AAHUc6EPCFq7kZZFhqYVIWM4jq2j9_5LNrE/setWebhook

Dobbiamo ottenere una delle seguenti risposte

  • {“ok”:true,”result”:true,”description”:”Webhook is already deleted”}
  • {“ok”:true,”result”:true,”description”:”Webhook was deleted”}

Successivamente ricomponiamo l’url aggiungendo l’indirizzo dell’app su heroku, in questo modo

https://api.telegram.org/bot[TOKEN]/setWebhook?url=[URL]

che nel nostro caso sarà

https://api.telegram.org/bot213258505:AAHUc6EPCFq7kZZFhqYVIWM4jq2j9_5LNrE/setWebhook?url=https://creanuovobot.herokuapp.com/

Dobbiamo ottenere una risposta come questa

{"ok":true,"result":true,"description":"Webhook was set"}

Se tutto è andato a buon fine possiamo fermarci qui. Per i meno bravi è in arrivo la guida per poter caricare l’applicazione, che verrà utilizzata dal bot, su Heroku direttamente da Dropbox. Non l’ho scritta adesso per non creare un post chilometrico.

Creare un Bot per Telegram in PHP su Heroku con Dropbox #2/2
Terminiamo la guida scrivendo l’applicazione in PHP che andrà a gestire il nostro bot su Telegram. Utilizzeremo un pacchetto già fatto che andremo poi a personalizzare.

Fare attenzione a non buttare e non pubblicare online il token del vostro bot, altrimenti altri potrebbero comprometterne l’uso. È sempre possibile generarne uno nuovo tramite BotFather con il comando /revoke, ma ciò implica il cambio in tutte le applicazioni che lo gestiscono.

ps: ho già cambiato il token al bot che ho creato per quest’articolo, quello che vedete scritto qui è solo dimostrativo.

Consiglio di dare un’occhiata anche a Telegram Bot in Ruby con TelegramApi, sempre di Benedetto Nespoli.

  • @Stefano Cobucci
    Va bene qualunque hosting web che abbia php e l’abilitazione https. Quest’ultimo non tutti lo offrono.

    Per il problema di Heroku con il limite delle 18/24h, io ho risolto così

    Appoggiandomi ad un secondo servizio (con o senza https), ho scritto uno script in php che viene chiamato due volte al giorno da ifttt.com, e switcha il webhook del bot tra 2 app cloni di heroku alle 00 e alle 12 di ogni giorno. Così ottieni gratis la copertura 24/24h.

    Ciao

    • Beh, hai avuto un’idea GENIALE!
      Sto chiedendo al mio hosting l’eventuale attivazione del protocollo https. In caso negativo sarebbe possibile ottenere da te una miniguida privata per attuare il tuo trick?

  • Domanda: HEROKU impone un limite di 18 ore, se non sbaglio, al funzionamento dell’app caricata in modalità FREE USER.
    se volessi usare un’alternativa ad HEROKU, va bene qualunque hosting web che abbia PHP?
    quindi anche un hosting che ospita WordPress attualmente funzionante?
    Grazie