Telegram-Messages mit Emojis

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

L.N.
Beiträge: 23
Registriert: 28.04.2018, 14:28
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 9 Mal

Telegram-Messages mit Emojis

Beitrag von L.N. » 06.11.2020, 23:09

Meine CCU schickt mir via Telegram-API verschiedene Statusmeldungen auf's Handy - so weit, so unspektakulär.

Per HTML bzw. Markdown lassen sich die verschickten Nachrichten auch rudimentär formatieren (fett, kursiv, unterstrichen, ...); aber leider unterstützt der HTML Parser von Telegram m. W. keine Farbformatierung z. B. mit Color Tags - was bei mehreren verschiedenen CCU-(Status)-Nachrichten echt hilfreich wäre.

Ein (für mich) sinnvoller Ersatz zur "farblichen" Kennzeichnung bestimmter Telegram-Messages sind Emojis oder ähnliche Unicode-Symbole - auch die kann die CCU einfach via Telegram-API verschicken. Dazu muss der UTF8-Code des (oder der) Emojis einfach an passender Stelle in den Nachrichtentext eingebaut werden. "\x" muss dabei durch "%" ersetzt und die Message selbst als HTML-Nachricht verschickt werden (--> "... parse_mode=HTML ..."). Die UTF8-Codes gibt's z. B. hier --> https://apps.timwhitlock.info/emoji/tables/unicode. Beispiel:

Code: Alles auswählen

string emoji_code = "\xE2\x98\x9D";
string emoji_conv = emoji_code.Replace("\x","%");

string message    = "<b>Hinweis:</b>" # "\n" # emoji_conv # " Auch Emojis lassen sich einfach via Telegram-API verschicken.";
string chatid     = "xxxxxxxxx"; ! chat_id des Empfängers
string botAPI     = "xxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; ! API des eingerichteten Bots
message = message.ToUTF8();
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d parse_mode=HTML -d text='"#message#"' -d chat_id="#chatid);
Keine Raketenwissenschaft also - aber vielleicht hilfreich für den einen oder anderen.

L.N.
238 Programme, 233 Variablen, 93 Aktoren, 785 Kanäle

Benutzeravatar
winnirinni
Beiträge: 109
Registriert: 07.03.2017, 06:02
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Telegram-Messages mit Emojis

Beitrag von winnirinni » 07.11.2020, 13:08

Danke, funktioniert super!
Gruß
winnirinni

severendis
Beiträge: 22
Registriert: 05.12.2015, 18:12

Re: Telegram-Messages mit Emojis

Beitrag von severendis » 23.11.2021, 12:00

Hallo,

ich habe das mal versucht, will aber bei mir nicht funktionieren.
Bleiben die Gänsefüßchen vor und nach der Chat-ID und der API?

Danke !

L.N.
Beiträge: 23
Registriert: 28.04.2018, 14:28
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 9 Mal

Re: Telegram-Messages mit Emojis

Beitrag von L.N. » 23.11.2021, 21:54

Hallo severendis,

Chat-ID und Bot-API werden als Zeichenkette übergeben, deswegen sind die Anführungszeichen relevant. Achtung: In der Zeile mit dem CMD_EXEC-Aufruf sind mehrere unterschiedliche Anführungszeichen direkt nacheinander enthalten - hier mal rot und blau hervorgehoben und zwecks besserer Lesbarkeit vergrößert:

...text='"#message#"'...

Vielleicht hast Du da etwas übersehen.

Falls nicht: Was genau funktioniert denn bei Dir nicht? Kommt gar keine Nachricht bei Telegram an? Oder werden die Emojis nicht umgesetzt? Hast Du eine (Fehler)-Meldung im CUxD Syslog? Kannst Du reinen Text via CCU/CUxD an Telegram verschicken?

Hier eine simple Variante ohne Emojis und sonstige Formatierung:

Code: Alles auswählen

string message    = "Testnachricht";
string chatid     = "xxxxxxxxx"; ! chat_id des Empfängers
string botAPI     = "xxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; ! API des eingerichteten Bots
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#message#"' -d chat_id="#chatid);
Viel Erfolg!

Gruß L.N.
238 Programme, 233 Variablen, 93 Aktoren, 785 Kanäle

Aquaplex
Beiträge: 300
Registriert: 16.11.2011, 18:16
System: CCU und Access Point
Hat sich bedankt: 26 Mal
Danksagung erhalten: 8 Mal

Re: Telegram-Messages mit Emojis

Beitrag von Aquaplex » 25.04.2023, 09:01

Kann man die Emojis auch mit parse_mode "Markdown_V2" verschicken? Oder geht das nur mit HTML?
HmIP auf Pi3B+ mit RaspberryMatic und neuem Funk-Modul sowie 3 HAPs / Etwa 150 IP-Geräte

Tyfys
Beiträge: 550
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Telegram-Messages mit Emojis

Beitrag von Tyfys » 25.04.2023, 12:22

Ich mach das mit auch mit '&parse_mode=markdownv2
allerdings ohne CUxD, aber das sollte nicht relevant sein
Gruß
Harry

Aquaplex
Beiträge: 300
Registriert: 16.11.2011, 18:16
System: CCU und Access Point
Hat sich bedankt: 26 Mal
Danksagung erhalten: 8 Mal

Re: Telegram-Messages mit Emojis

Beitrag von Aquaplex » 25.04.2023, 12:34

Und wie genau ist die korrekte Syntax, dass die Telegram-API das Emoji darstellt? Im obigen (HTML)-Beispiel leuchtet mir das nicht so recht ein...
HmIP auf Pi3B+ mit RaspberryMatic und neuem Funk-Modul sowie 3 HAPs / Etwa 150 IP-Geräte

Tyfys
Beiträge: 550
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Telegram-Messages mit Emojis

Beitrag von Tyfys » 25.04.2023, 12:59

Code: Alles auswählen

WriteLine("Hallo Welt!");
string msg = "Test mit %E2%9A%A0";
var sysvarname ="TelegramBotToken";
string TOKEN = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvarname).Value();
var sysvarname ="TelegramBotChatIDs";
string CHATID = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvarname).Value();
string MESSAGE = msg.ToUTF8().Replace(" ", "%20");
string stdout;
string stderr;
system.Exec("wget --no-check-certificate -q -O - 'https://api.telegram.org/bot'"#TOKEN#"'/sendMessage?chat_id='"#CHATID#"'&parse_mode=markdownv2&text='"#MESSAGE , &stdout, &stderr);

Ergebnis:
Dateianhänge
emoji.png
Gruß
Harry

Aquaplex
Beiträge: 300
Registriert: 16.11.2011, 18:16
System: CCU und Access Point
Hat sich bedankt: 26 Mal
Danksagung erhalten: 8 Mal

Re: Telegram-Messages mit Emojis

Beitrag von Aquaplex » 25.04.2023, 13:20

OK, das hat mir geholfen. Bei mir war am Ende der Befehlszeile noch ein .UriEncode():

Code: Alles auswählen

system.Exec("wget --no-check-certificate -q -O /dev/null 'https://api.telegram.org/botXXX/sendMessage?chat_id=XXX&parse_mode=MarkdownV2&text='"#PushMsg.ToUTF8().UriEncode()#" &");
Wenn ich das .UriEncode() wegnehme, funktioniert das Emoji, ansonsten steht nur Text. Muss dieser Befehl bei MarkdownV2 gar nicht mehr stehen?

Und noch eine 2. Frage: Was bewirkt in deinem Skript der folgende Befehl:

Code: Alles auswählen

.Replace(" ", "%20")
Werden die regulären Leerzeichen durch Steuerzeichen (?) ersetzt?
HmIP auf Pi3B+ mit RaspberryMatic und neuem Funk-Modul sowie 3 HAPs / Etwa 150 IP-Geräte

Tyfys
Beiträge: 550
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Telegram-Messages mit Emojis

Beitrag von Tyfys » 25.04.2023, 13:42

Aquaplex hat geschrieben:
25.04.2023, 13:20
Und noch eine 2. Frage: Was bewirkt in deinem Skript der folgende Befehl:

Code: Alles auswählen

.Replace(" ", "%20")
Werden die regulären Leerzeichen durch Steuerzeichen (?) ersetzt?
Das ist quasi ein Mini-.UriEncode(), nur für die Leerzeichen-
Wenn man .UriEncode() auf die ganze Message anwendet, werden die Emoji leider wieder unleserlich für Telegram,laienhaft ausgedrückt.

schau dir die die Wirkungen an:

Code: Alles auswählen

string msg = "Test mit %E2%9A%A0";
WriteLine(msg.ToUTF8());
WriteLine(msg.ToUTF8().Replace(" ", "%20"));
WriteLine(msg.ToUTF8().Replace(" ", "%20").UriEncode());
Gruß
Harry

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“