[AIUTO] BOT TELEGRAM - Passaggio parametri tramite comando

Stato
Discussione chiusa ad ulteriori risposte.

InTiime

Utente Iron
18 Novembre 2017
2
1
0
19
Ultima modifica da un moderatore:
Salve a tutti,
sto sviluppando un bot per telegram utilizzando la Webhook e sono in cerca di un metodo che mi permetta di capire quando l'utente sta passando dei dati in seguito alla digitazione di un comando.

Mi spiego meglio tramite un esempio pratico:
1) L'utente digita il comando /aggiungiinfo;
2) Il bot risponde chiedendo il nome.

A questo punto, considerando che il mio script php è impostato in modo che ogni volta che l'utente scrive qualcosa al bot, questi intercetta quanto digitato, tramite le seguenti istruzioni:
codice:
Codice:
$input = file_get_contents('php://input');
$update = json_decode($input, TRUE);
$message = $update['message']['text'];
switch ($message)
{
    case '/aggiungiinfo':
            sendMessage($userId, "Nome: ");
        break;
           
    default:
        sendMessage($userId, "Comando non riconosciuto");
        break;
}
come posso evitare che nel momento in cui l'utente scrive il proprio nome, lo switch rilevi il caso di default?

- Grazie a chi saprà aiutarmi
 
Hai due possibilità, utilizzare il metodo API di Telegram forceReply oppure salvare il comando dell'utente in un database. Siccome la prima opzione è facilmente consultabile nel sito di Telegram mi dilungherò sulla seconda.

Naturalmente, serve una buona conoscenza di un qualsiasi database e del rispettivo query language.

1)Salvare i dati dell'utente in un apposita tabella del database. Questo è il motivo per cui molti bot hanno come comando iniziale "/start". Il dato principale che ci serve è il chatId, ma puoi utilizzare anche l'username univoco di Telegram.

2)Una volta salvati i dati, avremo un identificatore univoco per ogni utente. A questo punto bisogna definire una colonna destinata a contenere lo "stato" di ogni utente.
Ad esempio:
- 1 = menù principale
- 2 = inserimento del nome

3) sarà dunque necessario sviluppare il bot secondo la seguente struttura

Codice:
$statoUtente = //Query per estrapoare dal database lo stato dell'utente
switch($statoUtente){
    case 0:
           switch($text){
              case '/inserisciinfo':
                 //invia messaggio del tipo "inserisci nome"
                 //imposta nel database lo stato = 1
               break;
         
              default:
                //codice default
          }
    break;

     case 1:
              //arrivati qui, $text sarà il nome
              $msg = 'Ti chiami '.$text;
              //imposta stato 0 sul database
     break;
}
 
Ti ringrazio, quella di aiutarmi col database è la strada che mi era già venuta in mente.
Consulterò la documentazione del forceReply.

- Saluti
 
Stato
Discussione chiusa ad ulteriori risposte.