11. Januar 2025
Hast Du Dich jemals gefragt, wie man zum Beispiel automatisch aktuelle Wetterberichte am Telefon wiedergeben kann? In diesem Artikel zeige ich Dir als Beispiel für Unterrichtszwecke, wie ein kleines Python-Skript namens ***.py genau das als fiktives Beispiel ermöglicht. Es nutzt die Kraft von RSS-Feeds und Text-to-Speech-Diensten, um zum Beispiel einen Wetterbericht aus einer XML-Datei zu holen, in eine Audio-Datei zu verwandeln und direkt abzuspielen.
Wichtiger Hinweis zum Urheber- und Nutzungsrecht: Das hier vorgestellte Skript dient nur als Fallbeispiel für eine Programmierung mit Python und Asterisk. Das Skript greift auf den fiktiven Wetterbericht auf den ebenfalls fiktiven Link „https://www.***.**/***_rss/***.xml“ zu, dessen Urherber- und Nutzungsrechte beim ebenfalls fiktiven Anbieter liegen. Bevor Du tatsächlich dieses Skript einsetzen möchtest, solltest du dir vom Rechteinhaber sein Einverständnis geben lassen. Es dient auch als gutes Beispiel dafür, bei der Verbreitung und Verarbeitung von eventuell urheberrechtlich geschütztem Material vorsichtig zu sein.
Es gibt öffentliche und lizenzfreie RSS-Feeds (z. B. von Open-Source-Projekten), die für Tests verwendet werden können. Dies gibt eine rechtlich unbedenkliche Möglichkeit, das Skript auszuprobieren. Dieses hier vorgestellte Skript lässt sich nicht nur für Wetterdienste einsetzen. Das macht es noch vielseitiger. Das hier vorgestellte Skript kannst du zum Beispiel ChatGPT vorstellen und bitten es für lizenzfreie und öffentliche RSS-Feeds anzupassen.
Die Vorgehensweise dieses Skripts ist für Ubuntu Mate (Linux Debian) mit Asterisk 18.10.0 und Python 3.10 geeignet. Mit anderen Versionen wird es höchstwahrscheinlich nach meiner Erfahrung funktionieren, selbst auf einem älteren Raspberry Pi 3 mit Raspbian.
Was macht das Skript genau? Nachfolgend das Skript, dass ich ***.py genannt habe:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Asterisk AGI script to fetch and play the general weather report. Ensure the script and the required asterisk2_agi.py module are in the same directory. Make this file executable using: chmod +x ***.py Wichtiger Hinweis zum Urheber- und Nutzungsrecht: Das hier vorgestellte Skript dient nur als Fallbeispiel für eine Programmierung mit Python und Asterisk. Das Skript greift auf den fiktiven Wetterbericht auf "https://www.***.**/***_rss/***.xml" zu, dessen Urherber- und Nutzungsrechte beim ebenfalls fiktiven Rechteinhaber liegen. Bevor Du tatsächlich dieses Skript einsetzen möchtest, solltest du dir vom Rechteinhaber sein Einverständnis geben lassen. Es dient auch als gutes Beispiel dafür, bei der Verbreitung und Verarbeitung von eventuell urheberrechtlich geschütztem Material vorsichtig zu sein. """ import sys from asterisk2_agi import init_env, play_text_as_audio import feedparser def fetch_weather_from_rss(url): """ Fetches and parses weather data from the given RSS feed URL. - Returns a list of (title, description) tuples. """ try: feed = feedparser.parse(url) weather_items = [] for item in feed.entries: title = item.title description = item.description.strip() if hasattr(item, 'description') else "Keine Beschreibung verfügbar." weather_items.append((title, description)) return weather_items except Exception as e: sys.stderr.write(f"RSS-Fehler: {e}\n") sys.stderr.flush() return [] def main(): # Initialize the AGI environment init_env() # URL of the weather RSS feed (fiktives Beispiel) rss_url = "https://www.***.**/***_rss/***.xml" # Fetch weather data weather_data = fetch_weather_from_rss(rss_url) # Extract the "Allgemeine Wetterlage" general_weather = next((desc for title, desc in weather_data if "Allgemeine Wetterlage" in title), None) if general_weather: sys.stderr.write(f"General Weather: {general_weather}\n") sys.stderr.flush() # Convert the general weather report to audio and play it play_text_as_audio(general_weather, output_file="general_weather") else: sys.stderr.write("No 'Allgemeine Wetterlage' found in the RSS feed.\n") sys.stderr.flush() play_text_as_audio("Leider konnten keine Wetterdaten abgerufen werden.", output_file="error_weather") if __name__ == "__main__": main()
Das Skript wird als AGI-Skript in Asterisk verwendet, was bedeutet, dass es direkt in Dein Telefonsystem eingebunden werden kann. Es verwendet das Modul asterisk2_agi.py, das sehr viel Programmierarbeit erspart. Hier ist es genau erklärt. Bitte lese dir die Anleitung genau durch:
Text-to-Speech für Asterisk: Texte mit Google gTTS in Sprache umwandeln – 10. Januar 2025: Eine neue Ansage für deine Asterisk-Telefonanlage wird gebraucht, und schon beginnt die Suche nach der passenden Datei – oder noch schlimmer, du musst sie selbst aufnehmen. Das geht viel einfacher! Mit Google Text-to-Speech (gTTS) und ein bisschen Python kannst du Texte in natürlich klingende Sprachansagen umwandeln und direkt in Asterisk nutzen. – weiter – |
Sobald ein Anruf getätigt wird, startet das Skript ***.py und arbeitet wie folgt:
Erstmal die Vorbereitung: Zunächst wird die Asterisk-Umgebung initialisiert, damit das Skript mit Deinem Telefonsystem kommunizieren kann. Diese Initialisierung erfolgt durch das Modul asterisk2_agi, das sicherstellt, dass alles korrekt verläuft.
Wetterdaten aus dem RSS-Feed holen: Das Skript greift auf einen RSS-Feed von wetter.com zu, um aktuelle Wetterdaten abzurufen. Es verwendet das Python-Modul feedparser, um die XML-Daten zu analysieren. Dabei werden alle Einträge im Feed durchlaufen, und Titel sowie Beschreibung der Wetterberichte werden gesammelt. Der Fokus liegt auf dem Eintrag „Allgemeine Wetterlage“, der die zentrale Wetterzusammenfassung enthält.
Text zu Sprache umwandeln: Wenn die allgemeine Wetterlage gefunden wurde, wird diese mithilfe der Funktion play_text_as_audio in eine Audiodatei umgewandelt. Dazu wird der Text an einen Dienst wie Google Text-to-Speech (gTTS) gesendet, der eine MP3-Datei zurückliefert. Diese Datei wird in das WAV-Format konvertiert, um sie schließlich direkt über Dein Telefonsystem abzuspielen. Falls kein passender Wetterbericht gefunden wird, informiert Dich das Skript ebenfalls freundlich darüber.
Was musst Du vorher installieren? Damit das Skript reibungslos funktioniert, ist eine Vorbereitungen. Du musst nur das Modul feedparser installieren, damit das Skript die XML-Datei lesen kann:
pip install feedparser
Vorausgesetzt die asterisk2_agi.py funktioniert bereits, müsste das Skript funktionieren und den Wetterbericht für Deutschland mit eine weiblichen Stimme von Google aufsagen.
So rufst du das Skript in der extensions.conf von Asterisk auf: Wähle laut Beispiel die 555 und das Skript sagt den aktuellen Wetterbericht auf.
exten => 555,1,Noop(Anruf erfolgt von: "${CALLERID(name)}" <${CALLERID(num)}>) same => n,Noop(***.** AKTUELLES WETTER ANSAGEN, Sprache: DEUTSCH) same => n,Set(CHANNEL(language)=de) ; Deutsche Voice Prompts verwenden same => n,Answer() same => n,AGI(***.py) same => n,Hangup()