Telegram Messenger Modul

Danke dir. Soweit verstanden. Im Script bekomme ich aber noch folgenden Fehler:

Parse error: syntax error, unexpected ‚Telegram_SendText‘ (T_STRING) in /var/lib/symcon/scripts/58374.ips.php on line 5

Was mache ich falsch?

Dein Fehler ist, uns dein Script nicht zu zeigen.
Die Glaskugeln sind gerade aus…
Michael

Wie Michael schon sagte, ohne Script geht nur raten.

Ich tippe auf ein fehlendes Semikolon in der vorherigen Zeile ;).

Sorry ich dachte ich hab den Code reingepostet.
Ich idiot hatte tatsächlich ein Semikolon vergessen. Danke

Mega Cooles Modul

Wie bekommt man die Chat ID Heraus? Hintergrund ist der, dass ich einen Teleframe gebaut hab.Diesen kann man per Telegram mit Fotos füttern, aber auch ein und ausschalten. Dazu gibt es einen Bot.
Man kann in den Bot befehle schreiben um den Bildschirm ein und auszuschalten. Funktioniert über Handy top- muss meine Chat ID auf die whitelist im Teleframe eintragen.
Dies möchte ich über Symcon machen, aber das Modul läuft ja nur über Bots, daher soweit ich weis keine eigene Chat ID oder?

Keiner eine Idee?

Gesendet von meinem VOG-L29 mit Tapatalk

Was hast du denn probiert?

Meine Einrichtung ist „unendlich“ lange her, ich frage dann immer die Suchmaschine meines Vertrauens, die liefert auch mindestens einen deutschen Treffer ;).

Der BotFather: Einrichtung eines Chat-Bots • Christians Homepage

Werte Symcon User und Entwickler,

Super Implementierung von Telegram, geniale Arbeit Danke Titus…
Hab zwar etwas gebraucht, aber nun tut fast alles was ich (momentan) brauche.

Frage: Kann man neben der UserID auch die Vor/Nachnamen Script/ Variablen-technisch verarbeiten? Im log stehen diese ja drin,
weiterauch [language_code] und [type] ggf. auch die OrginalSendezeit [date]

Vielen Dank schonmal vorab.

LG
Andreas

Hallo zusammen,

sehr geiles Modul! Funktioniert wunderbar.

Ich hätte noch eine Frage. Bei Telegram Bots besteht allgemein die Möglichkeit über ReplyKeyboardMarkup vordefinierte Antworten vorzugeben. Das heißt der Bot würde beispielsweise Antworten „für welchen Raum wünschst du die Temperatur?“ und man kann als Nutzer direkt auswählen „Wohnzimmer“, „Küche“, … .

Ist so etwas mit dem Modul möglich? bzw. Weiß jemand wie man es einstellen könnte?

Vielen Dank für eure Hilfe und schöne Grüße

Stefan

Hallo
Hab vor Monaten schonmal mit den Keyboards gespielt und es funktionierte auch ganz gut. Hatte leider nur noch keine Zeit das zu veröffentlichen. Komme wegen Geburtstag des großen leider erst am Montag dazu meine Änderungen am Modul zu zeigen. Hoffe du kannst noch die zwei Tage warten.

Gruß Jannis

Ich hab es mir auch installiert und mich gleich damit herumgespielt. Funktioniert perfekt, tolle Arbeit.
Ich bekomme sogar Standbilder von meinen Kameras :-).
Eine Frage zum Bot hätte ich noch, die auch durch meine befvorzugte Suchmaschine nicht ausreichend beantwortet werden konnte. Wie schütze ich meinen Bot? Weil rein theoretisch könne sich jeder den Bot hinzufügen und ihn befragen. Mir ist schon klar, dass man darüber keine sensitiven Daten hin und her schicken sollte. Ich habe lediglich eine Stehlampe zum Testen eingebunden. Ansonsten bekomme ich nur Informationen, was aber perfekt ist.
Kann ich den den Bot so schützen, dass er erst nach Freigabe von mir als Ersteller hinzugefügt werden kann? Bekomme ich eine Benachrichtigung, wenn sich jemand den Bot hinzufügt? Und welche Funktion hat die „Empfänger“ Liste. Ist das nur beim „Send to all“ interessant oder wirden Nachrichten nur an diese gesendet?
Wenn dem nicht so ist, dann würd ich mir was eigenes Überlegen. In etwa eine Art Registrierung und vorallem Benachrichtigung an den Admin (also mich).

Hi,

die Empfänger Liste ist die Sicherheit. Nur wenn Benutzer, die in dieser Liste sind, ein Kommando an den Bot senden, wird das Aktionsscript ausgeführt und können somit mit IPS interagieren.
Alle Anfragen werden ins LOG geschrieben, auch von nicht in der Liste eingetragenen Empfängern.
Hin und wieder wird schon mal der Bot von irgendwelchen ??? angefragt:

Gruß
Attain

Super Danke. Wo finde ich das Log? In IPS?

Hallo
hier wie versprochen mein Versuch ein Auswahlkeyboard mitzuschicken.

Gleich vorweg das ganze ist nicht gerade profesionell programmiert. Hab alles nur durch neu zusammenstellen, was dazufügen und ausprobieren zum laufen bekommen. Und man muss die Änderung in der __generated.inc.php Datei nach jedem Update eines Modules wieder neu anpassen. Bisher hielt sich der Aufwand aber in Grenzen und hat mich nicht wirklich gestört. Aber wenn die Funktion noch jemand benutzt könnte man ja mal anfragen ob man sie besser programmiert in das Modul übernehmen könnte.

Jetzt aber zu meinem Vorgehen.

Als erstes muss man die Modul.php von Telegram anpassen.

Auf dem Rasperry geht das mit

sudo nano /var/lib/symcon/modules/master/TelegramMessenger/module.php

Dann diese Funktion hinzufügen


      public function SendTextKey($text, $userid, $markup) {
                        include_once(__DIR__ . "/Telegram.php");
                        $frmt = "Markdown";
                        if ($this->ReadPropertyBoolean("HTML") == true) {
                                $frmt = "HTML";
                        }
                        $telegram = new Telegram($this->ReadPropertyString("BotID"));
                        $content = array('chat_id' => $userid, 'text' => $text, 'parse_mode' => $frmt,'reply_markup' => $markup);

                        return $telegram->sendMessage($content);
  
                } 

damit man auch aus IPS diese Funtion benutzten kann muss wie schon geschrieben die __generated.inc.php Datei geändert werden.

Also wieder mit
sudo nano /var/lib/symcon/scripts/__generated.inc.php
öffnen und das hier hinzufügen:





function Telegram_SendTextKey($InstanceID, $text, $userid,$markup)
{
        if(IPS_GetInstance($InstanceID)["ModuleInfo"]["ModuleID"] == "{EAF404E1-7A2A-40A5-BB4A-E34CA5AC72E5}") {
                require_once('/var/lib/symcon/modules/master/TelegramMessenger/module.php');
                $result = (new TelegramMessenger($InstanceID))->SendTextKey($text, $userid,$markup);
        }
        else {
                throw new Exception("Instance does not implement this function");
        }
        return $result;
}

Hoffe ich habe jetzt keinen Schritt vergessen.

Versenden kann man den Text mit Tastaur dann mit

$keyboard = array   (
                    array   (
                             array('text'=>'Gelesen','callback_data'=>"gelesen"),array('text'=>'Morgen nochmal erinnern','callback_data'=>"erinnern")
                            ),   //erste Keyboard zeile 
                            array   (
                            array('text'=>'Weiterleiten an xxxx','callback_data'=>"weiter")
                            ),    //zweite Keyboard zeile 
                     array  (
                            array('text'=>'Info beibehalten','callback_data'=>"behalten")
                            )     //dritte Keyboard zeile 
                    );
    $inlineKeyboardMarkup = array(
        'inline_keyboard' => $keyboard
            );


Telegram_SendTextKey(12345,"Wichtige Info",userid,json_encode($inlineKeyboardMarkup));

So sieht das dann aus.

Zum auswerten sind ja die callback_data texte vorhanden.

<?php
  
if ($_IPS['SENDER'] == "Telegram") {
    process_incoming($_IPS['INSTANCE'], $_IPS['CHAT'], $_IPS['VALUE']);
}

function process_incoming($instance, $senderid, $text) {
    $return = "";

    switch(strtolower($text)) {

    case "gelesen": 
           $return = "Gelesen Jip ";
           Telegram_EditMessageText($_IPS['INSTANCE'],$_IPS['CHAT'],$_IPS['MESSAGEID'],"Danke",'');
           break;

        //usw.....

        default:
           $return = "Der Befehl '".$text."' ist unbekannt.";
           break;
    }


    if ($return != "") {
        Telegram_SendText($instance, $return, $senderid,'');

    }
}


Mit

Telegram_EditMessageText($_IPS['INSTANCE'],$_IPS['CHAT'],$_IPS['MESSAGEID'],"Danke",'');

ändere ich den Text der Nachricht und lösche auch gleich die Tastaur damit man nicht nochmal was schicken kann und es auch aufgeräumter aussieht.

Hoffe Ihr bekommt es auch zu laufen und ich konnte helfen.

Gruss Jannis

Danke, genau das ist auch mein primärer Use-Case.

Ob sich einfach jemand beim Bot anmelden kann weiß ich gar nicht. Das Modul lässt aber nur Nachrichten rein von Benutzern die in der Empfängerliste stehen. Andere User werden ignoriert. Bei „Send to all“ werden ebenfalls nur die definierten Empfänger bedient.

Würdest Du mir einen Pull Request schicken? Dann baue ich das gerne mit ein.

Danke!

Hi Jannis,

danke erstmal für deine Mühe!

Ich befürchte aber doch… die ganze EditMessage-Function fehlt hier noch :wink:
Allerdings verstehe ich aber auch sonst das Vorgehen noch nicht ganz und kann es hier nicht erfolgreich implementieren… wenn ich die Telegram-API richtig verstehe, müssen wir auf „inline_keyboard“-query’s mit „answerquery“ antworten… ansonsten erscheint bei mir nach dem Drücken eines Buttons nur „Lädt…“ in der App bis die App im Timeout landet.
Alternativ kann ich erfolgreich statt „inline_keyboard“ einfach ein „keyboard“ nutzen… das klappt, ist aber natürlich nicht so schön.

Mahlzeit zusammen,

hat irgendwer ne Ahnung, womit der Fehler zusammenhängt? Er ist aufgetreten, nachdem ich auf Symcon 5.5 geupdatet habe.

<br />
<b>Notice</b>: Trying to access array offset on value of type bool in <b>/var/lib/symcon/modules/TelegramMessenger/TelegramMessenger/module.php</b> on line <b>62</b><br />
<br />
<b>Notice</b>: Trying to access array offset on value of type bool in <b>/var/lib/symcon/modules/TelegramMessenger/TelegramMessenger/module.php</b> on line <b>62</b><br />
Telegram_SendImage(55639, ‚Es hat an der Tür geklingelt‘, ‚/var/lib/symcon/cams/44762.jpg‘,1063148723);
Telegram_SendImage(55639, ‚Es hat an der Tür geklingelt‘, ‚/var/lib/symcon/cams/44762.jpg‘, 1116533816);

@paresy @Dr. Niels habt ihr eventuell ne Idee, woran es liegen könnte?

Gesendet von meinem SM-G973F mit Tapatalk

Hallo,

ich bekomme in unregelmäßigen Abständen folgende Fehlermeldung.

16.12.2020, 23:21:04 | TimerPool            | TelegramMessenger (GetUpdates): <br />
<b>Notice</b>:  Undefined index: text in <b>/var/lib/symcon/modules/jmc-symcon-modules/TelegramMessenger/Telegram.php</b> on line <b>625</b><br />


IPS 5.5 auf Raspi

ansonsten ist mir nicht aufgefallen, dass Telegram nicht funktioniert.

Gruß

Oliver

P.S kann man ältere Meldungen in Telegram automatisch löschen, oder evtl. per Befehl aus IPS?