Vista Global の SkyBot から「運航スケジュールを PUSH で提供できないか」という問い合わせ。データ主体は行動予定表(運航一覧)を想定。先方仕様と我々のデータモデルを突き合わせ、実装前に詰めるべき論点を整理したたたき台。
AUTH_TOKEN / OPERATOR_ID を発行するので、フライト配列を JSON で POST してくれ」というシンプルな受け口。
我々の 1区間(leg) = 先方の 1 flight に対応させれば素材は揃う。ただし
①削除の伝え方 ②時刻のUTC変換 ③乗客数の欠落 の3点が実装前に必ず決めるべき論点。
POST https://skybot.vistaglobal.com/operators/schedule/update/{OPERATOR_ID}authorization: AUTH_TOKEN(オペレーター毎に先方が発行){ "id": "OPERATOR_ID", "flights": [ … ] } / OPERATOR_ID はURLとボディの両方に必要deletedで削除表現/有効なJSONであること| SkyBot フィールド | 我々の保持元 | 状態 | メモ |
|---|---|---|---|
id不変の一意ID |
action_plan_legs.id |
要検討 | 区間単位で一意。ただし leg は物理削除される設計 → 消えたidを後から deleted:true で送れない。論点① |
tail |
action_plans.aircraft_registration(例 JA123F) |
ほぼOK | そのまま使える。Vista側のtail表記(ハイフン有無・大文字小文字)だけ確認 |
depart / arrive |
dep_airport_icao / arr_airport_icao |
OK | 最初からICAO保持で変換不要。ただし仮登録便は空文字 or 地域名(dep_area) → 除外。論点④ |
departT / arriveT |
flight_date(YYYY-MM-DD)+ dep_time/arr_time(HH:MM) |
変換要 | JSTローカルのHH:MM文字列。flight_dateと結合し JST(+9) として epoch ms(UTC)化。日跨ぎ注意。論点② |
created / modified |
created_at / updated_at |
変換のみ | JST datetime文字列 → epoch ms。modifiedは差分配信の基準にも使える |
deleted |
cnl_status='cancelled' or 物理削除 |
要検討 | 専用フラグなし。キャンセルは状態値、削除は行消滅。台帳が必要。論点① |
disposition |
flight_purpose(区間: ND/PF/PO…)+ flight_type(AGENT/FERRY/…) |
要確認 | Vista側が期待するCODE体系の定義入手 → 変換表が必要。論点⑤ |
passengers |
—(数値PAX列なし) | 欠落 | 氏名(passenger_name)のみ。leg.booking_id経由でmcj-bookingから拾うか、省略可否を確認。論点⑥ |
// 1 leg を 1 flight に変換した例 { "id": "leg-4821", // action_plan_legs.id(安定キー) "created": 1720915200000, "modified": 1720933200000, "deleted": false, "tail": "JA123F", "disposition": "CHARTER", // flight_purpose/type からの変換(要定義) "depart": "RJTT", "arrive": "RJFF", "departT": 1720998000000, // flight_date + dep_time(JST) → UTC epoch "arriveT": 1721004000000, "passengers": 2 // ← 現状データに無い(論点⑥) }
deleted:true で再送」して削除を伝える方式。一方 leg は物理DELETE(キャンセルは cnl_status、便自体は残す)。このままでは削除・キャンセルをVistaに伝えられない。deleted:true を送る。さらに cnl_status='cancelled' を deleted:true として扱うか、便は残して disposition で表すかを決める。flight_date(YYYY-MM-DD) と dep_time/arr_time(HH:MM文字列) を結合し、JST(+9固定・日本はDST無し) として epoch ms(UTC) 化する。arr_time < dep_time)は到着日を+1日する処理が要る。仮時刻(time_note='AM')は数値化不可 → 除外(論点④)。updated_at(or /api/plans/sync)で変更分のみ送る(通信量小・削除検出は台帳併用)。is_tentative=1/空港未定(dep_area)/時刻ラフ(time_note) の便は ICAO/epoch 必須要件を満たさない。disposition:"CODE" が期待する値の定義が不明。我々は区間 flight_purpose(ND/PF/PO…)とヘッダー flight_type(AGENT/FERRY/TRAINING/OWNER)を持つ。leg.booking_id 経由で mcj-booking から人数を拾えるか調査。(B) 拾えない/必須でないなら 省略 or 0。is_active=0(旧版)や visibility='hidden'/'done' の leg を誤配信しないこと。行動予定表は版管理・仮/確定・表示制御が絡む。is_active=1 かつ visibility='visible'(or 'done')のアクティブ版のみ。overview/full のフィルタを踏襲AUTH_TOKEN/OPERATOR_ID は wrangler secret put で管理(コミット厳禁)。配信は mcj-schedule Worker からの外向き fetch(サーバ間なのでCORS不問)。wrangler deploy 必要。cron追加時は wrangler.toml の triggers も。id は action_plan_legs.id を安定外部キーとして使用/api/plans/full のクエリロジックを流用(plan+legs+crew 一括取得)deleted検出(論点①③)wrangler deploy/secret は wrangler secret put/D1移行は --remote| 論点 | 状態 | 内容 / 次アクション |
|---|---|---|
| データ主体 = 行動予定表(leg) | 確定 | 1区間 = 1 flight で対応可能 |
| 粒度・一意ID = leg.id | 確定 | 安定キーとして利用。台帳と併用 |
| ①削除/キャンセルの表現 | 相談 | 台帳で削除検出は確定。キャンセル便を deleted 扱いにするかVistaに確認 |
| ②時刻UTC変換 | 方針確定 | JST+9で合成、日跨ぎ処理、純粋関数化 |
| ③全量/差分・トリガ | 仮 | まず全量×cronで単純に。頻度は先方要望次第 |
| ④仮登録便の除外 | 方針確定 | 確定便フィルタ。除外数をログ |
| ⑤disposition コード | 先方待ち | Vistaからコード一覧を入手 |
| ⑥passengers | 先方待ち | 必須か確認/供給元(booking)調査 |
| ⑨情報共有の合意 | 相談 | 提供範囲を高橋と確認 |
mcj-schedule/workers/schema.sql(action_plan_legs), /api/plans/full。
先方仕様: SkyBot Schedule Push Endpoint(Vista Global)。作成 2026-07-14。