Creare un bot complesso non è mai stato così semplice

Creare un bot su Telegram: parte 2

Ecco la seconda parte della guida per creare un bot su Telegram: tutto il codice da utilizzare per farlo.

Il codice che serve per far funzionare un bot e che oggi impareremo a personalizzare.

Abbiamo visto come creare il guscio del bot su Telegram, in questo articolo (la 2ª parte) vedremo come impostare i comandi del nostro bot.

Prima di tutto, apriamo il file “_comandi.php“ in modalità modifica cliccando il piccolo tasto“modifica”.

/Start

Nelle prime righe troviamo subito questa stringa:

if($msg == "/start")
{
sm($chatID, "Il Bot funziona! Tastiera normale: /tastiera Tastiera inline: /itastiera Iscritti: /iscritti Feedback: /feedback Foto: /foto");
}

Questa stringa è quella che apparirà appena gli utenti avvieranno i bot. Proviamo a personalizzarla.

Basta modificare il testo tra " " .

if($msg == "/start")
{
sm($chatID, "Benvenuto nel mio bot! da qui potrai leggere le ultime notizie.");
}

Possiamo modificarla come vogliamo. Una volta che abbiamo personalizzato lo /start passiamo agli altri comandi.

Le variabili

Possiamo anche impostare una variabile per creare un link particolare al bot che ci darà un risultato particolare differente dallo start tradizionale.

Per esempio, se lo start tradizionale ci dà Ciao possiamo creare una variabile che ci dà Ciao e benvenuto nel mio bellissimo bot.

Se un utente accede dal link tradizionale vedrà Ciao ma se un utente accede dalla nostra variabile vedrà Ciao e benvenuto nel mio bellissimo bot.

Come si crea una variabile?

Basta creare un comando di nome /start NOMEVARIABILE. Per accedere alla variabile sarà necessario usare un link del tipo: http://telegram.me/nomebot?start=NOMEVARIABILE.

Si deve usare lo stesso codice del comando tradizionale. Un esempio:

if($msg == "/start bellissimo")
{
sm($chatID, "Ciao e benvenuto nel mio bellissimo bot");
}

Creando il comando /start bellissimo abbiamo creato una variabile di nome bellissimo. A questo punto personalizziamo il link che sarà: http://t.me/mait_techbot?start=bellissimo

I comandi personali

Ogni comando ha la stessa struttura di /start.

if($msg == "/NOMECOMANDO") 
{
sm($chatID, "TESTOCOMANDO");
}

Proviamo quindi a creare un comando di nome /info con testo Medium è una piattaforma sociale per blogging. Scriveremo quindi:

if($msg == "/info") 
{
sm($chatID, "mait.tech è un sito che tratta di informatica");
}

In questo modo possiamo creare qualsiasi comando testuale ci venga in mente di fare.

Le tastiere

Ora che sappiamo come creare un comando testuale, possiamo creare delle tastiere.

Per creare delle tastiere usiamo questo codice:

if($msg == "/comandotastiera")
{
$menu[] = array("VOCE TASTIERA 1");
$menu[] = array("VOCE TASTIERA 2", "VOCE TASTIERA 3");
$menu[] = array("voce 5");
$text = "Tastiera normale".
Nascondi tastiera: /nascondi";
sm($chatID, $text, $menu, '', false, false, false);
}
if($msg == "/nascondi")
{
$text = "Tastiera Nascosta.";
sm($chatID, $text, 'nascondi');
}

Un codice un po’ lunghetto, non convenite?

Vediamo di dividerlo in piccole parti più facili da comprendere.

La parte della tastiera vera e propria

Questa prima parte del codice riguarda la tastiera vera e propria.

if($msg == "/comandotastiera")
{
$menu[] = array("VOCE TASTIERA 1");
$menu[] = array("VOCE TASTIERA 2", "VOCE TASTIERA 3");
$menu[] = array("VOCE TASTIERA 5");
$text = "Tastiera normale".
Nascondi tastiera: /nascondi";
sm($chatID, $text, $menu, '', false, false, false);
}

Se clicchiamo su VOCE TASTIERA 1 ci apparirà il testo corrispondente. Lo possiamo impostare come comando normale. Ma come possiamo fare?

Basta sapere una semplice cosa. Lo ”/” è una convenzione ideata da Telegram. Ogni comando può iniziare come vogliamo.

Quindi, per far corrispondere a VOCE TASTIERA 1 il testo CIAO ci basta fare così

if($msg == "VOCE TASTIERA 1")
{
sm($chatID, "CIAO");
}

Come un normalissimo comando.

Come possiamo osservare dal codice, se vogliamo disporre più tasti su una fila, dobbiamo fare in questo modo:

if($msg == "/COMANDOTASTIERA") 
{
$menu[] = array("VOCE TASTIERA 1");
$menu[] = array("VOCE TASTIERA SOTTO", "VOCE TASTIERA ACCANTO FILA 2");
$menu[] = array("VOCE TASTIERA SOTTO");
$text = "TESTO CHE APPARE ALL'APERTURA DELLA TASTIERA";
sm($chatID, $text, $menu, '', false, false, false);
}

Ci basta quindi inserire nell’array 2 voci, una accanto all’altra. Ne possiamo inserire anche di più, se desideriamo. Esempio (prendendo in considerazione solo la parte dell’array):

$menu[] = array("TASTO 1", "TASTO ACCANTO", "TASTO ANCORA ACCANTO");

e così via.

Possiamo anche impostare un testo all’apertura della tastiera, che possiamo anche rimuovere (nell’esempio che ho fatto è già impostato, per rimuoverlo basta cancellare la stringa):

$text = "TESTO CHE APPARE ALL'APERTURA DELLA TASTIERA";

Nascondiamo la tastiera

La seconda parte del nostro codice riguarda la chiusura della tastiera. Possiamo impostare un comando che la nasconde.

if($msg == "/nascondi")
{
$text = "Tastiera Nascosta.";
sm($chatID, $text, 'nascondi');
}

/nascondi equivale al comando che nasconde la tastiera mentre $text corrisponde al testo che verrà visualizzato per confermare ciò che è avvenuto.

Tastiera inline

I due tipi di tastiera a confronto: a sinistra quella tradizionale, a destra quella inline.

Telegram ha ideato un nuovo tipo di tastiere dette tastiere inline. Queste tastiere funzionano in modo particolare: i tasti appaiono direttamente in un messaggio e non nella parte vicina alla barra per scrivere i messaggi

Anche a livello di codice hanno un funzionamento differente.

Infatti, le tastiere inline prevedono che sia associato un comando (che il bot eseguirà discretamente) ed un testo (che sarà la parte visibile).

Nelle tastiere tradizionali, invece, il testo visualizzato corrisponde al comando che verrà eseguito dal bot.

if($msg == "/itastiera")
{
$menu[] = array(
array(
"text" => "bottone1",
"callback_data" => "/test1"),
array(
"text" => "bottone2",
"callback_data" => "/test2"),
);
$menu[] = array(
array(
"text" => "bottone3",
"callback_data" => "/test3"),
);
sm($chatID, "Tastiera inline.", $menu, 'Markdown', false, false, true);
}
In questo modo, forse, si possono vedere meglio le varie parti evidenziate.

Ecco un esempio configurato:

if($msg == "/tastierainline")
{
$menu[] = array(
array(
"text" => "TESTO CHE APPARE",
"callback_data" => "/comando1"),
array(
"text" => "TESTO CHE APPARE 2",
"callback_data" => "/comando2"),
);
$menu[] = array(
array(
"text" => "TESTO CHE APPARE 3",
"callback_data" => "/comando3"),
);
sm($chatID, "Tastiera inline.", $menu, 'Markdown', false, false, true);
}

Se vogliamo che cliccando TESTO CHE APPARE venga inviato il corrispondente testo impostato, dobbiamo creare il comando /comando1 tramite la solita procedura.

if($msg == "/comando1")
{
sm($chatID, "TESTO DEL COMANDO1");
}

E così via per tutti gli altri comandi e pulsanti della tastiera inline.

Le notifiche e gli effetti

Alla pressione di un bottone di una tastiera inline possiamo far corrispondere una “notifica” che può essere di diversi tipi e provocare diverse reazioni.

Notifica di tipo 1 e di tipo 2

Qui sopra potete due diversi tipi di notifiche a confronto: una notifica di “tipo 1” ed una di “tipo 2” a confronto.

La notifica di “tipo 3” comporta la visualizzazione di una notifica di “tipo 2” ed una sostituzione della tastiera inline (del messaggio che la ospita e di se stessa) con un testo a piacimento.

Andiamo ora a vedere come impostare questo tipo di notifiche nel nostro bot.

Prima di tutto impostiamo la tastiera inline con il codice visto sopra.

Creiamo le notifiche. Gli esempi includono già l’associazione della tastiera ai comandi(premendo bottone1 si eseguirà il comando /test1 e quindi la notifica).

Tipo 1

if($msg == "/test1")
{
cb_reply($cbid, "TESTO CHE APPARE NELLA NOTIFICA", false);
}

Tipo 2

if($msg == "/test2")
{
cb_reply($cbid, "TESTO CHE APPARE NELLA NOTIFICA", true);
}

Tipo 3

if($msg == "/test3")
{
cb_reply($cbid, "TESTO DELLA NOTIFICA", false, $cbmid, "TESTO CHE APPARE AL POSTO DELLA TASTIERA INLINE");
}

Esempio

Creiamo prima la nostra tastiera inline:

if($msg == "/tastieranotifiche")
{
$menu[] = array(
array(
"text" => "Notifica di tipo 1",
"callback_data" => "/notifica1"),
array(
"text" => "Notifica di tipo 2",
"callback_data" => "/notifica2"),
);
$menu[] = array(
array(
"text" => "Notifica di tipo 3",
"callback_data" => "/notifica3"),
);
sm($chatID, "Tastiera inline.", $menu, 'Markdown', false, false, true);
}

E dopo inseriamo le corrispondenti notifiche

Tipo 1

if($msg == "/notifica1")
{
cb_reply($cbid, "ESEMPIO NOTIFICA DI TIPO 1", false);
}

Tipo 2

if($msg == "/notifica2")
{
cb_reply($cbid, "ESEMPIO DI NOTIFICA DI TIPO 2", true);
}

Tipo 3

if($msg == "/notifica3")
{
cb_reply($cbid, "ESEMPIO DI NOTIFICA DI TIPO 3", false, $cbmid, "TESTO DA VISUALIZZARE AL POSTO DELLA TASTIERA");
}

In questo modo possiamo creare qualsiasi tipo di notifica desideriamo in qualsiasi modo (anche usando più volte lo stesso tipo).

Fotografie

Inserire fotografie (solo jpg, png) è un po’ più complicato. Prima di tutto dobbiamo caricare le nostre fotografie nella cartellina del bot.

Una volta caricato le foto in Altervista, utilizzando il solito tasto “invia files”, selezionando/trascinando i file nel riquadro e cliccando su “invia files”, possiamo inserire il comando nel codice del bot. Il comando sfrutta la stessa struttura che usiamo quando impostiamo un comando testuale, ma è leggermente differente.

if($msg == "/NOMECOMANDODESIDERATO")
{
si($chatID, "NOMEFOTO.EXT", false, "DIDASCALIA");
}

Quindi dobbiamo inserire al posto di /NOMECOMANDODESIDERATO il nome del comando che vogliamo impostare (per esempio /foto), al posto di NOMEFILE.EXT dobbiamo impostare il nome della nostra foto (che abbiamo caricato prima) comprensivo di estensione, cioè di parte finale. Per esempio, se abbiamo caricato il file fotografiamia.jpg dovremo inserire il nome del file così come sta (completo).

Se invece non vediamo l’estensione, cerchiamo di recuperarla guardando su Altervista (nell’FTP è indicata sempre l’estensione). Al posto di DIDASCALIA possiamo inserire la nostra didascalia personalizzata.

Al momento il supporto è riservato alle fotografie (non è possibile inserire altri tipi di file), ma speriamo che presto diventi possibile.

Nella prossima parte della guida spiegherò come impostare i comandi direttamente da BotFather in modo da farli apparire quando si digita / e come personalizzare il bot (sempre da BotFather) in tutti i modi.

Proprio così.

Grazie a tutti per aver letto questa seconda parte! Vi aspetta la terza parte, stay tuned.

Infine, per concludere, la quarta ed ultima parte parlerà di come creare dei rudimentali messaggi inline.

Un’ultima raccomandazione. Cercate di non lasciare comandi doppione (nel codice del bot sono già inclusi degli esempi) per evitare problemi.


Ti è piaciuto questo articolo? Non ti è piaciuto? Scrivi qualcosa nei commenti e non dimenticarti di iscriverti alla mia newsletter!

Nota: tutto il codice qui presente è di proprietà di BruninoIT che ha creato AltervistaBot.

Il testo della guida rimane sotto licenza indicata sotto. Lo ringrazio ancora per il suo grande lavoro.

Pubblicato originariamente su mait.tech sotto medesima licenza, poi andato perduto.