ドキュメント

スプレッドシートからスクリーンをスケジュール

会場がスケジュールをスプレッドシートで管理しています。各行に、スクリーンコード、ファイル名、開始、終了があります。シートをインポートすると、screenRIG はすべての行をスクリーンとメディアに照らして検証し、問題を行と列ごとに示し、スクリーンが従うカレンダーをプレビューして、すべてを適用するか、まったく適用しないかのどちらかにします。

シートからスクリーンへ

  1. テンプレートから始めます。 テンプレートを CSV または XLSX として保存するか、同じ列を持つ独自のシートを使用します。
  2. スケジュールの1行につき1行を入力します。 スクリーン(またはフォルダーかタグ)、ファイル、開始、終了を指定します。
  3. インポートします。 ダッシュボードの「スケジュール」タブのインポートダイアログにファイルをドロップするか、screenrig schedule import FILE を実行します。
  4. エラーのある行を修正します。 各エラーには、行、列、コードが示されます。ダイアログでセルを編集するか、シートを編集して再度インポートします。
  5. プレビューを確認します。 シートが作成するレベル、変更または削除するレベル、影響を受けるスクリーンのカレンダーが一覧表示されます。
  6. 公開します。 すべての行がまとめて適用されるか、まったく適用されないかのどちらかです。

手順1~5では何も書き込まれません。行でスクリーンをスケジュールするには、スクリーンにタイムゾーン(screen set-timezone)とデフォルトプレイリスト(screen assign)が必要で、ファイルは承認済みの画像または動画である必要があります。

シート

最初の行が列名です。それ以降の各行が1つのスケジュール行です。空白行はスキップされます。シートは CSV ファイル(UTF-8、カンマまたはセミコロン区切り)または XLSX ワークブックで、XLSX ワークブックは最初のシートから読み取られます。

列次としても読み取られます内容
targetscreen, screen code, code, room, room id, screen name, screen id行がスケジュールするスクリーン。必須
contentfile, file name, media, asset, playlist再生する内容。必須
startstart date, from, begin行が開始する時期
endend date, until, stop行が終了する時期
timezonetime zone, tz行の時刻が書かれているタイムゾーン
daysweekdays, day行が再生される曜日
daily startwindow start, time from各再生時間帯が開始する時刻
daily endwindow end, time to各再生時間帯が終了する時刻
priority0から100。大きい値が小さい値より優先して再生されます。既定値は 0 です。
namelevel, label行が作成するレベルの名前
displaydisplays, output行が再生されるビデオウォール出力(1 や 1,2 など)

ヘッダーは、大文字小文字、スペース、句読点を無視して照合されます。どこにも読まれない列は無視され、プレビューに一覧表示されます。行には target、content、および start、end、days、毎日の時間帯の少なくとも1つが必要です。

Screen,File,Start,End,Timezone,Days,Daily start,Daily end,Priority,Name
LOBBY-01,welcome-spring.jpg,2026-11-05 18:00,2026-11-08 02:00,America/Los_Angeles,,,,0,
folder:Casino Floor,happy-hour.mp4,2026-11-05,2026-11-30,,Mon-Fri,16:00,19:00,5,Happy hour
tag:elevators,playlist:Holiday loop,2026-12-01 09:00,2026-12-26,,,,,0,
  • 2行目は、コード LOBBY-01 のスクリーンで、太平洋時間の11月5日午後6時から11月8日午前2時まで welcome-spring.jpg を再生します。
  • 3行目は、フォルダー Casino Floor とその中のフォルダーのすべてのスクリーンで、11月5日から11月30日の終わりまでの平日の午後4時から午後7時まで happy-hour.mp4 を再生します。
  • 4行目は、タグ elevators を持つすべてのスクリーンで、12月1日午前9時から12月25日の終わりまでプレイリスト Holiday loop を再生します。

対象

対象は次のいずれかです。

  • スクリーン。 スクリーン ID、スクリーンの任意のフィールドの値(部屋コード、店舗番号)、またはスクリーン名。--code-field または code_field で、code や room_id などの1つのフィールドに一致を限定できます。
  • フォルダー。 folder:NAME または folder:Parent/Child。そのフォルダーと、その中のすべてのフォルダーに適用されます。
  • タグ。 tag:NAME は、そのタグを持つすべてのスクリーンに適用されます。

1つのセル内の複数の対象は、LOBBY-01;LOBBY-02|tag:elevators のように ; または | で区切ります。

コンテンツ

  • ファイル。 プロジェクト内のメディアファイルの名前、または変換されたアップロードの元のファイル名。ファイルは全画面で再生されます。ファイルを初めて使う確定で1ファイルのプレイリスト Scheduled: FILE が作られ、以降のインポートはそれを再利用します。
  • プレイリスト。 playlist:NAME またはプレイリストの ID。プレイリストには承認済みバージョンがあり、テンプレートではありません。

時刻

  • 日付と時刻。 2026-11-05 18:00、2026-11-05T18:00、11/5/2026 6:00 PM とスプレッドシートの日付セルを読み取ります。Z や +02:00 のようなオフセット付きの時刻は拒否されます。
  • 各スクリーン自身の時計。 時刻は、行が適用されるスクリーンの時計で読み取られるため、18:00 はスクリーンがどこにあっても午後6時です。
  • 別のタイムゾーン。 timezone セル(またはリクエストの timezone)は、その行がそのタイムゾーンで書かれていることを示します。行のすべてのスクリーンが同じタイムゾーンの場合、時刻はスクリーンのタイムゾーンに変換されます。複数のタイムゾーンのスクリーンに適用される行は timezone を空にし、各スクリーン自身の時計で読み取ります。
  • 終了に日付だけを指定するとその日いっぱいで終了します。2026-11-30 は11月30日の終わりに終了します。開始に日付だけを指定すると、午前0時に開始します。
  • 終了なしの場合、後のインポートで削除されるまで、行は再生され続けます。プレビューは open_end で警告します。
  • 曜日。 Mon-Fri、Mon,Wed,Fri、Sat,Sun、weekdays、weekends、daily のいずれか。days があり毎日の時間帯がない行は、その曜日に終日再生されます。
  • 毎日の時間帯。 daily start と daily end で毎日の時間を指定します(16:00 と 19:00、4:00 PM と 7:00 PM など)。両方を指定します。終了が開始と同じか開始より前の場合は、深夜0時をまたぎ、開始した日に属します。days がない場合、この時間帯は毎日適用されます。

プレビューとエラー

プレビューは、何かを書き込む前にすべての行とすべてのセルを検証します。エラーのある行はそのセルとともに表示され、各エラーには列、コード、修正内容が示されます。

コード列意味と対処
requiredtarget, content, daily start, daily endセルが空か、毎日の時間帯のセルの片方だけが入力されています。入力してください
unknown_screentargetその ID、フィールド値、名前のスクリーンはありません。コードを確認するか、code_field が指定するフィールドを確認してください
ambiguous_screentargetその値は複数のスクリーンに一致します。スクリーン ID か、一意のコードを使用してください
unknown_foldertargetその名前のスクリーンフォルダーはありません。スペルを確認してください
ambiguous_foldertargetその名前のフォルダーが複数あります。folder:Hotel/Casino Floor のようにパスを書いてください
unknown_tagtargetそのタグを持つスクリーンはありません。スペルを確認してください
unknown_filecontentその名前のファイルまたはプレイリストはありません。ファイルをアップロードするか、名前を修正してください
ambiguous_filecontentその名前のファイルが複数あります。どれかの名前を変更するか、playlist:NAME と書いてください
not_playablecontentファイルが画像でも動画でもない、メディアが審査待ち、またはプレイリストがテンプレートであるか承認済みバージョンがありません。承認するか、別のものを選んでください
invalid_timestart, end, daily start, daily endセルが日付と時刻ではないか、タイムゾーンのオフセットが付いています。2026-11-05 18:00 と書いてください
reversed_timesend終了が開始より後ではありません。どちらかを修正してください
past_endend終了時刻を過ぎています。後ろにずらすか、行を削除してください
no_timingstart行に時期の指定がありません。開始、終了、曜日、または毎日の時間帯を指定してください
invalid_valuedays, priority, displayセルが Mon-Fri のような曜日のリスト、0から100の整数、または 1,2 のようなディスプレイ番号ではありません
timezonetimezoneタイムゾーンが不明か、対象に複数のタイムゾーンのスクリーンが含まれています。America/Los_Angeles のようなタイムゾーンを使用するか、空のままにしてください
screen_not_readytargetスクリーンにタイムゾーンまたはデフォルトプレイリストがありません。screen set-timezone または screen assign を実行してください
overlappriority同じ優先度の2つの行が、スクリーン上で同時に有効です。どちらかの優先度を変えるか、時刻をずらしてください
limittargetスクリーンの独自レベルが32を超えるか、組織のキャンペーンが100を超えます(共有レベルはそれぞれ1件に数えられます)。行をまとめるか、フォルダーまたはタグを対象にしてください

2つの警告はインポートを止めません。open_end は終了のない行を示します。outranked は、スクリーン上で共有レベル(複数のスクリーン、フォルダー、タグ向けの行)が上書きして再生する行を示します。

行のないシート、UTF-8 ではないファイル、5,000行を超えるシート、8 MiB を超えるファイル、400台を超えるスクリーン独自のスケジュールを書き込む確定は、理由とともに拒否されます。

レベル

コンテンツ、時刻、優先度、名前、ディスプレイが一致する行は1つのレベルになります。対象は比較に含まれないため、10台のスクリーンで同じ時刻に同じファイルを再生する10行は1つのレベルになります。

  • 1つのスクリーンは、そのスクリーン自身のスケジュールにエントリを作ります。
  • 複数のスクリーン、フォルダー、タグは、その対象に対する1つの共有レベル、つまりキャンペーンを作ります。共有レベルはスクリーン独自のレベルより優先されます。

グループ化により、会場の200台のスクリーンが200件のエントリではなく1つのキャンペーンになり、シートの修正で変更されるのは1つのレベルだけです。name 列は共有レベルに名前を付けます。指定がない場合は、インポート、コンテンツ、対象にちなんだ名前になります(Spring promos: happy-hour.mp4 on Casino Floor など)。

もう一度インポート

インポートの name がそのインポートを識別し、既定値は import です。同じ名前で再度インポートすると、次のようになります。

  • 行の日付が変わっても、そのインポートが作成したレベルを更新します。
  • 新しい行のレベルを追加します。
  • シートから行がなくなったレベルを削除します。
  • シートが同じ場合は何も変更しません。

インポートで作られたレベルは、ID にインポート名を含み(スクリーンのエントリは imp_ で始まります)、キャンペーンには import の印が付きます。手作業で作成したレベルには一切触れません。1つのシートには1つの名前を使い、別のシートには別の名前を使います。

インポートを実行

ダッシュボード

プロジェクトのスケジュールタブを開き、インポートを選択します。CSV または XLSX ファイルをドロップします。ダイアログには行の表が表示され、各エラーがセルの横に示されるので、その場でセルを編集できます。続いて、インポートで変更されるスクリーンの合成されたカレンダーが表示されます。公開で確定します。

コマンドライン

screenrig schedule template --output schedule.csv
screenrig schedule import schedule.csv --name "Spring promos" --timezone America/Los_Angeles
screenrig schedule import schedule.csv --name "Spring promos" --timezone America/Los_Angeles --commit

schedule import はプレビューのみで、何も書き込みません。--commit は、すべての行が有効な場合にシートを適用します。

オプション意味
--name NAMEインポートの名前(1~80文字)。既定値は拡張子を除いたファイル名です
--timezone ZONE行に timezone がない場合に、時刻が書かれているタイムゾーン
--code-field FIELDスクリーンコードをこのスクリーンフィールドからのみ読み取る
--commitシートを適用
--format csv|xlsxschedule template: テンプレートの形式
--output FILEschedule template: 保存先

このコマンドは、シートが有効な場合は終了コード0、行にエラーがある場合は8(何も書き込まれません)、プレビュー後にプロジェクトが変更された場合は5(もう一度実行してください)で終了します。FILE は .csv、.xlsx、.json ファイル、または標準入力を表す - です。JSON ファイルには、行オブジェクトの配列、または列名をキーとする {"rows": [...]} を指定します。

API

シートは JSON の行として送信するか、CSV または XLSX のボディとして送信し、設定はクエリパラメーターで渡します。プレビューには読み取りアクセスが必要です。確定には書き込みアクセスを持つ認証情報が必要で、ダッシュボードで承認できるユーザーが付与します。

curl -s https://api.screenrig.ai/api/schedule/imports/preview \
  --header "Authorization: Bearer $SCREENRIG_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "Spring promos",
    "timezone": "America/Los_Angeles",
    "rows": [
      {"target": "LOBBY-01", "content": "welcome-spring.jpg", "start": "2026-11-05 18:00", "end": "2026-11-08 02:00"},
      {"target": "folder:Casino Floor", "content": "happy-hour.mp4", "start": "2026-11-05", "end": "2026-11-30",
       "days": "Mon-Fri", "daily_start": "16:00", "daily_end": "19:00", "priority": 5, "name": "Happy hour"}
    ]
  }'

同じシートをファイルとして送信する場合:

curl -s "https://api.screenrig.ai/api/schedule/imports/preview?name=Spring%20promos&timezone=America/Los_Angeles" \
  --header "Authorization: Bearer $SCREENRIG_TOKEN" \
  --header "Content-Type: text/csv" \
  --data-binary @schedule.csv

応答(抜粋):

{
  "name": "Spring promos",
  "valid": false,
  "fingerprint": "FINGERPRINT",
  "columns": ["target", "content", "start", "end", "days", "daily_start", "daily_end", "priority", "name"],
  "summary": {"rows": 2, "rows_with_errors": 1, "levels": 1, "creates": 1, "updates": 0,
              "unchanged": 0, "removes": 0, "screens": 1, "playlists": 1},
  "rows": [
    {"row": 2, "status": "ok", "level": "LEVEL_KEY"},
    {"row": 3, "status": "error",
     "errors": [{"column": "content", "code": "unknown_file",
                 "message": "No file or playlist is named \"happy-hour.mp4\"."}]}
  ],
  "levels": [{"key": "LEVEL_KEY", "action": "create", "home": "screen", "screen_id": "scr_LOBBY",
              "content": {"kind": "file", "id": "med_WELCOME", "name": "welcome-spring.jpg"},
              "screens": 1, "priority": 0, "from": "2026-11-05T18:00", "until": "2026-11-08T02:00", "rows": [2]}],
  "removals": []
}

rows[].cells は各行のセルをシートに書かれたとおりに返すため、クライアントは修正して行を再送信できます。valid は、エラーのある行がない場合に true です。calendar は GET /api/schedule/calendar と同じ形式で、確定後のインポートで変更されるスクリーンの状態を示します。

確定では、同じシートとそのプレビューの fingerprint を、JSON ボディのメンバーとして、またはファイルと併せてクエリパラメーターとして送信します。安全に再試行するには Idempotency-Key を送信します。

curl -s https://api.screenrig.ai/api/schedule/imports \
  --header "Authorization: Bearer $SCREENRIG_TOKEN" \
  --header "Idempotency-Key: spring-promos-1" \
  --header "Content-Type: application/json" \
  --data @commit.json

応答には preview と applied、作成、更新、変更なし、削除された件数、書き込まれたスクリーンと作成されたプレイリストが含まれます。確定が拒否された場合は何も書き込まれず、次のように返されます。

問題ステータス意味と対処
schedule_import_invalid422行にエラーがあります。修正してから、もう一度プレビューしてください
schedule_import_stale409プレビュー後にスクリーン、メディア、プレイリスト、レベルが変更されたか、行の読み取り結果が変わりました。もう一度プレビューし、新しいフィンガープリントで確定してください

GET /api/schedule/imports/template?format=csv と format=xlsx はテンプレートを返します。

制限

  • 1シートにつき5,000行と8 MiBまで。
  • 1つのスクリーンにつき独自レベル32まで。組織は、すべてのプロジェクトを合わせて最大100件のキャンペーンを持て、共有レベルはそれぞれ1件に数えられます。
  • 1回の確定で書き込めるスクリーン独自のスケジュールは400件までです。フォルダーまたはタグの行は、任意の数のスクリーンに適用されます。
  • インポート名は1~80文字です。