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.

AAbbiamo 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

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

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

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

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

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

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

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

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

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.

<<<Parte precedente

INDICE

Parte successiva>>>


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.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store