配信の自動化
PanoPaperは、配信の開始時と終了時に、視聴用のリンクを添えて、Webサイト、Home Assistantなどのホームオートメーション、SlackやDiscordなどのチャットサービス、またはショートカットに知らせることができます。たとえば、自分のWebサイトに「ライブで見る」ボタンを表示したり、チームのチャンネルに投稿したりできます。
設定はライブ配信を始めたときで行います。設定 ▸ 配信で、サービスのタブの右端にあるアンテナのボタンをクリックすると開きます。何か設定されているとアンテナが色付きで表示され、ボタンにポインタを置くと何がオンになっているかが表示されます。
Webhookとショートカット
- 「Webhookを呼び出す」:PanoPaperがWebアドレスにメッセージを送ります。送り先は自分のサーバ、Home Assistantなどのホームオートメーション、またはWebhookを受け付けるサービスです。「設定…」をクリックしてアドレスを入力またはペーストし、変更するには「編集…」をクリックします。こうしたアドレスには秘密の情報が含まれていることが多いため、アドレスはキーチェーンに保管されます。「テスト」をクリックすると、すぐにサンプルのメッセージが送られ、サーバの応答が表示されます。サーバがWebページで応答した場合、そのアドレスはWebhookではなくWebサイトである可能性が高いです。
- 「ショートカットを実行」(Web版):下で選択したショートカットを、同じメッセージを入力として実行します。入力は小さなJSONファイルで、ショートカットで辞書として読み取れます。
メッセージが送信されるとき
「live」のメッセージは、サービスがストリームを受け付けた時点で送信されます。また、ほかのサービスが配信を続けている間にサービスが加わったり抜けたりするたびに、再び送信されます。「stopped」は最後のサービスが停止したときに送信されます。YouTube Studioでライブ配信を終了をクリックしてもPanoPaperのストリームは止まらないため、PanoPaperで配信を停止するまで何も送信されません。
YouTubeのアカウントを接続していると、YouTubeの「live」のメッセージには配信そのもののリンクも含まれます。PanoPaperは、YouTubeが動画を知らせるまで最大30秒待ってからメッセージを送信します。ライブ配信中は、YouTubeで視聴している人数が変わるたびに「viewers」のメッセージも送信されます。PanoPaperは5分ごとに確認します。
メッセージ
PanoPaperはメッセージをHTTPのPOSTで送信します。コンテンツタイプはapplication/json、文字コードはUTF-8、ユーザエージェントはPanoPaper/のあとにバージョンが続くものです。2xxの応答はすべて受信済みとみなされ、応答の本文は読み取られません。各試行では応答を最大15秒待ちます。ネットワークエラーが起きた場合や、サーバが408、429、5xxで応答した場合、PanoPaperは5秒後にもう一度、さらにその30秒後にもう一度送信を試みます。それ以外の応答では再試行せず、「テスト」は1回だけ試みます。メッセージは出来事が起きた順に1つずつ送信されるため、「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) | Webページに表示するための配信(https://www.youtube.com/embed/<videoId>)で、<iframe>のアドレスとして使います。videoIdと一緒に送信されます。 |
viewers |
整数 | YouTubeで視聴している人数(YouTubeの集計による)。YouTubeアカウントを接続していて、PanoPaperが確認した後(配信開始から約1分後)のみ含まれます。「viewers」に含まれ、「live」と「test」には人数がわかっている間含まれます。「stopped」には含まれません。 |
camera |
文字列 | PanoPaperに表示されるカメラの名前。配信中のカメラで、「stopped」では最後に配信していたカメラです。カメラが交代で配信しているときは、メッセージを送信した時点で配信中だったカメラです。次のカメラに切り替わってもメッセージは送信されません。 |
time |
文字列 | メッセージが作成された日時。ISO 8601形式のUTCで、秒単位です:2026-10-20T14:03:12Z。 |
text, content |
文字列 | 同じ文が、PanoPaperの言語で2回入ります。「live」では、配信そのもののリンクがわかっていればそのリンク、わからなければチャンネルのライブページが入ります。textはSlackがメッセージとして表示し、contentはDiscordが表示します。人が読むための文で、言い回しは変わる可能性があるため、ここから情報を読み取らないでください。 |
値のないフィールドは省略され、空の値やnullとして送信されることはありません。フィールドの順序は決まっておらず、今後のバージョンのPanoPaperでフィールドが追加される場合があります。知らないフィールドは無視してください。
アドレスを秘密にする
PanoPaperはメッセージに署名せず、独自のパスワードも付けません。PanoPaperだけがサーバに送信できるようにするには、長いランダムなパスやクエリ文字列のトークンなど、秘密の情報をアドレス自体に含めてください。たとえば、Home AssistantのWebhookアドレスは最初からそのようになっています。アドレスがキーチェーンに保管されるのはそのためです。
ショートカットで受け取る
ショートカットは、同じJSONを「PanoPaper live.json」のようにイベントにちなんだ名前のファイルとして受け取ります。
ショートカットとSiriでもライブ配信を開始・停止できます。