Ankündigung

Einklappen
Keine Ankündigung bisher.

Uhrzeit in Telegram Bot vom User abfragen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Uhrzeit in Telegram Bot vom User abfragen

    Moin!

    Kurz zu mir: bin neu (5 Tage) im Bereich PHP und hab bisher VBA programmiert, damit kenn ich mich gut aus.
    Zum Projekt: Helfer sollen auf eine Anfrage antworten können: ich kann von / bis Uhr. (Diese Antworten werden hinterher in Excel verarbeitet)

    Mein unwissender Gedanke war:
    Okay ich bekomm' vom Bot die "Von"-Uhrzeit als Text.
    Ich hab diese dann geprüft und wollte als nächstes die "Bis" Uhrzeit abfragen.
    Das ganz über eine $VonOderBis - Statusvariabel, damit mit nicht immer beides abgefragt wird.
    Dabei habe ich gelernt, das wenn den Bot mein Script ausführt, die Variabeln resettet werden. Schade...

    PHP-Code:
    // zeit
    // VON
    $ZeitEingegeben $json_out->message->text;
    if( 
    $VonOderBis == "von")
    {
        
    sendMessage($bot_id,$json_out->message->chat->id,"debug4:" $ZeitEingegeben "\n");
        if( !(bool)
    preg_match('/^(?:2[0-3]||(([0-9]||0[0-9])||1[0-9])):[0-5][0-9]$/'trim($ZeitEingegeben))  )  // ist es ein Zeitformat?
        
    {
            
    sendMessage($bot_id,$json_out->message->chat->id,"Uhrzeit ungültig!\n");
        } else 
        {
            
    //prüfen ob Uhrzeit in bereich der Sandienst zeit liegt -> dazu die einsatzID asuwerten
            
    $ZeitEingegebenVon $ZeitEingegeben;
            
    $VonOderBis "bis";

            
    sendMessageHtml($bot_id,$json_out->message->chat->id,"Uhrzeit gültig!\nDu hast dich ab <b>"$ZeitEingegeben " Uhr</b> gemeldet "$symGreenHarken);
            
    sendMessageHtml($bot_id,$json_out->message->chat->id,"<b>Bis</b> wann kannst du? ");   
        } 
    }
    // BIS
    if( $VonOderBis == "bis" )
    {
        if( !(bool)
    preg_match('/^(?:2[0-3]||(([0-9]||0[0-9])||1[0-9])):[0-5][0-9]$/'trim($ZeitEingegeben))  )  // ist es ein Zeitformat?
        
    {
            
    sendMessage($bot_id,$json_out->message->chat->id,"Uhrzeit ungültig!\n");
        } else 
        {
            
    //später prüfen ob Uhrzeit in bereich der Sandienst zeit liegt -> dazu die einsatzID asuwerten
            
    $ZeitEingegebenBis $ZeitEingegeben;
            
    sendMessageHtml($bot_id,$json_out->message->chat->id,"Uhrzeit gültig!\nDu hast dich ab <b>"$ZeitEingegeben " Uhr</b> gemeldet "$symGreenHarken);
            
    sendMessageHtml($bot_id,$json_out->message->chat->id,"<b>Bis</b> wann kannst du? ");
            
    $VonOderBis "beides";
        }

    }             
    // bestätigung
    if( $VonOderBis == "beides" )
    {
        
    sendMessage($bot_id,$json_out->message->chat->id,"debug 6:" $ZeitEingegeben "\n");
        
    sendMessageHtml($bot_id,$json_out->message->chat->id,"Du hast dich für den Einsatz: " $dienstID  " Tag von:" $ZeitEingegebenVon " bis: " $ZeitEingegebenBis "gemeldet " $symGreenHarken);
        
    $VonOderBis "nix";



    Dann habe ich versucht mittels UserTastatur (10ner) die Zeit abzufragen, Problem die Zahlen kommen einzeln - Neue Zahl = Neuer Aufruf = resettet

    PHP-Code:
    <?php
    function sendKeyboard($bot_id,$chat_id,$message_text,$replyMarkup)
    {
    // testweise die Übergabe in die Funktion gelegt 
        
    $replyMarkup = array(
            
    'keyboard' => array(array("1","2","3",":00"),
                array(
    "4","5","6",":15"),array("7","8","9",":30"), array("0",":",":45" ),array("/sandienst","/go")),
                array(
    'resize_keyboard' => true ),
                array(
    'one_time_keyboard' => true)
        );
        
    $encodedMarkup json_encode($replyMarkup);

        
    $content = array(
        
    'chat_id' => $chat_id,
        
    'reply_markup' => $encodedMarkup,
        
    'text' => "Test"
        
    );
     
    $url "https://api.telegram.org/bot" $bot_id "/sendMessage";
     
    $ch curl_init();
     
    curl_setopt($chCURLOPT_URL$url);
     
    curl_setopt($chCURLOPT_POST1);
     
    curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($content));
     
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
     
    $result curl_exec($ch);
     
    curl_close($ch);
     return 
    $result;
    }
    ?>
    Mein Lösungsgedanke:
    • Ich speichere die Eingabe in eine SQL Datenbank (oder evtl einfach in eine txt statt DB, da es max. 40 User gibt, aber das ist nebensächlich)
    • schaue bei der nächsten Zeit (Eingabe) ob Von gesetzt ist, speichere dann die Bis-Zeit,
    • prüfe ob beide Zahlen da sind und geb dann die Rückmeldung.
    Ich finde das etwas viel für so eine simple Uhrzeitabfrage und bin auf der suche nach einer schöneren Lösung. Besonders schön fänd ich 1. (s.u.)

    Deshalb meine Fragen:
    1. Gibt es in der telegram api eine Art Uhrzeit-Selector (aus der Googl-Suche: https://images.app.goo.gl/eGM34ZpSvn6Wemb37 oder ähnlich) und ich finde ihn einfach nicht?
    2. Gibt es eine schlauere Lösung? Dann bitte ich um Hinweise, wo ich mal gucken kann oder entsprechende Tipps in die richtige Richtung
    3. Andere Anregungen ?

    Gruß pogo1104

  • #2
    Hallo und wikommen im Forum.
    Zum Projekt: Helfer sollen auf eine Anfrage antworten können: ich kann von / bis Uhr. (Diese Antworten werden hinterher in Excel verarbeitet)
    hab ich nicht so ganz verstanden...
    Deshalb meine Fragen:
    1. Gibt es in der telegram api eine Art Uhrzeit-Selector (aus der Googl-Suche: https://images.app.goo.gl/eGM34ZpSvn6Wemb37 oder ähnlich) und ich finde ihn einfach nicht?
    2. Gibt es eine schlauere Lösung? Dann bitte ich um Hinweise, wo ich mal gucken kann oder entsprechende Tipps in die richtige Richtung
    3. Andere Anregungen ?
    Auch das verstehe ich nicht, verweise Dich aber mal nicht auf die Bot Docu sondern die Bot Docu exampels:

    https://core.telegram.org/bots/samples

    Kommentar


    • #3
      Moin!

      Ah, ich hatte es gefürchtet und es einfach versucht

      Evtl mit einem Bild:

      php-abfrage 1.JPG

      Der User bekommt diese Anfrage und kann z.B. nur von 11:00 Uhr bis 16 Uhr.
      Er hat also auf "1: von/bis" getippt und wird nun nach der von Zeit gefragt.
      Die er jetzt im Antwortfeld eingeben kann und dann absendet.

      Er würde nun als nächstes nach der Bis-Uhrzeit gefragt. Aber wenn er die dann sendet weiß mein Script die
      Von-Zeit nicht mehr.
      Schön wäre: Er könnte mittels eines Uhrzeit-Selector von und bis einstellen kann und es dann zusammen absenden.
      Sowas such ich...

      Alternativ hatte ich versucht mittels Telegram Tastatur die Eingabe bequemer zu machen:
      php-abfrage 2.JPG
      Leider sendet sie jeden Tastendruck einzeln an mein Script. Dadurch ist die vorherige Eingabe natürlich wieder gelöscht.
      Ich hatte gehofft, das das drücken der eingeblendeten Tastatur dafür sorgt, das die Zahlen in das Eingabefeld geschrieben werden und der User noch auf "senden" klicken muss.

      Kurzum, es soll einfach und bequem gehen und den jeweils erneuten Aufruf des Scriptes durch den Bot überstehen.

      Auch das verstehe ich nicht, verweise Dich aber mal nicht auf die Bot Docu sondern die Bot Docu exampels:
      Danke! Dort hatte ich schon mal kurz geschaut und das jetzt nochmal vertieft. Es hat mir leider nicht weitergeholfen.
      Kommunikation mit dem Bot klappt soweit, mir fehlt es an einer praktischen Idee wie ich die übermittelten Eingaben weiter verarbeite.
      Dazu kommt das ich nicht so gut im Englischen bin und hoffe das ich die Lösung nicht einfach übersehen habe.


      Spannend finde ich das an dieser Stelle https://core.telegram.org/bots#keyboards im mittleren Bild ja fast meine Tastatur angezeigt wird.
      Aber ob sie da so funktioniert wie von mir gewünscht? Ich denke nein, denn alle Calculator Bots die ich ausprobiere, senden die Zahlen einzeln

      Hth

      Gruß pogo1104

      Kommentar


      • #4
        Moin!

        Die Anfrage hat sich in soweit erledigt, da ich nun die DB Lösung nutze. Eine einfach Möglichkeit in Telegram Uhrzeiten abzufragen scheint es nicht zu geben.
        Muss ja voran gehen

        pogo1104

        Kommentar

        Lädt...
        X