直播自動化
直播開始和結束時,PanoPaper 可以通知網站、Home Assistant 等智慧家庭自動化、Slack 或 Discord 等聊天服務,或捷徑,並附上觀看連結。例如,你可以在自己的網站上顯示「觀看直播」按鈕,或在團隊的頻道中發文。
請在開始直播時中設定:也就是「設定」▸「直播」中服務標籤頁尾端有天線的按鈕。設定了任何項目時,天線會以彩色顯示,將指標移到按鈕上即可看到開啟了哪些項目。
Webhook 和捷徑
- 「呼叫 Webhook」 - PanoPaper 會傳送訊息到一個網址:你自己的伺服器、Home Assistant 等智慧家庭自動化,或接受 Webhook 的服務。按一下「設定⋯」來輸入或貼上位址,按一下「編輯⋯」來更改;位址會保存在你的鑰匙圈中,因為這類位址含有密鑰。「測試」會立即傳送一則範例訊息,並顯示伺服器的回應。如果伺服器以網頁回應,該位址很可能是網站而不是 Webhook。
- 「執行捷徑」(網頁版) - 以同一則訊息作為輸入,執行你在下方選擇的捷徑:一個小型 JSON 檔案,捷徑可將其讀取為辭典。
何時送出訊息
服務接受你的串流後,就會送出「live」訊息;之後每當有服務加入,或在其他服務仍在直播時有服務離開,都會再送出一次;最後一個服務停止時會送出「stopped」。在 YouTube Studio 中按一下結束直播並不會停止 PanoPaper 的串流,因此在你於 PanoPaper 中停止直播之前,不會送出任何訊息。
連結 YouTube 帳號後,YouTube 的「live」訊息還會包含直播本身的連結;PanoPaper 最多會等待半分鐘,讓 YouTube 回報影片,然後再送出訊息。直播期間,每當在 YouTube 上觀看的人數變動時,也會送出「viewers」訊息;PanoPaper 每五分鐘查看一次。
訊息內容
PanoPaper 以 HTTP POST 傳送訊息,內容類型為 application/json,採用 UTF-8 編碼,使用者代理為 PanoPaper/ 加上其版本號碼。任何 2xx 回應都視為已收到,回應的內文不會被讀取。每次嘗試最多等待 15 秒的回應。網路連線失敗,或伺服器回應 408、429 或 5xx 時,PanoPaper 會在 5 秒後再試一次,30 秒後再試最後一次;其他回應不會重試,「測試」只會嘗試一次。訊息會依事情發生的順序逐一送出,因此「stopped」絕不會比它的「live」先到。
連結 YouTube 帳號後,YouTube 和 Facebook 的「live」訊息範例:
{
"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 正在 YouTube和Facebook 上直播:https://www.youtube.com/watch?v=AbCdEfGhIjK",
"content" : "Port Dome 正在 YouTube和Facebook 上直播:https://www.youtube.com/watch?v=AbCdEfGhIjK"
}
| 欄位 | 類型 | 內容 |
|---|---|---|
event |
字串 | live、stopped、viewers 或 test。要判斷發生了什麼事,請使用此欄位,而不是 text。 |
services |
字串陣列 | 服務:YouTube、Facebook,其他服務則是其伺服器的名稱,例如 live.twitch.tv(超過 20 個字元的名稱會以 PanoPaper 的語言傳送為「自訂伺服器」)。在「live」和「viewers」中,是當下所有正在直播的服務;在「stopped」中,是先前正在直播的服務;在「test」中,是已準備好開始直播的服務。 |
watch |
字串(URL) | 觀看用的連結:你頻道的直播頁面,https://www.youtube.com/@<channel>/live;若已連結帳號且關閉「將直播設為公開」,則為該直播本身的頁面,因為不公開的直播不會出現在你的直播頁面上。僅在 YouTube 屬於這些服務且已填入你的頻道時包含;在「test」中,只要已填入頻道就會包含。 |
videoId |
字串 | YouTube 直播的影片 ID。僅在連結 YouTube 帳號、且 YouTube 已回報影片後包含:出現在「live」、「viewers」和「test」中,絕不會出現在「stopped」中。 |
video |
字串(URL) | 直播本身的頁面,https://www.youtube.com/watch?v=<videoId>。與 videoId 一起傳送。 |
embed |
字串(URL) | 用於在網頁中顯示的直播,https://www.youtube.com/embed/<videoId>,作為 <iframe> 的位址。與 videoId 一起傳送。 |
viewers |
整數 | 在 YouTube 上觀看的人數,依 YouTube 的計算方式。僅在連結 YouTube 帳號、且 PanoPaper 已查看過(直播開始約一分鐘後)時包含:出現在「viewers」中,以及已知人數時的「live」和「test」中;絕不會出現在「stopped」中。 |
camera |
字串 | PanoPaper 所顯示的攝影機名稱:正在直播的攝影機;在「stopped」中則是最後直播的那部。攝影機輪流直播時,是送出訊息當下正在直播的那部 - 切換到下一部攝影機不會送出訊息。 |
time |
字串 | 訊息產生的時間,採用 ISO 8601 和 UTC,精確到秒:2026-10-20T14:03:12Z。 |
text, content |
字串 | 同一句話出現兩次,使用 PanoPaper 的語言 - 在「live」中,若已知直播本身的連結就附上它,否則附上你頻道的直播頁面:text 是 Slack 顯示為訊息的內容,content 是 Discord 顯示的內容。這句話是給人看的,措辭也可能改變,因此請勿從中解讀任何資訊。 |
沒有值的欄位會被省略,絕不會以空值或 null 傳送。欄位可能以任何順序出現,PanoPaper 日後的版本也可能新增欄位:請略過你不認得的欄位。
讓位址保持機密
PanoPaper 不會為訊息簽署,也不會另外加上自己的密碼。若要確保只有 PanoPaper 能傳送訊息到你的伺服器,請將密鑰放在位址本身,例如一段很長的隨機路徑,或查詢字串中的權杖 - 例如 Home Assistant 的 Webhook 位址本來就是這樣運作的。這也是位址會保存在你的鑰匙圈中的原因。
在捷徑中
捷徑會以檔案的形式取得相同的 JSON,檔名依事件命名,例如「PanoPaper live.json」。
捷徑與 Siri 也可以開始和停止直播。