OneTwoApps App Ratings & ReviewsEinrichten

Einrichten · Schritt für Schritt

Von GitHub bis zum täglichen Lauf. Einmal einrichten, dann läuft es.

Diese Seite führt durch die Einrichtung: das Repository holen, prüfen, was der Rechner braucht, installieren, die Zugänge bei Apple und Google beschaffen, die Apps in die Konfiguration eintragen, den täglichen Lauf auf einem Server einrichten und das Menü am Arbeitsplatz benutzen. Alle Einstellungen gehen am bequemsten in der Einrichtung im Browser. Zwei Erweiterungen sind optional und haben eigene Seiten: die KI-Analyse und die Benachrichtigung nach dem Tageslauf. Am Ende stehen alle Seiten und Dokumente auf einen Blick.

1Abhängigkeit (cryptography)
3.10Python oder neuer
0Server, Datenbank, Cloud
1 hfür die Server-Einrichtung

1 · GitHub

Öffentlich, kostenlos, ohne Konto. Holen, nicht installieren.

Das Werkzeug liegt als Quelltext auf GitHub. Du holst den Ordner auf deinen Rechner, mehr ist es nicht. Updates kommen mit git pull.

A

Mit Git

Der übliche Weg. Git ist auf dem Mac in den Command Line Tools enthalten, unter Linux ein Paket, unter Windows „Git for Windows“ (bringt Git Bash gleich mit).

git clone https://github.com/drapatzc/app-ratings-reviews-online.git
cd app-ratings-reviews-online

github.com/drapatzc/app-ratings-reviews-online

B

Ohne Git

Auf GitHub „Code → Download ZIP“, entpacken, Ordner an einen festen Platz legen. Updates dann wieder per ZIP; Daten und Konfiguration liegen in eigenen Ordnern und überstehen das.

# bleibt bei Updates erhalten:
config/config.json   data/   reports/   keys/
!

Was nie im Repository liegt

Das öffentliche Repository enthält nur Code und Dokumentation. Deine Konfiguration, Schlüssel, Daten und Berichte entstehen lokal und sind per .gitignore ausgeschlossen. Wer den täglichen Lauf in GitHub Actions betreiben will, braucht dafür ein eigenes privates Repository, weil data/ Rezensionstexte enthält.

# .gitignore (Auszug)
config/config.json
*.p8   keys/   data/   reports/   backups/

2 · Voraussetzungen

Python, eine Shell, ausgehendes HTTPS. Das war’s.

Kein Server, keine Datenbank, kein Node, kein Docker. Die einzige Abhängigkeit (cryptography, für die Signatur bei Apple und Google)1 installiert das Skript selbst in eine lokale Python-Umgebung.

1 Die Abhängigkeit ist das Python-Paket cryptography, eine verbreitete quelloffene Bibliothek für Verschlüsselung und Signaturen. Das Skript braucht sie nur, um die Anmeldung bei Apple und Google zu signieren (Apple: p8-Schlüssel, ES256; Google: Dienstkonto-Schlüssel, RSA); das kann Python ohne Zusatzpaket nicht. Alles andere kommt aus der Python-Standardbibliothek. Installiert wird sie einmalig in eine lokale Umgebung, läuft rein lokal und telefoniert nicht nach Hause.

BetriebssystemPflicht

macOS, Linux (Debian/Ubuntu, RHEL) oder Windows. Für den Dauerbetrieb ist Linux mit systemd die ruhigste Wahl; ein Mac mini oder ein Windows-Rechner gehen auch.

Python 3.10 oder neuerPflicht

python3 --version. Auf dem Mac installiert macOS Python beim ersten Aufruf mit den Command Line Tools; unter Linux dazu python3-venv und pip; unter Windows die normale Installation von python.org.

Bashfür die Skripte

Die Skripte ./ratings.sh, ./menu.sh und ./shortmenu.sh brauchen Bash. Unter Windows Git Bash oder WSL; ohne Bash gehen die Python-Programme direkt: python menu.py, python collect.py.

Ausgehendes HTTPSPflicht

Zu api.appstoreconnect.apple.com, itunes.apple.com und Apples Download-Hosts für Analytics-Berichte; mit Android zusätzlich androidpublisher.googleapis.com, oauth2.googleapis.com, playdeveloperreporting.googleapis.com. Proxy setzen, falls nötig.

Platz und Backupwenige hundert MB

data/ wächst langsam (JSON). Ein Backup von data/, config/ und keys/ einplanen; ./ratings.sh backup packt die Daten.

Zeitplanerfür den täglichen Lauf

systemd-Timer oder cron (Linux), launchd (Mac), Aufgabenplanung (Windows) oder GitHub Actions. Der tägliche Lauf ist wichtig: Google liefert Rezensionen nur sieben Tage rückwirkend.

Zugängeje Kunde

Ein Apple-API-Schlüssel je Entwicklerkonto; bei Android-Apps ein Google-Dienstkonto je Play Console. Wie du sie bekommst, steht im Abschnitt Apple und Google.

Optional: Webserverfür den Bericht per URL

nginx mit Passwort oder IIS, wenn der Bericht im Firmennetz per Adresse erreichbar sein soll. Sonst wird die HTML-Datei oder die Markdown-Zusammenfassung verteilt.

3 · Installieren

Drei Befehle, oder einer: Das Menü richtet die Umgebung selbst ein.

Die Skripte legen beim ersten Start die Python-Umgebung .venv an und installieren die eine Abhängigkeit. Wer es von Hand mag, macht es so:

1

Umgebung und Abhängigkeit

Einmalig. Danach nie wieder source nötig, weil ./ratings.sh und ./menu.sh die Umgebung selbst benutzen.

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Windows (PowerShell): py -3 -m venv .venv und .venv\Scripts\pip install -r requirements.txt.

2

Konfiguration anlegen

Die Beispieldatei kopieren und nur für dich lesbar machen. Was hinein gehört, steht in den Abschnitten Zugänge und Konfiguration.

cp config/config.example.json config/config.json
chmod 600 config/config.json
mkdir -p keys && chmod 700 keys
3

Selbsttest

Installiert beim ersten Mal pytest und lässt die Tests laufen, ohne Netz. Grün heißt: Python, Umgebung und Code passen zusammen. Dann die Zugänge prüfen, ohne etwas zu speichern.

./ratings.sh test
./ratings.sh dry-run

Auf einem Server: eigener Benutzer ohne Anmeldung (sudo useradd --system --create-home --shell /bin/bash ratings), Projekt in dessen Home, Rechte wie oben. Die ausführliche Anleitung mit allen Varianten steht im Repository in EINRICHTUNG.md und BETRIEB.md.

4 · Zugänge bei Apple und Google

Was du bei Apple und Google beachten musst.

Das ist der organisatorische Engpass, nicht die Technik. Jeder Kunde legt in seinem eigenen Konto einen lesenden Zugang an und übergibt ihn. Am besten verschickst du je Kunde eine kurze Anforderung mit genau diesen Punkten.

Apple · App Store Connect

So geht’s
  • Team-Schlüssel erzeugen: App Store Connect → Benutzer und Zugriff → Integrationen → App Store Connect API. Das darf nur der Account-Inhaber oder ein Admin.
  • Rolle „App-Manager“ für Rezensionen, Stabilität und TestFlight. Für Rezensionen allein reicht „Kundensupport“.
  • Drei Dinge übergeben: die Datei AuthKey_<KeyID>.p8, die Issuer ID und die Key ID. Die Key ID steckt im Dateinamen.
  • App-IDs notieren: die numerische Apple-ID je App (App-Informationen, oder aus der Store-URL id1234567890).
  • Stabilität: je App einmalig eine Analytics-Berichtsanfrage mit ONGOING anlegen. Daten gibt es erst ab diesem Tag, also früh einrichten.
Typische Fehler
  • „Individual Key“ statt Team-Schlüssel. Der persönliche Schlüssel sieht nur, was der Benutzer sieht, und hängt an seinem Konto.
  • Die .p8 nur einmal. Apple zeigt die Datei genau einmal zum Download. Verloren heißt: neuen Schlüssel erzeugen, alten widerrufen.
  • Rolle zu niedrig. HTTP 403 bei Stabilität oder TestFlight heißt fast immer: keine App-Manager-Rolle.
  • HTTP 401: Issuer ID, Key ID und .p8 passen nicht zusammen, oder der Schlüssel wurde widerrufen.
  • Keine Berichtsanfrage: „Keine laufende Analytics-Berichtsanfrage“ heißt, der ONGOING-Auftrag fehlt in App Store Connect.

Google · Play Console

So geht’s
  • Ein Cloud-Projekt (deins, eines reicht für alle Kunden), darin je Kunde ein Service Account mit JSON-Schlüssel.
  • APIs aktivieren: „Google Play Android Developer API“, für Absturzraten „Google Play Developer Reporting API“.
  • Der Kunde lädt die Service-Account-E-Mail ein: Play Console → Nutzer und Berechtigungen, mit „App-Informationen anzeigen (nur lesend)“, „Rezensionen anzeigen“, optional „Statistiken zur App-Qualität“.
  • Paketnamen notieren: de.kasse.app, aus der Play-Store-URL (id=…).
  • Ältere Rezensionen: einmalig als CSV aus der Play Console exportieren und mit ./ratings.sh import-csv einlesen.
Typische Fehler
  • Nur sieben Tage. Google liefert Rezensionen nur eine Woche rückwirkend. Ein ausgefallener täglicher Lauf hinterlässt eine Lücke, die nie wieder gefüllt wird.
  • Bis 48 Stunden Verzögerung. Eine Einladung in der Play Console wirkt nicht sofort. Ein 401 am ersten Tag heißt oft nur: warten.
  • Falsches JSON. 400 oder 401 beim Token: Service-Account-Datei vertauscht oder der Account ist noch nicht eingeladen.
  • Keine Android-Apps? Dann bei der Plattform "enabled": false setzen oder sie weglassen. Fehlende Google-Zugangsdaten sind dann in Ordnung.
  • Stabilität für Google ist nicht umgesetzt; Abstürze und Sitzungen gibt es nur für Apple.

Schlüsseldateien gehören in keys/ mit chmod 600, zum Beispiel keys/kasse-nord.p8 und keys/kasse-nord-google.json. Alternativ als Umgebungsvariable: privateKeyEnvironmentVariable (Inhalt = Pfad oder Schlüsseltext) und serviceAccountEnvironmentVariable. Nie in die Konfiguration: das Programm lehnt Felder wie apiKey ab.

5 · Konfiguration

Ein Kunde, seine Zugänge, seine Apps. Am einfachsten in der Einrichtung im Browser.

Ohne die Datei zu kennen: ./ratings.sh admin (Kurzmenü 7) öffnet eine Seite nur auf diesem Rechner, die jede Einstellung als Frage in Klartext stellt: Kunden, Apps, Zugänge, Wettbewerber, KI mit drei Modellen (Analyse, KI-Anfragen, KI-Crashanalyse) und den Sicherheitsschaltern der Crash-Analyse, Benachrichtigung, Ampel, Themen, Fragen und Ereignisse, dazu je Reiter und Bereich des Berichts ein Schalter, der für Bildschirm und Ausdruck zugleich gilt. Jede Eingabe wird sofort mit denselben Regeln geprüft wie beim Abruf, vor dem Speichern kommt die alte Fassung in die Sicherung, und danach sagt die Seite, welche laufenden Skripte neu gestartet werden müssen. Alles dazu, mit Sicherheit und Animationen: Einrichtung im Browser. Wer lieber in der Datei arbeitet: so sieht sie aus.

Ein Kunde ist ein Eintrag in customers mit eigenen Zugangsdaten und seiner App-Liste. Jede App hat je Plattform einen Block. Die id wird zum Ordnernamen unter data/ und darf später nicht mehr geändert werden.

1

Das Grundgerüst

So sieht ein Kunde mit zwei Apps aus. Die Schlüssel liegen als Dateien in keys/; Google ist bei der zweiten App ausgeschaltet.

{
  "schemaVersion": 1,
  "settings": { "minRefreshMinutes": 30, "fullSyncIntervalDays": 30, "overlapDays": 7, "logLevel": "INFO" },
  "customers": [
    {
      "id": "kasse-nord", "name": "Krankenkasse Nord", "enabled": true, "countries": ["DE"],
      "credentials": {
        "apple":  { "issuerId": "11111111-2222-3333-4444-555555555555", "keyId": "ABC123DEFG",
                    "privateKeyFile": "./keys/kasse-nord.p8" },
        "google": { "serviceAccountFile": "./keys/kasse-nord-google.json" }
      },
      "apps": [
        { "id": "kasse-nord-app", "name": "Kasse Nord App", "enabled": true, "audience": 250000, "platforms": {
            "apple":  { "enabled": true, "appId": "1234567890" },
            "google": { "enabled": true, "packageName": "de.kassenord.app", "languages": [] } } },
        { "id": "kasse-nord-bonus", "name": "Kasse Nord Bonus", "enabled": true, "platforms": {
            "apple":  { "enabled": true, "appId": "1234567891" },
            "google": { "enabled": false, "packageName": "de.kassenord.bonus", "languages": [] } } }
      ]
    }
  ]
}
2

Neue App eintragen

Ein weiterer Block in apps: eigene id (Buchstaben, Ziffern, . _ -), Name, Apple-ID und Paketname. Beim nächsten Lauf holt das Programm alles ab defaultStartDate. Ein neuer Kunde ist ein weiterer Block in customers mit eigenen Zugangsdaten.

./ratings.sh apps
./ratings.sh dry-run --customer kasse-nord

apps zeigt die Liste, dry-run prüft die Zugänge, ohne zu speichern. Ein Tippfehler in einer App-ID fällt dort als 404 auf.

Muss ich noch etwas beachten?

IDsNie wieder ändern

customers[].id und apps[].id bestimmen die Ordnernamen unter data/customers/. Eine Änderung trennt die Historie von den neuen Daten.

ZugängeJe Kunde eigene

Apple-Schlüssel hängen am Entwicklerkonto. Veröffentlichen mehrere Kunden unter demselben Konto (Agentur), reicht ein Schlüssel, der bei jedem eingetragen wird. Ein Google-Dienstkonto kann in mehrere Play Consoles eingeladen werden.

PlattformWeglassen ist erlaubt

Keine Android-App: google auf "enabled": false oder ganz weglassen. Nötig und fehlend: das Programm lehnt die Konfiguration ab, bevor es etwas abruft.

LänderSparsam wählen

countries je Kunde ist Pflicht (mindestens ein Land) und gilt für Store-Note, Rezensionen und Wettbewerber; jedes Land kostet je App und Lauf eine Anfrage, für den deutschen Markt reicht ["DE"]. languages bei Google leer lassen (alle).

Zielgruppeaudience ist optional

Größe der Zielgruppe je App, etwa die Zahl der Versicherten. Nur damit rechnet der Bericht „Downloads je 1000 der Zielgruppe“. Ohne Angabe bleibt die Spalte leer, geschätzt wird nie.

Rhythmussettings kann bleiben

minRefreshMinutes 30: nach einem Erfolg keine Anfrage. fullSyncIntervalDays 30: alle 30 Tage ein vollständiger Abruf, der Änderungen alter Rezensionen erkennt. overlapDays 7: Sicherheitsüberlappung bei Apple.

Themenconfig/themen.json

Die Wortlisten für „Themen und Wörter“ im Bericht, versioniert und ohne Geheimnisse. Je Thema id, de, en, Art und Suchwörter; frei erweiterbar, die KI schlägt Ergänzungen vor.

Fragenconfig/fragen.json

Zwanzig vorbereitete Fragen für den Reiter „KI-Anfragen“ im Bericht, frei änderbar.

KIBlock ai, optional

Ein Anbieter für alle Kunden, Schlüssel als Umgebungsvariable. Alles dazu auf der Seite KI-Analyse einrichten.

MarktListe competitors je Kunde, optional, nur Apple

Fremde Apple-Apps neben den eigenen auswerten, ohne Zugang: App-ID aus dem Store-Link, Länder, fertig. Quelle sind der öffentliche Apple-Feed und der iTunes Lookup; ohne Einträge ändert sich nichts. Alles dazu auf der Seite Wettbewerber einrichten.

PostBlock notify, optional

E-Mail, Slack, Teams oder Webhook nach dem Tageslauf, nur bei neuen 1–2 ★, Ampelwechsel oder Absturzsprung. Passwort und Webhook-Adresse als Umgebungsvariable, Link über settings.reportUrl. Alles dazu auf der Seite Benachrichtigung einrichten.

FeldBedeutungStandard
settings.defaultStartDateab wann ein vollständiger Abruf Rezensionen holt (Erstellungsdatum)null (alles)
settings.requestTimeoutSeconds, maxRetriesTimeout und Wiederholungen bei 429, 5xx und Netzfehlern30, 3
settings.fetchAppleVersionsVersionsliste je App holen (für „Was ein Update verändert hat“)true
settings.logLevelDEBUG, INFO, WARNING, ERROR; Log in data/logs/collect.logINFO
credentials.apple.privateKeyFile oder privateKeyEnvironmentVariablePfad zur .p8 oder Name der Variable (Pfad oder Schlüsseltext)eins von beiden
credentials.google.serviceAccountFile oder serviceAccountEnvironmentVariablePfad zum JSON oder Name der Variablenur mit Android
platforms.apple.appIdnumerische Apple-ID der AppPflicht
platforms.google.packageNamePaketname der Android-AppPflicht, wenn aktiv

6 · Start per Skript · täglicher Lauf auf einem Server

Ein Befehl für jeden Zeitplaner: ./ratings.sh daily

Holt Rezensionen, Stabilität, Store-Kennzahlen und Testbetrieb, läuft die KI mit, wenn ein Anbieter aktiv ist, erzeugt Bericht, Markdown und ZIP, ohne Browser. Höchstens ein erfolgreicher Lauf pro Kalendertag; ein zweiter Aufruf beendet sich sofort ohne Anfrage. Ein gescheiterter Lauf sperrt den Tag nicht.

A

Linux · systemd (empfohlen)

Ein Timer um 06:30 mit etwas Zufall, ein oneshot-Dienst, der als Benutzer ratings läuft. Umgebungsvariablen (Schlüssel, KI) in einer Datei, die nur dieser Benutzer lesen kann. Persistent=true holt verpasste Läufe nach.

# /etc/systemd/system/ratings.service
[Service]
Type=oneshot
User=ratings
WorkingDirectory=/home/ratings/app-ratings-reviews
EnvironmentFile=-/home/ratings/.config/ratings.env
ExecStart=/home/ratings/app-ratings-reviews/ratings.sh daily

# /etc/systemd/system/ratings.timer
[Timer]
OnCalendar=*-*-* 06:30:00
RandomizedDelaySec=10m
Persistent=true

sudo systemctl enable --now ratings.timer
B

Mac · cron oder launchd

Auf einem Mac mini, der durchläuft. cron ist die kürzeste Variante; launchd holt verpasste Läufe nach dem Ruhezustand nach (Vorlage in BETRIEB.md).

# crontab -e, täglich 07:15
15 7 * * * cd ~/Git-Home/app-ratings-reviews \
  && ./ratings.sh daily >> logs-daily.txt 2>&1

Der Mac muss um diese Zeit wach sein: Systemeinstellungen → Energie, Ruhezustand aus oder Zeitplan zum Aufwachen.

C

Windows · Aufgabenplanung

Ohne Bash werden die Python-Programme direkt aufgerufen; eine kleine daily.cmd übernimmt das, die Aufgabenplanung startet sie täglich und holt Verpasstes nach.

REM daily.cmd
cd /d C:\ratings\app-ratings-reviews
.venv\Scripts\python collect.py --dataset all --once-per-day
.venv\Scripts\python report.py --zip
.venv\Scripts\python notify.py

# PowerShell, einmalig
Register-ScheduledTask -TaskName "App-Bewertungen" …
D

Ohne Server · GitHub Actions

Nur in einem privaten Repository, weil data/ Rezensionstexte enthält. Die Daten leben in einem Branch ci-data, der Schlüssel als Secret. Der Workflow .github/workflows/daily.yml liegt bei; Ergebnis ist ein Artefakt mit Bericht, Markdown und ZIP statt einer URL.

# Secrets: APPLE_PRIVATE_KEY, CONFIG_JSON,
# mit Benachrichtigung RATINGS_SMTP_PASSWORD …
git switch --orphan ci-data
git commit --allow-empty -m init
git push origin ci-data
E

Bericht per URL

reports/index.html ist eine einzelne Datei ohne externe Abhängigkeiten. nginx mit Basic Auth oder hinter dem Firmen-VPN; unter Windows IIS mit Windows-Authentifizierung oder eine Netzwerkfreigabe. Mit --customer entsteht ein Bericht nur für einen Kunden. Diese Adresse gehört als reportUrl in die Konfiguration, dann steht sie in jeder Benachrichtigung.

./ratings.sh report --customer kasse-nord
# nginx: root …/reports; auth_basic

Der Fragedienst der KI wird auf dem Server nicht gestartet; der bereitgestellte Bericht zeigt gespeicherte Antworten.

F

Betrieb und Wartung

Was im Alltag anfällt, meist nichts:

Lief der Abruf?   ./ratings.sh status
Fehler suchen     data/logs/collect.log
Außer der Reihe   ./ratings.sh force
Backup            ./ratings.sh backup · backups · restore ZIP
Ereignis          ./ratings.sh event add --date … --title "…"
Meldungsverlauf   ./ratings.sh notify --history
Neue App          config.json, nächster Lauf
Update            git pull && ./ratings.sh test
Benachrichtigung  ./ratings.sh notify --test

Der Apple-Schlüssel läuft nicht ab, kann aber widerrufen werden; dann meldet der Lauf HTTP 401.

Die Filme

Wenn alles läuft: zwei Filme mit Sprecher.

Beide stehen auf der Startseite, mit Untertiteln.

Der Bericht · 7 MinutenVom ersten Warnsignal bis zur Zeile im Code: Ampel, Diagramme, Wettbewerber, KI-Fragen und Crash-Analyse an einem Fall.Film ansehen → Einrichtung im Browser · 3½ MinutenNeue App, Schlüssel, Wettbewerber, KI-Modelle, Ampelregeln, Themen und Reiter: einmal eingerichtet, läuft es jeden Tag.Film ansehen →

8 · Alle Seiten und Dokumente

Was es sonst noch gibt: eigene Seiten und die Dokumente im Repository.

Diese Anleitung deckt den Grundbetrieb ab. Alles Optionale hat eine eigene Seite, alles Technische ein Dokument im Repository.

KI-Analyse einrichtenoptional

Ein Sprachmodell deiner Wahl liest die Rezensionen: Zusammenfassung je App, Stimmung, Maßnahmen, Antwortentwürfe, Fragen an die Daten. Konto, Schlüssel, Konfiguration, Test, Modelle und Preise.

Benachrichtigung einrichtenoptional

E-Mail, Slack, Teams oder Webhook nach dem Tageslauf, nur bei neuen 1–2-★-Rezensionen, Ampelwechsel oder Absturzsprung. Auslöser, Beispielnachricht, Zugänge, Konfiguration, Test, Datenschutz.

Wettbewerber einrichtenoptional · nur Apple

Fremde Apple-Apps mit derselben Ampel, denselben Themen und derselben KI neben den eigenen. Öffentlicher Apple-Feed, kein Zugang nötig, nur Apple. Einrichtung, Grenzen, Datenschutz.

Einrichtung im Browserempfohlen

Jede Einstellung als Frage in Klartext, sofort geprüft, mit Sicherung gespeichert, nur auf diesem Rechner. Alle Schritte, Reiter und Bereiche des Berichts, Speichern, Sicherheit.

KI-Crashanalyseoptional · mit KI

Crash-Reports aus Apple und Android: Ursache, Stelle und Lösung nur mit Beleg, persönliche Daten vorher ersetzt, Projektordner je Anfrage. Ablauf, Datenschutz, Prompts im Wortlaut.

StartseiteÜberblick

Was das Skript tut, was die Stores vergessen, der Bericht mit Bildern, die neunzehn Diagramme, Einrichten in fünf Minuten.

Impressum und Datenschutzrechtliches

Anbieter dieser Homepage und was beim Besuch gespeichert wird (nichts außer Zugriffsprotokollen des Webservers). Der Bericht selbst bringt eine eigene Datenschutzerklärung mit.

GitHubQuelle

Der Code, kostenlos und öffentlich. Dort liegen auch alle Dokumente: README.md (Befehle, Konfiguration, Datenschema), ANLEITUNG.md (Bedienung), BETRIEB.md (Zeitplan je Betriebssystem, CI), EINRICHTUNG.md (Server für mehrere Kunden, Checkliste), KI.md und BENACHRICHTIGUNG.md (die Kurzfassungen der beiden Erweiterungen), TECHNIK.md (Schnittstellen, Dateien, Fehlerklassen).

Hilfe im Programmüberall

Taste H in jedem Menü, ./ratings.sh help auf der Kommandozeile, und im Bericht oben rechts „Hilfe“ mit Einrichtung, Zugängen, Befehlen, KI und Benachrichtigung auf einer Seite.