Übertragungen automatisieren
PanoPaper kann einer Website, einer Hausautomation wie Home Assistant, einem Chatdienst wie Slack oder Discord oder einem Kurzbefehl Bescheid geben, wenn eine Übertragung beginnt und endet - mit dem Link zum Ansehen. So kannst Du zum Beispiel auf Deiner eigenen Website eine Schaltfläche „Live ansehen“ zeigen oder im Kanal Deines Teams posten.
Richte es in Wenn Du live gehst ein: die Schaltfläche mit der Antenne am Ende der Dienst-Tabs in Einstellungen ▸ Übertragung. Ist etwas eingerichtet, ist die Antenne farbig, und zeigst Du auf die Schaltfläche, steht dort, was eingeschaltet ist.
Webhook und Kurzbefehl
- „Webhook aufrufen“ - PanoPaper schickt eine Nachricht an eine Webadresse: Deinen eigenen Server, eine Hausautomation wie Home Assistant oder einen Dienst, der Webhooks annimmt. Klicke auf „Festlegen …“, um die Adresse einzugeben oder einzusetzen, und auf „Bearbeiten …“, um sie zu ändern; sie bleibt in Deinem Schlüsselbund, denn eine solche Adresse enthält oft ein Geheimnis. „Testen“ schickt sofort eine Beispielnachricht und zeigt die Antwort des Servers. Antwortet der Server mit einer Webseite, ist die Adresse wohl eher eine Website als ein Webhook.
- „Kurzbefehl ausführen“ (Web Edition) - führt den Kurzbefehl aus, den Du darunter auswählst, mit derselben Nachricht als Eingabe: eine kleine JSON-Datei, die der Kurzbefehl als Wörterbuch lesen kann.
Wann Nachrichten verschickt werden
Eine Nachricht „live“ geht hinaus, sobald der Dienst Deinen Stream angenommen hat, und noch einmal, wenn ein Dienst dazukommt oder aufhört, während ein anderer weiterläuft; „stopped“ geht hinaus, wenn der letzte aufhört. Ein Klick auf Stream beenden in YouTube Studio beendet den Stream von PanoPaper nicht; deshalb wird nichts gesendet, bis Du die Übertragung in PanoPaper beendest.
Ist Dein YouTube Account verbunden, enthält eine Nachricht „live“ für YouTube auch die eigenen Links der Übertragung; PanoPaper wartet bis zu einer halben Minute darauf, dass YouTube das Video meldet, bevor es sie sendet. Während Du live bist, geht außerdem eine Nachricht „viewers“ hinaus, sobald sich die Zahl der Zuschauer auf YouTube ändert; PanoPaper schaut alle fünf Minuten nach.
Die Nachricht
PanoPaper sendet die Nachricht als HTTP POST mit dem Inhaltstyp application/json, in UTF-8, und mit dem User Agent PanoPaper/ gefolgt von seiner Version. Jede Antwort 2xx gilt als empfangen, und der Inhalt der Antwort wird nicht gelesen. Jeder Versuch wartet bis zu 15 Sekunden auf eine Antwort. Fällt das Netzwerk aus oder antwortet der Server mit 408, 429 oder 5xx, versucht PanoPaper es nach 5 Sekunden erneut und 30 Sekunden danach noch ein letztes Mal; bei anderen Antworten gibt es keinen weiteren Versuch, und „Testen“ versucht es nur einmal. Die Nachrichten gehen nacheinander hinaus, in der Reihenfolge, in der alles geschah, sodass ein „stopped“ nie vor seinem „live“ ankommt.
Eine Nachricht „live“ für YouTube und Facebook, mit verbundenem YouTube Account:
{
"event" : "live",
"services" : [
"YouTube",
"Facebook"
],
"watch" : "https://www.youtube.com/@yourchannel/live",
"videoId" : "AbCdEfGhIjK",
"video" : "https://www.youtube.com/watch?v=AbCdEfGhIjK",
"embed" : "https://www.youtube.com/embed/AbCdEfGhIjK",
"camera" : "Port Dome",
"time" : "2026-10-20T14:03:12Z",
"text" : "Port Dome ist live auf YouTube und Facebook: https://www.youtube.com/watch?v=AbCdEfGhIjK",
"content" : "Port Dome ist live auf YouTube und Facebook: https://www.youtube.com/watch?v=AbCdEfGhIjK"
}
| Feld | Typ | Inhalt |
|---|---|---|
event |
String | live, stopped, viewers oder test. Werte dieses Feld aus, nicht text, um zu erkennen, was passiert ist. |
services |
Array von Strings | Die Dienste: YouTube, Facebook und bei einem anderen Dienst der Name seines Servers, etwa live.twitch.tv (ein Name mit mehr als 20 Zeichen wird als „Eigener Server“ gesendet, in der Sprache von PanoPaper). Bei „live“ und „viewers“ jeder Dienst, der in diesem Moment auf Sendung ist; bei „stopped“ die, die auf Sendung waren; bei „test“ die, die bereit sind, live zu gehen. |
watch |
String (URL) | Der Link zum Zuschauen: die Live-Seite Deines Kanals, https://www.youtube.com/@<channel>/live - oder, mit verbundenem Account und ausgeschaltetem „Übertragung öffentlich machen“, die eigene Seite der Übertragung, denn eine nicht gelistete Übertragung steht nicht auf Deiner Live-Seite. Nur wenn YouTube unter den Diensten ist und Dein Kanal angegeben ist, und bei „test“ immer, wenn Dein Kanal angegeben ist. |
videoId |
String | Die Video-ID der Übertragung auf YouTube. Nur mit verbundenem YouTube Account, sobald YouTube das Video gemeldet hat: bei „live“, „viewers“ und „test“, nie bei „stopped“. |
video |
String (URL) | Die eigene Seite der Übertragung, https://www.youtube.com/watch?v=<videoId>. Kommt zusammen mit videoId. |
embed |
String (URL) | Die Übertragung zum Zeigen in einer Webseite, https://www.youtube.com/embed/<videoId>, als Adresse eines <iframe>. Kommt zusammen mit videoId. |
viewers |
Ganzzahl | Wie viele auf YouTube zuschauen, so wie YouTube sie zählt. Nur mit verbundenem YouTube Account und sobald PanoPaper nachgeschaut hat, etwa eine Minute nach Beginn der Übertragung: bei „viewers“ und, solange die Zahl bekannt ist, bei „live“ und „test“; nie bei „stopped“. |
camera |
String | Der Name der Kamera, wie PanoPaper ihn zeigt: die Kamera auf Sendung, bei „stopped“ die, die zuletzt auf Sendung war. Bei Kameras im Wechsel die, die beim Senden der Nachricht auf Sendung war - der Wechsel zur nächsten Kamera sendet keine Nachricht. |
time |
String | Wann die Nachricht erstellt wurde, in ISO 8601 und UTC, auf die Sekunde genau: 2026-10-20T14:03:12Z. |
text, content |
String | Zweimal derselbe Satz, in der Sprache von PanoPaper - bei „live“ mit dem eigenen Link der Übertragung, wenn er bekannt ist, sonst mit der Live-Seite Deines Kanals: text zeigt Slack als Nachricht, content zeigt Discord. Der Satz ist für Menschen gedacht, und sein Wortlaut kann sich ändern; lies also nichts daraus aus. |
Ein Feld ohne Wert wird weggelassen, nie leer oder als null gesendet. Die Felder können in beliebiger Reihenfolge kommen, und spätere Versionen von PanoPaper können Felder hinzufügen: Überspringe die, die Du nicht kennst.
Die Adresse geheim halten
PanoPaper signiert die Nachricht nicht und fügt kein eigenes Passwort hinzu. Damit nur PanoPaper an Deinen Server senden kann, steck ein Geheimnis in die Adresse selbst, etwa einen langen zufälligen Pfad oder ein Token im Query String - die Webhook-Adressen von Home Assistant zum Beispiel funktionieren schon so. Deshalb bleibt die Adresse in Deinem Schlüsselbund.
In einem Kurzbefehl
Ein Kurzbefehl bekommt dasselbe JSON als Datei, die nach dem Ereignis benannt ist, etwa „PanoPaper live.json“.
Auch Kurzbefehle und Siri können live gehen und eine Übertragung beenden.