Ich habe mich heute mal mit dem Telegram-BOT auseinandergesetzt und finde den richitg cool. Man kann damit relativ einfach Nachrichten generieren und an einen gewählten Verteiler verschicken. Ich weiß, dass es dazu auch ein Modul gibt. Ich bin allerdings ein Freund von kleinen übersichtlichen Skripten.
Hier also ein Skript, das von der Fritzbox die Sprachnachrichten zieht und diese zu Telegram weiterleitet.
Das Skript sieht wie folgt aus:
<?
#----------------------------------------------------------------
# Nachrichten auf dem AB aus der Fritzbox auslesen
# und über Telegramm-Bot versenden
# von Silberstreifen
# V1.0 vom 02.02.2019
#
#----------------------------------------------------------------
#----------------------------------------------------------------
# Basis-Daten
#----------------------------------------------------------------
$fritzbox_ip = 'fritz.box'; # muss ggf. angepasst werden
$password = 'ganzGeheim'; # muss angepasst werden
$SID_ID = 12345; # muss angelegt und angepasst werden
$SID = GetValue($SID_ID);
$url = 'https://api.telegram.org';
$bot = '23123123mmmm234sfodis3o422pop-34'; # muss erzeugt und angepasst werden
$chat_IDs = array(
123456789, # muss angepasst werden
987654321 # muss angepasst werden
);
$wav_file = '/var/lib/symcon/webfront/user/rec.wav';
$last_EX = IPS_GetScript($_IPS['SELF'])['ScriptExecuted']*2 - time();
#----------------------------------------------------------------
# Doppelausführung verhindern
#----------------------------------------------------------------
$Thread = 0;
foreach (IPS_GetScriptThreadList () as $lfdNr => $Nr) {
if (IPS_GetScriptThread ($Nr)['ScriptID']==$_IPS['SELF'])$Thread++;
}
if($Thread>2) return;
#----------------------------------------------------------------
# In FritzBox einloggen und Daten holen
#----------------------------------------------------------------
if ($SID == ""){
$ch = curl_init($fritzbox_ip.'/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->SID != '0000000000000000'){
$SID = $session_status_simplexml->SID;
}else{
$challenge = $session_status_simplexml->Challenge;
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua");
$sendlogin = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($sendlogin);
if ($session_status_simplexml->SID != '0000000000000000'){
$SID = $session_status_simplexml->SID;
}else{
echo "Fehler: Login fehlgeschlagen";
return;
}
}
curl_close($ch);
SetValue($SID_ID, (string)$SID);
}
#----------------------------------------------------------------
# Daten holen
#----------------------------------------------------------------
$ch = curl_init($fritzbox_ip.':49000/tamcalllist.lua');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "sid=$SID&tamindex=0");
$daten = curl_exec($ch);
curl_close($ch);
#----------------------------------------------------------------
# SID noch gültig?
#----------------------------------------------------------------
if ($daten == ""){
SetValue($SID_ID, "");
IPS_RunScript($_IPS['SELF']);
return;
}
#----------------------------------------------------------------
# Daten auswerten
#----------------------------------------------------------------
$anrufe = simplexml_load_string($daten)->Message;
foreach($anrufe as $anruf){
$date = DateTime::createFromFormat('d.m.y H:i', $anruf->Date)->getTimestamp();
if($date - $last_EX < 0)continue;
$title = "Nachricht von ".$anruf->Name;
if($anruf->Name == "")$title .="?";
$caption = "Telefon-Nr: ".$anruf->Number." - Anrufzeit: ".$anruf->Date;
#----------------------------------------------------------------
# wav-Datei holen und temporär speichern
#----------------------------------------------------------------
$ch_wav = curl_init($fritzbox_ip.':49000/'.$anruf->Path);
curl_setopt($ch_wav, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch_wav, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt($ch_wav, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch_wav, CURLOPT_POSTFIELDS, "sid=$SID");
$wav = curl_exec($ch_wav);
file_put_contents ($wav_file, $wav);
curl_close($ch_wav);
#----------------------------------------------------------------
# Nachricht in Telegram senden
#----------------------------------------------------------------
foreach($chat_IDs as $chat_ID){
$message = $url.'/bot'.$bot.'/sendaudio -F chat_id='.$chat_ID.' -F caption="'.$caption.'" -F audio="@'.$wav_file.'" -F title="'.$title.'" -F parse_mode="HTML"';
exec("curl ".$message);
}
#----------------------------------------------------------------
# wav-Datei löschen
#----------------------------------------------------------------
exec('rm '.$wav_file);
}
?>
Das ganze in ein Skriptfile kopieren. Einen Skripttimer auf eine Minute einstellen und eine Stringvariable für die SID anlegen.
Einen Telegram-BOT anzulegen ist sehr einfach. Dazu gibt es reichlich Video-Tutorials (auch auf deutsch) im Netz.
Nach Anlegen des BOTs einfach die BOT-ID hier reinkopieren. Dann dem BOT eine Nachricht senden und die Chat-ID hier ebenfalls anpassen…
…und fertig.
Viel Spaß damit
Jürgen