ChatBot/Bot telegram e i Gemelli Skywalker

Da molto non parlavo di Chatbot e Bot Telegram, questa volta colgo l’occasione della Settimana del Rosadigitale per creare un piccolo tutorial, guardando il codice di uno dei miei Bot. Questa volta partendo Luke e Leila, i gemelli Skywalker e con l’aiuto dei loro “BOT”: R2-D2, C-3PO e BB8. 

Bot telegram

Luke e Leila, i gemelli Skywalker

Luke Skywalker e Leila Organa sono i gemelli alla base della trilogia originale di Guerre stellari. Figli di Anakin Skywalker e di Padmé Amidala, separati alla nascita ed entrambi protagonisti della sconfitta dell’impero, Luke come Cavaliere Jedi e Leila come leader dell’Alleanza Ribelle.




Luke è interpretato da Mark Hamill, sino ai 19 anni aiuto lo zio nella riparazione di macchinari e droidi, sino all’incontro con Obi-Wan Kenobi, che su maestro anche di Anakin, che lo portò a diventare un cavaliere Jedi.

Leila o principessa Leila invece è stato interpretata da Carrie Fisher, fu adottata da regina e da un senatore. Divenne presto anche lei senatrice dove in segreto aiutò l’alleanza ribelle. Fu una grande combattente e l’unica donna a partecipare alla battaglia di Endor.

E i bot?

In ogni storia i protagonisti hanno sempre un aiutante, in tutta la durata di Guerre Stellari, compresi gli spin off, ricoprono ruoli spesso fondamentali i robot, in guerre stellari i più frequenti sono: R2-D2, C-3PO e BB8.

Ecco, i ChatBot e stanno diventando sempre più importanti in tutti i principali mezzi di comunicazione che noi usiamo, che si parli di marketing, accessibilità, riusco dei dati aperti, servizi di assistenza od altro, ci stiamo abituando a vederli. In questo articolo mostrerò alcune piccole funzioni che ho utilizzato in uno dei chatbot che reputo tecnicamente più completo. Con la speranza che sia di aiuto a chi volesse costruirne uno.

Il chatbot in questione è @sardegnapoi_bot, un bot telegram per trovare i punti di interesse tramite un file CSV, rilasciato come Open Data.

 Bot Telegram e Sardegnapoi_bot

Vediamo un po’ il codice e cosa fa:

Come prima cosa inseriamo i dati del nostro token, quello che otteniamo dal bot: The Bot Father:

define('BOT_TOKEN', 'Token_input');
define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/');

Ogni volta che mandiamo un messaggio al nostro bot, controlla e formatta in un modo più comprensibile il testo:





$content = file_get_contents("php://input");
$update = json_decode($content, true);
$chatID = $update["message"]["chat"]["id"];
$benvenuto="Messaggio di benvenuto";

Controlliamo prima di tutto se il messaggio è in un formato che noi possiamo utilizzare, in questo caso controlla se il messaggio è testuale oppure fatto in coordinate, in caso contrario invia un messaggio di errore.

if (!array_key_exists('text', $update["message"]) && !array_key_exists('location', $update["message"])) {
$type_ns="Formato non supportato, digita il nome di un comune Sardo o invia la tua posizione";
$sendto =API_URL."sendmessage?chat_id=".$chatID."&text=".urlencode($type_ns);
file_get_contents($sendto);
die();
}

Se siamo a questo punto il nostro bot ha ricevuto un messaggio che riesce a decifrare, ora quindi, prepara una serie di valori che serviranno per ricercare i Punti di interesse nel CSV.

if(array_key_exists('location', $update["message"])){

$bidda=array(
“latitude” => $update[“message”][“location”][“latitude”],
“longitude” => $update[“message”][“location”][“longitude”],
);
}else{
$bidda=$update[“message”][“text”];
}

$reply = sendMessage($bidda,$chatID);
Con la funzione sendMessage ottengo un array pronto per essere elaborato da Telegram con le risposte per gli utilizzatori, Quello che vediamo ora sono le funzioni per inviare l’array a Telegram in modo che possa capirlo.

header(“Content-Type: application/json”);
$parameters = array(‘chat_id’ => $chatID, “text” => $reply[‘testo’]);
$parameters[“method”] = “sendMessage”;
$parameters[“reply_markup”] = ‘{ “keyboard”: ‘.$reply[‘key’].’}’;

echo json_encode($parameters);
Abbiamo visto poche righe fa, la funzione sendMessage, ecco ilfunzionamento:




function sendMessage($bidda, $chatID){

$benvenuto=”Messaggio di benvenuto“;
$help =”Messaggio di aiuto“;

Esamina che il contenuto sia formato in un modo corretto





if(strlen($bidda)<4 && !is_array($bidda)){
$sendto =API_URL."sendmessage?chat_id=".$chatID."&text=".urlencode("Zona non trovata");
file_get_contents($sendto);
die();
}

Inizializza la variabile dove verranno inseriti i risultati e apre il nostro file CSV con tutti i punti di interesse della Sardegna.

$risultati =array();

$simple = file_get_contents(“data/poi.csv”);

$righe=explode(chr(10),$simple);

$search_mode = FALSE;

if (is_array($bidda))
{
$sendto =API_URL.”sendmessage?chat_id=”.$chatID.”&text=Cerco per coordinate”;
file_get_contents($sendto);

$search_mode =TRUE;
Scorre riga per riga il contenuto del nostro file

foreach($righe as $s){
$response =array();
$col = explode(';',$s);

$col[3]=str_replace(‘”‘,”,$col[3]);
$col[1]=str_replace(‘”‘,”,$col[1]);

$lat = str_replace(‘”‘, ”, $col[3]);
$long = str_replace(‘”‘, ”, $col[1]);
controlla se la riga corrente soddisfa le coordinate richieste

if(($col[1]< $bidda["latitude"]+0.02 && $col[1]>$bidda["latitude"] - 0.02) && ($col[3]< $bidda["longitude"]+0.02 && $col[3]>$bidda["longitude"] - 0.02)){ /*|| stripos($col[2],$bidda) || stripos($col[5],$bidda)*/
$response = array (
'id'=> str_replace('"', '', $col[4]),
'tipo'=> str_replace('"', '', $col[0]),
'comune'=> str_replace('"', '', $col[9]),
'lat'=> $lat,
'long'=> $long,
'nome'=> str_replace('"', '', $col[5]),
'provincia'=> str_replace('"', '', $col[8]),
'zona'=> str_replace('"', '', $col[2])
);
$risultati[]=$response;
}

Esamina le altre opzioni di navigazione:

  • Inizio
  • Aiuto
  • Ricerca testuale di un paese





}
}elseif($bidda=="/start" || $bidda=="Inizio"){
$testo = $benvenuto;
}elseif($bidda=="/help" || $bidda=="Aiuto"){
$testo = $help;
}elseif(stripos($bidda, "Mappa")!==FALSE){
foreach($righe as $s){
$response =array();
$col = explode(';',$s);
$id =str_ireplace("Mappa: ","",$bidda);
if($col[4]=='"'.$id.'"') {
$lat = str_replace('"', '', $col[3]);
$long = str_replace('"', '', $col[1]);
$testo = 'https://www.google.com/maps/place/'.$long.'+'.$lat.'/@'.$long.','.$lat.',15z';
}

}
}elseif(stripos($bidda, “Scheda”)!==FALSE){
foreach($righe as $s){
$response =array();
$col = explode(‘;’,$s);
$id =str_ireplace(“Scheda: “,””,$bidda);
if($col[4]==$id) {
$testo = $col[7];
}

}
Questo è per mostrare i pulsanti per accedere ai miei altri bot

}elseif($bidda=="Altri bot"){
$lista =array(
'Storia e archeologia in Sardegna: @nuragheBot',
'Biblioteche in Sardegna: @sardegnabiblioteche_bot',
'Trasporti pubblici della Sardegna: @sardegnatrasportibot',
'Musica libera con jamendo: @jamendo_SearchBot',
'Prontuario da bar: @Cumbido_bot',
'A Christmas Carol: @achristmascarol_bot'
);
$testo = implode(chr(10),$lista);
}else{
$sendto =API_URL."sendmessage?chat_id=".$chatID."&text=Cerco ".$bidda;
file_get_contents($sendto);

$search_mode =TRUE;
$i=0;
foreach($righe as $s){
$response =array();
$col = explode(‘;’,$s);

if(stripos($col[5],$bidda) || stripos($col[10],$bidda)){
$lat = str_replace(‘”‘, ”, $col[3]);
$long = str_replace(‘”‘, ”, $col[1]);
Qui prepara la risposta da inviare a Telegram con un semplice array





$response = array (
'id'=> str_replace('"', '', $col[4]),
'tipo'=> str_replace('"', '', $col[0]),
'comune'=> str_replace('"', '', $col[9]),
'lat'=> $lat,
'long'=> $long,
'nome'=> str_replace('"', '', $col[5]),
'provincia'=> str_replace('"', '', $col[8]),
'zona'=> str_replace('"', '', $col[2])
);
$risultati[]=$response;
$i++;

}

}
}
$acapo=”\n”;
$sug = array();
$sug[] = ‘[“Inizio”,”Aiuto”]’;
if($search_mode) {
$tot = count($risultati);
$testo = ”;
foreach ($risultati as $k => $res){
$testo .= $res[‘id’].’ – ‘.$res[‘nome’];
$testo .= $acapo;
$testo .= $res[‘tipo’];
$testo .= $acapo;
$testo .= $res[‘comune’].’ (‘.$res[‘provincia’].’)’;
$testo .= $acapo;
$testo .= ($k+1).’/’.$tot;
$testo .= $acapo;
$testo .= $acapo;

$link = array(
‘”Mappa: ‘.$res[‘id’].'”‘,
‘”Scheda: ‘.$res[‘id’].'”‘
);

$sug[] = ‘[‘.implode(“,”,$link).’]’;
}
}

$sug[] = ‘[“Altri bot”]’;
$testo = $testo ? $testo : “Nessun risultato”;
return array(
‘testo’=> $testo,
‘key’ => ‘[‘.implode(‘,’,$sug).’]’
);
}

 

Spero sia stato utile, buona settimana del Rosadigitale 🙂

L’articolo ChatBot/ Bot telegram e i Gemelli Skywalker proviene da Matteo Enna.

Se vuoi sostenerci, puoi farlo acquistando qualsiasi cosa dai diversi link di affiliazione che abbiamo nel nostro sito o partendo da qui oppure alcune di queste distribuzioni GNU/Linux che sono disponibili sul nostro negozio online, quelle mancanti possono essere comunque richieste, e su cui trovi anche PC, NAS e il ns ServerOne. Se ti senti generoso, puoi anche donarmi solo 1€ o più se vuoi con PayPal e aiutarmi a continuare a pubblicare più contenuti come questo. Grazie!

Hai dubbi o problemi? Ti aiutiamo noi!

Se vuoi rimanere sempre aggiornato, iscriviti al nostro canale Telegram.
Se vuoi ricevere supporto per qualsiasi dubbio o problema, iscriviti alla nostra community Facebook o gruppo Telegram.
Cosa ne pensi? Fateci sapere i vostri pensieri nei commenti qui sotto.
Ti piace quello che leggi? Per favore condividilo con gli altri.
Amazon Music
Scopri le ultime offerte per dischi ssd su Acquista su Amazon
Scopri le ultime offerte per memorie RAM DDR su Acquista su Amazon
Scopri le ultime offerte per Chromebook su Acquista su Amazon
Scopri le ultime offerte per Raspberry su Acquista su Amazon

Potrebbero interessarti anche...

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.