NEWS
[Frage] Telegram botSendMessageId von gesendeter Nachricht bestimmen
-
Hi,
ich habe ein Skript, welches mir jede halbe Stunde eine Telegrambotschaft schickt, sobald die Luftfeuchtigkeit zu hoch ist.
Da damit der Chatverlauf überfüllt ist, möchte ich eine Botschaft senden und diese danach mit "editMessageText" editieren.Dafür benötige ich die korrekte botSendMessageId.
Die botSendMessageId kann leider nicht sofort nach dem Senden abgefragt werden (folgende Zeilen geben mir die vorherige MessageId zurück):
sendTo('telegram', 'Testbotschaft'); log(getState("telegram.0.communicate.botSendMessageId").val);
Leider funktioniert das Callback aus der Doku gar nicht:
sendTo('telegram', {text: 'Test message'}, function (res) { log(getState("telegram.0.communicate.botSendMessageId").val); });
Der Log-Befehl wird einfach nicht ausgeführt.
Mein Workaround wäre über setTimeout die botSendMessageId nach z.B. einer Sekunde abzufragen, dies birgt aber die Gefahr, dass es mal länger dauern kann und das dann nicht funktioniert.
Hat jemand hierzu einen Tip?
Bis dann
Christof -
@Christof-Kac sagte in [Frage] Telegram botSendMessageId von gesendeter Nachricht bestimmen:
sendTo('telegram', {text: 'Test message'}, function (res) { log(getState("telegram.0.communicate.botSendMessageId").val); });
versuche es mal so:
sendTo('telegram.0', {text: 'Test message'}, function (res) { log(getState("telegram.0.communicate.botSendMessageId").val); });
13:13:46.122 info javascript.3 script.js.Testscripte.Skript1: 1899
hatte wir neulich schon mal. sendTo('telegram oder sendTo('telegram.0
bei mir gehts nur mit "0" -
Hi,
das hat geklappt, d.h. das "log" wird ausgeführt.
Leider ist das Ergebnis die ID der vorherigen Botschaft, nicht der aktuellen.Das Callback scheint also nicht nach dem Senden der Botschaft ausgeführt werden.
Noch eine Idee?
Danke
Christof -
@Christof-Kac
ah ok, ich denke das hat was mit sync und async Abfragen zutun. Da bin ich dann raus.
Habe da auch nur die Idee mit dem TimeOut. -
Hi,
ich habe in der Zwischenzeit auch mal mit "async" und "await" gespielt.
Leider bringt das auch nichts, da anscheinend nur gewartet wird, bis das "sendTo" abgerbeitet ist, nicht aber, bis die Telegram Botschaft versendet wurde.
Gibt es noch eine andere Möglichkeit?
Das Problem mit setTimeout ist, dass ich 5 verschiedene Botschaften per Telegram verschicke. Und die Lösung mit setTimeout ist dafür nicht zuverlässig genug.Danke im voraus
Christof -
@Christof-Kac
bringt es was wenn du auf den Datenpunkt triggerst und den Wert wegschreibst?on({id: 'telegram.0.communicate.botSendMessageId', change: "ne"}, function (obj) { log(obj.state.val); setState('javascript.3.ID_1', obj.state.val) });