---
title: 撮影（静止画・録画・巡回撮影・外部送信）
description: 撮影プリセットで決めた向きを静止画か短い録画で撮り、メディアビューワーに保存するか、指定の URL へエッジPC から送る。向きを複数登録すると順に回って撮る（巡回撮影）
createdAt: 2026-09-24
lastModified: 2026-10-11
sidebar:
  label: 撮影
---

カメラの静止画か短い録画を決まった時刻や外部からの合図で撮り、[メディアビューワー](/docs/guides/photos)に保存するか、指定した URL へエッジPC から直接送る機能です（両方も可）。PTZ カメラでは**決めた向きを順に回して撮る（巡回撮影）**こともできます。広い現場を 1 台のカメラでまかない、「あの場所は今どうなっているか」「先月と比べてどう変わったか」を後から見返せます。

- **撮る向き・画質は「撮影プリセット」に、いつ撮るか・どこへ出すかは「撮影ジョブ」に分けて登録します。** 1 つのプリセットを複数のジョブで使えます。
- **撮影プリセットに向きを 2 つ以上登録すると、1 回の撮影で順に回って撮ります（巡回撮影）。** 向きには現場の呼称（「1 工区」「調整池」「南法面」など）をそのまま付けます。AI エージェントからも同じ言葉で聞けます。
- **出力はジョブごとに選びます。** 保存した写真はメディアビューワーで見比べ、ZIP でまとめて保存できます。外部へはエッジPC から送るので、エッジPC から届く URL なら**社内 LAN にも送れます**。
- **撮るものはジョブごとに静止画か録画かを選びます。** 録画は向きごとに決めた秒数だけ撮る短い動画で、常時録画とは別に保存します。
- **起動のしかたは 5 通り**です。スケジュール・画面の「今すぐ撮影」・独自コンポーネント（エッジ内）・外部 API・AI アプリのイベント（[トリガー](/docs/guides/ai-apps#連携トリガー)）。

## すぐ撮影

**その場で撮って残すだけなら、設定は要りません。** サイドバーの **「撮影」** を開くと最初に出る **「すぐ撮影」** タブで撮れます。

- カメラが 1 秒ごとの静止画のタイルで並びます（1 ページ 12 台。デバイス一覧と同じ絞り込みができます）。
- 上の **「静止画」 / 「録画」** で撮るものを選びます。録画は長さ（5 / 10 / 30 / 60 秒）も選びます。
- タイルの **「撮影」**（録画を選んだときは **「録画」**）で、そのカメラを今の向きのまま撮ります。静止画の幅はカメラの[保存サイズ](/docs/guides/recording#保存サイズを選ぶ)に従います（既定は原寸）。録画は録り終えるまで通知に「録画しています」と出ます。
- タイルをクリックして選び、**「選んだ n 台を撮影」**（録画なら **「選んだ n 台を録画」**）で複数台をまとめて撮れます。

撮ったものは[メディアビューワー](/docs/guides/photos)に保存され、撮影元が `その場で撮影`、場所が `今の向き` で並びます。静止画は押した瞬間の絵が保存され、その場で通知にも表示されます（一覧に出るまでは数秒かかります）。**外部送信先へ送りたいときや、決めた向きで撮りたいときは、撮影ジョブを作って実行してください。** 1 台の映像を見ながら撮るなら、ライブ映像の個別画面の[「撮影」パネル](/docs/guides/viewer#撮影する)も使えます。

## 設定の組み立て

決めた時刻に撮る・決めた向きで撮る・外部へ送るときは、「すぐ撮影」以外の 4 つのタブで設定します。

| タブ               | 登録するもの                                                                                                                |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| **撮影ジョブ**     | 「どのカメラを・どの撮影プリセットで撮り・どこへ出すか（保存 / 外部送信先）」と、いつ撮るか（スケジュール・ほかのトリガー） |
| **撮影プリセット** | カメラごとの撮る向き（複数可）・画質・画像の幅・撮影前の待ち                                                                |
| **外部送信先**     | 画像を受け取る URL・送信形式・認証ヘッダ。複数のジョブで使い回せます                                                        |
| **撮影ログ**       | 写真 1 枚ごとの撮影と外部送信の結果（送信待ち・成功・失敗・放棄・保存のみ）                                                 |

1. 向きや画質を決めて撮りたい場合は、**「撮影プリセット」** タブでカメラを選び **「プリセットを追加」** をクリックして、名前を付けて **「保存」** します。続けて開く一覧で **「+ 向きを登録する」** から向きを登録します（下記「[向きを登録する](#向きを登録する)」）。今の向きのまま撮るだけなら飛ばせます。

2. 外部へ送る場合は、**「外部送信先」** タブで **「外部送信先を追加」** をクリックし、名前・メソッド（`POST` / `PUT`）・URL・送信形式を入力します。認証が要る場合は **ヘッダ** に `Authorization` などを追加します。

3. **「撮影ジョブ」** タブで **「ジョブを追加」** をクリックし、名前・キー・カメラ・撮影プリセット・**出力**と、スケジュール・ほかのトリガーを設定して **「保存」** します。

4. 一覧の **「今すぐ撮影」** で 1 回撮ってみて、**「撮影ログ」** タブで `成功`（保存だけなら `保存のみ`）になることを確かめます。保存した写真は一覧の写真ボタンからメディアビューワーで開けます。

## 撮影プリセット

カメラごとに、撮る向きと撮影条件を名前を付けて登録します。ジョブで選ぶと、撮影の直前にこの条件へ切り替えます。

| 項目                     | 内容                                                                                                                             |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| 名前                     | 最大 100 文字。同じカメラの中で重複できません。メディアビューワーでは「撮影プリセット」の名前として出ます                          |
| 画質を指定する           | 明るさ・コントラスト・彩度・シャープネス（0〜100）。**撮影のあいだだけ切り替え、撮り終えたら元に戻します**。ONVIF 対応カメラだけ |
| 画像の幅（px・任意）     | **320〜7680 px**。空欄ならカメラの[保存サイズ](/docs/guides/recording#保存サイズを選ぶ)に従う（既定は原寸）                                                                                                   |
| 撮影前の待ち（ms・任意） | **0〜30000 ms**。空欄なら、向きか画質を変えたときは 2 秒待ちます（ブレ・AF・露出が落ち着くのを待つため）                         |
| 向き                     | 作ったあとの一覧から登録します（下記）。**1 つのプリセットに 200 件まで**。ONVIF の PTZ 対応カメラだけ                           |

**向きの数で撮り方が変わります。**

| 向き        | 1 回の撮影で撮るもの                                                    |
| ----------- | ----------------------------------------------------------------------- |
| 0（未登録） | カメラの今の向きのまま 1 枚                                             |
| 1 つ        | その向きへ振って 1 枚                                                   |
| 2 つ以上    | 登録した順に 1 つずつ振って撮る（巡回撮影）。1 回で向きの数だけ撮ります |

プリセットの一覧の行をクリックすると、向きの一覧が開きます。行の説明には「今の向きのまま撮る」「向き ◯ か所を順に撮る」のように撮り方が出ます。**「設定」** で名前・画質・幅・待ちを変え、ゴミ箱のボタンでプリセットを削除します。

- プリセットは撮影ジョブから使われている間は削除できません（「このプリセットを使っているジョブがあるため削除できません」）。
- **向きや画質を指定したのに ONVIF の接続情報が無いカメラでは、撮影を失敗として記録します**（違う向きで撮った画像を残さないため）。

:::note
  カメラから遠いほど狭く写す（ズームする）ことで、距離が違っても 1 枚あたりの細かさを揃えられます。距離ごとに何倍で撮るかは、向きを登録するときにカメラを実際に動かして決めます。
:::

### 向きを登録する

1. プリセットの向きの一覧で **「+ 向きを登録する」** をクリックします。ライブ映像と方向パッドが並ぶので、映像を見ながら撮りたい場所が写るまでカメラを動かします。ライブ映像の画面と同じく、ボタンを押している間だけ動かせます。ライブ映像を無効にしているカメラや、映像に接続できないときは、1 秒ごとの静止画が代わりに出ます。

2. **呼称**（最大 100 文字。同じプリセットの中で重複できません）を入力して **「この向きで登録する」** をクリックします。座標は今のカメラの向きから読み取るので、入力は不要です。**ズームの覚え書き（任意）**（「5 倍」など）は一覧に出すだけの控えで、カメラの動きには影響しません。

3. 見たい場所の数だけ 1〜2 を繰り返します。

登録すると**その向きで 1 枚撮って一覧のサムネイルにします**。ジョブで撮る前に画角を確かめられ、撮った写真はそのまま時系列の 1 枚目になります。

**呼称は現場で呼んでいる名前にしてください。** AI エージェントは呼称で場所を選ぶので、「調整池はどうなっている？」のような聞き方にそのまま答えられます。

### 範囲から作る

広い現場を面で覆うときは、1 件ずつ向けずに**範囲の端を 2 か所決めて、横 × 縦に等分した区画を向きとして一括で登録できます**。向きの一覧の **「範囲から作る」** から開きます。作った区画は、そのプリセットの向きに加わります。

1. **端 1** の **「カメラを向けて決める」** をクリックし、範囲の左上の区画に写したい向きまでカメラを動かして **「この向きを端 1 にする」** をクリックします。

2. **端 2** も同じように、範囲の右下の区画に写したい向きで決めます。

3. **範囲名**と、**横**・**縦**の区画の数を入れます。区画の並びと撮る順番、1 回撮るのにかかる時間（その範囲だけ・プリセット全体）がその場で出ます。

4. **「◯ 件を登録する」** をクリックします。

5. **呼称を付ける**: **「サムネイルを撮る」** で各区画を 1 枚ずつ撮り、写真を見ながら呼称を現場の言葉に付け替えます。

**両端の区画はちょうど端 1・端 2 の向きで撮り、その間を等分します。** 隣り合う区画がどれだけ重なるかは区画の数で決まるので、サムネイルを見て隙間が空いていれば数を増やして作り直してください。ズームはすべての区画で端 1 を決めたときの値にそろえます。

| 項目    | 内容                                                                                                         |
| ------- | ------------------------------------------------------------------------------------------------------------ |
| 範囲名  | 最大 40 文字。生成する向きの呼称の頭に付きます（「範囲 1 A-3」）。A が端 1 の行、数字が端 1 の側からの列です |
| 横 / 縦 | 区画の数（**それぞれ 1〜20、合わせて 200 件まで**）。1 にすると、2 つの端の真ん中を撮ります                  |

**呼称は後から付け替えて構いません。** 付け替えても、それまでの写真は同じ向きの時系列につながります。付け替えなくても撮影は回りますが、番号のままだと AI エージェントに場所の言葉で聞けません。

作った範囲は **「作った範囲」** から選び直して、**「この条件で作り直す」** で割り直せます。作り直すとその範囲の向きは置き換わり、呼称が変わった場所の写真は元の呼称の時系列に残ります。範囲の **×** で、範囲とそこから作った向きを消します（撮った写真は残ります）。**「+ 新しい範囲」** で同じプリセットに別の範囲を足せます。**「撮影プリセットへ戻る」** で一覧に戻ります。

プリセットの向きは合わせて 200 件までです。手で登録した向きやほかの範囲と足して超える場合は登録できません。

### 登録した向きを直す

向きの一覧の各行から変えられます。

| 操作         | 内容                                                                                                            |
| ------------ | --------------------------------------------------------------------------------------------------------------- |
| ↑ ↓          | 撮る順番を入れ替える                                                                                            |
| **「撮る」** | その向きでその場で 1 枚撮り、メディアビューワーに保存する（外部へは送りません）。一覧のサムネイルも撮り直されます |
| **「変更」** | 呼称・ズームの覚え書き・**向き**を変える。開くとカメラが今の登録位置へ戻るので、そこから動かし直す              |
| **「外す」** | 撮影から一時的に除く（登録は残るので **「戻す」** で復帰できる）                                                |
| **「削除」** | 登録を消す。**撮影済みの写真は残ります**                                                                        |

一覧の **「写真を見る」** で、そのプリセットの写真に絞ってメディアビューワーを開きます。

## 撮影ジョブ

| 項目           | 内容                                                                                                                        |
| -------------- | --------------------------------------------------------------------------------------------------------------------------- |
| 名前           | 最大 100 文字                                                                                                               |
| キー           | 独自コンポーネントから呼ぶときの名前。英小文字・数字・`-`・`_`（最大 64 文字）。**同じエッジPC 内で重複できません**         |
| カメラ         | 作った後は変えられません                                                                                                    |
| 撮影プリセット | そのカメラのプリセットから選びます。「使わない（今の向き・画質のまま撮る）」も選べます                                      |
| 撮るもの       | **静止画** / **録画**（5 / 10 / 30 / 60 秒）。録画は向きごとにその秒数だけ撮ります（下記「[録画のジョブ](#録画のジョブ)」） |
| 出力           | **メディアビューワーに保存する** / **外部送信先へ送る**（外部送信先を選ぶ）。両方を選べ、どちらも外すことはできません（下記） |
| 有効にする     | 無効のあいだは**どのトリガーでも撮影しません**                                                                              |
| スケジュール   | 使わない / 一定間隔 / 決まった時刻 / cron 式（詳細）（下記）                                                                |
| ほかのトリガー | エッジ内（カスタム処理のコンテナ）からの起動・外部 API（API トークン）からの起動を許可するか（下記）                        |

向きが 2 つ以上あるプリセットを選ぶと、「◯ か所の向きを順に回って撮ります（1 回およそ ◯ 分）」と 1 回の所要時間の目安が出ます。

1 台のカメラに撮影ジョブを複数作れます。日中は 1 時間おきに全体を、夜間は 30 分おきに出入口だけを、のように撮る向き・間隔を分けたいときは、プリセットとジョブを分けて作ります。**同じカメラのジョブが重なった場合は、1 件ずつ順に撮ります。** 後の撮影は前の撮影が終わるまで待つので、撮れる時刻がずれます。ジョブの編集画面では、同じカメラのほかのジョブと向こう 1 週間で撮影の時間が重なると、相手のジョブ名と重なる回数が出ます。どちらもカメラの向きと画質を変えないジョブ同士（今の向きのまま撮るだけ）は、重なっても写真が変わらないので出しません。

### 出力

| 出力                           | 内容                                                                                                                                                             |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **メディアビューワーに保存する** | 撮ったエッジPC に置き、[メディアビューワー](/docs/guides/photos)で撮影プリセットと向きごとの時系列で見る。プリセットを使わないジョブはジョブ名で並びます |
| **外部送信先へ送る**           | 選んだ外部送信先へエッジPC から送る（下記「受け取る側の形式」「送信と再送」）                                                                                    |

外部送信先がまだ無いときは、先に「外部送信先」タブで登録してください。

### 録画のジョブ

「撮るもの」で **「録画」** を選ぶと、向きへ振って落ち着くのを待ってから、選んだ秒数だけ録画します。巡回撮影では向きごとに 1 本ずつ撮ります。

- **MP4（H.264）で保存し、音声は入りません。** カメラの映像が H.265 のときは、ブラウザで再生できるよう H.264 に変換して保存します（録っている間だけエッジPC の CPU を使います）。
- **録っている間はカメラを占有します。** 同じカメラのほかの撮影は、録り終えるまで待ちます。長い録画を向きの多いプリセットで撮ると 1 回の時間が長くなるので、所要時間の目安と重なりの注意を確かめてください。
- **常時録画とは別に保存します。** 常時録画の保持日数では消えず、写真と同じく保存先の空きが足りなくなったときだけ古いものから消えます。
- **画像の幅（撮影プリセット）は録画には効きません。** H.265 を変換するときだけ幅 1920px までに縮めます。

### スケジュール

| 種類            | 内容                                                                                                                             |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| 使わない        | スケジュールでは撮りません（ほかのトリガーと「今すぐ撮影」だけで撮ります）                                                       |
| 一定間隔        | **1〜1440 分**ごと。0 時から数えた区切りで撮ります（60 分なら毎時 0 分）。開始・終了時刻で時間帯を絞れます（日をまたぐ指定も可） |
| 決まった時刻    | `HH:mm` をカンマ区切りで最大 48 個（例: `08:00, 12:00, 17:00`）                                                                  |
| cron 式（詳細） | 「分 時 日 月 曜日」の 5 つを空白で区切って書きます（下記）                                                                      |
| 曜日            | 一定間隔・決まった時刻で使います。未選択なら毎日                                                                                 |

**cron 式**は、毎月 1 日・第 2 火曜のように一定間隔・決まった時刻では表せない予定に使います。

| 例                  | 撮る時刻                  |
| ------------------- | ------------------------- |
| `0 9 1 * *`         | 毎月 1 日 9:00            |
| `0 8 * * 2#2`       | 第 2 火曜 8:00            |
| `*/15 9-17 * * 1-5` | 平日 9〜17 時の 15 分ごと |

- **曜日と時間帯は式の中で指定します**（cron 式では曜日のチェックと開始・終了時刻は使いません）。
- 秒・年のフィールド、`@hourly` などの別名、`H` は使えません（「cron 式は「分 時 日 月 曜日」の 5 つを空白で区切って指定してください」と出ます）。
- 入力すると **次の撮影** の時刻が 5 回分出るので、意図どおりか確かめてから保存してください。

どの種類でも次のとおりです。

- **時刻はエッジPC の現地時刻で指定します。** 画面には `時刻は現地時刻（America/New_York）で指定します。` のようにタイムゾーンが出ます。タイムゾーンはエッジPC の詳細画面で変えられます（→ [タイムゾーン](/docs/guides/edge-pcs#タイムゾーン)）。画面に出る次の撮影の時刻は目安です。
- 夏時間のある地域では、切り替わる日も現地の時刻どおりに撮ります。春に飛ぶ時刻（例: `02:30`）はその直後に撮り、秋に 2 回来る時刻は 1 回だけ撮ります。
- 撮影は区切り（定刻）から **5 分以内**に始めます。エッジPC が止まっていて区切りを 5 分以上過ぎた分は、後から撮り直しません。
- **前回の撮影がまだ終わっていない場合、その回は撮らずに見送ります。**
- スケジュールは**エッジPC が単独で動かします**。回線が切れても撮影は続き、送れなかった画像は後で再送します（下記「送信と再送」）。

:::warning
  **巡回撮影の 1 回に要る時間は、向きの数と首振りの距離で決まります。** 首振りは可動域の対角で 6 秒ほどかかるため、向きが多いと 1 回が間隔を超えることがあります。一定間隔か cron 式で、1 回の所要時間の目安が撮影の間隔より長くなると、ジョブの編集画面に「前の回が終わっていない枠は撮らずに見送ります」と注意が出ます。**間隔は 1 回に要る時間より長く設定してください。**
:::

### 今すぐ撮影（手動）

ジョブ一覧の **「今すぐ撮影」** で 1 回撮り、出力へ出します。結果は撮影ログとメディアビューワーで確かめます。無効のジョブでは押せません。ライブ映像の個別画面の「撮影」パネルでも、そのカメラの有効なジョブを選んで **「今すぐ撮る」** で同じように撮れます。

### エッジ内（独自コンポーネント）から起動する

ジョブで **「エッジ内（カスタム処理のコンテナ）からの起動を許可する」** にチェックを入れると、同じエッジPC で動く[独自コンポーネント](/docs/guides/edge-components)から撮影を起動できます。独自の検知処理の結果に合わせて画像を撮って送る、といった使い方ができます。

1. コンポーネントの Docker 起動オプションに `--add-host=host.docker.internal:host-gateway` を付けます。

2. ジョブの編集画面に出る**トークン**を、デプロイ時の環境変数（シークレット）としてコンテナへ渡します。トークンはエッジPC ごとに 1 つで、**撮影ジョブの起動と一覧、AI アプリのイベントの受け取りにしか使えません**。

3. コンテナから次のように呼びます。

    ```bash
    curl -X POST http://host.docker.internal:3001/local/capture-jobs/<キー>/run \
      -H "Authorization: Bearer <トークン>" \
      -H "Content-Type: application/json" \
      -d '{"source":"my-component","payload":{"reason":"検知"}}'
    ```

| 項目      | 内容                                                                                                                                                                      |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `source`  | 任意。呼び出し元の名前（最大 100 文字）。撮影ログの「トリガー」欄に出ます                                                                                                 |
| `payload` | 任意。外部送信先へ一緒に渡す JSON オブジェクト（**4KB まで**）。判定結果などを載せられます                                                                                |
| 応答      | 撮り終えると `202 {"runId": "..."}`。許可していない・存在しないキーは `404`、無効なジョブは `409`、撮影に失敗すると `502`。向きの多いプリセットは撮り終えるまで返りません |

起動を許可したジョブの一覧は `GET http://host.docker.internal:3001/local/capture-jobs`（同じトークン）で取れます。

### AI アプリのイベントで起動する

物体検出・ナンバープレート検知の詳細画面の「連携」で、このジョブを動かすトリガーを作れます。在/不在のルールが切り替わったときや、ナンバーを新しく読んだときに撮影します（→ [AI アプリを使う](/docs/guides/ai-apps#連携トリガー)）。ジョブ側で許可を入れる必要はありません。外部送信先へは、イベントの内容が `payload` として届きます。

```json
{
  "trigger": { "id": "…", "name": "入口に人が来たら撮る" },
  "event": {
    "id": "…",
    "deviceId": "…",
    "ts": "2026-09-28T03:00:00.000Z",
    "eventType": "presenceStart",
    "ruleId": "r1a2b3c",
    "detail": { "ruleName": "入口", "matchedCount": 1, "detections": [{ "label": "person", "confidence": 0.87, "bbox": { "x": 0.42, "y": 0.31, "width": 0.1, "height": 0.35 } }] }
  }
}
```

ナンバーを読んだときは `eventType` が `plateRead` になり、`detail` に `plate`（番号）・`confidence`（確信度）・`bbox`（プレートの枠）が入ります。`payload` が 4KB を超えるときは `detections` を省きます。

### 外部 API から起動する

ジョブで **「外部 API（API トークン）からの起動を許可する」** にチェックを入れると、外部のシステムから撮影を起動できます。

1. **「組織設定」→「API・MCP」**の「API トークン」で、スコープに **「撮影」** を含むトークンを発行します（組織のオーナー・管理者のみ → [組織設定](/docs/guides/organization#api-トークン)）。

2. ジョブの ID を確かめます（ジョブの編集画面の呼び出し例に出ます）。

3. 次のように呼びます。

    ```bash
    curl -X POST https://api.thingsconnect.app/api/v1/capture/jobs/<ジョブ ID>/run \
      -H "Authorization: Bearer <API トークン>" \
      -H "Content-Type: application/json" \
      -d '{"payload":{"orderId":"A-123"}}'
    ```

- 応答は `202 {"runId": "..."}` です。**エッジPC が依頼を受け付けて保存した時点で返る**ので、撮影と送信の結果は `GET /api/v1/capture/runs/<runId>` で確かめます（同じトークンで呼べます）。応答の `run` にその回の状態と撮れた枚数・失敗した枚数が、`deliveries` に写真 1 枚ごとの撮影と送信の結果が入ります。
- 受け付けた依頼はエッジPC に保存されるので、撮影の前にエッジPC が再起動しても、起動後に撮影します（依頼から 10 分を過ぎても撮り始められなかったものは撮らずに `失敗` にします）。
- 許可していないジョブは `403`、無効なジョブは `409`、エッジPC に届かなかった場合は `502` を返します。
- 「撮影」スコープのトークンでは、ほかに `GET /api/v1/capture/jobs`（ジョブ一覧）・`GET /api/v1/capture/deliveries`（撮影ログ）を呼べます。項目の詳細は [REST API](/docs/api) を参照してください。

## 撮影はどう進むか

1 回の撮影では、プリセットの向きを登録した順に 1 つずつ、**その向きへ振る → 止まるのを待つ → ブレと AF が収まるのを待つ（既定 2 秒）→ 撮る**を繰り返します。撮った写真は 1 枚ずつ出力へ出します（外部送信先へは 1 枚ごとに送ります）。

- **人や AI がカメラを操作すると、撮影は今の向きで止まります。** 操作が 60 秒止んでから、その回でまだ撮っていない向きだけを続けます。操作が入った向きの写真は保存しません（別の場所を向いた写真がその向きの時系列に混ざるのを防ぐため）。
- **手動（今すぐ撮影）・外部 API・AI エージェントの撮影は、スケジュールの撮影に割り込みます。** 割り込んだ撮影が終わると、スケジュールの撮影の続きを撮ります。
- **止まったまま 1 時間経った回と、次のスケジュールの枠が来た回は打ち切ります**（頼まれた時点の写真にならないため）。
- 撮影プリセットの **「撮る」** と AI エージェントの `capture` は、向きを 1 つその場で撮ってメディアビューワーに保存します（外部へは送りません）。撮影中のジョブには割り込み、ジョブは後で残りを撮ります。

## 外部送信先

| 項目                  | 内容                                                                                                                |
| --------------------- | ------------------------------------------------------------------------------------------------------------------- |
| メソッド              | `POST` / `PUT`                                                                                                      |
| URL                   | `http://` か `https://` で始まる URL。クエリ文字列もそのまま送ります（クエリで API キーを渡すサービスにも使えます） |
| 送信形式              | `multipart/form-data` / `JPEG そのまま（image/jpeg）` / `JSON（画像は base64）`（下記「受け取る側の形式」）         |
| タイムアウト（秒）    | **1〜120 秒**（既定 30 秒）                                                                                         |
| ヘッダ                | 最大 20 個。`Authorization: Bearer …`・`X-API-Key`・Basic 認証などをここで渡します                                  |
| HMAC 署名の鍵（任意） | 8 文字以上。設定すると本文の HMAC-SHA256 を `X-Signature: sha256=<16 進>` で付けます                                |

**ヘッダの値と HMAC の鍵は暗号化して保存し、登録後は画面に表示しません。** 編集するときは値を変える行だけ入力します（空欄の行は登録済みの値のまま）。署名をやめるときは **「署名をやめる」** にチェックを入れます。`Content-Type`・`Content-Length`・`Host`・`X-Signature`・`X-ThingsConnect-` で始まるヘッダは送信時に付けるものなので指定できません。

外部送信先は撮影ジョブから使われている間は削除できません（「この外部送信先を使っているジョブがあるため削除できません」）。

:::warning
  ヘッダの値と HMAC の鍵は、エッジPC が送信に使うので**エッジPC にも保存されます**（回線が切れてもスケジュールどおり送り続けるため）。エッジPC は物理的に管理された場所に置いてください。
:::

## 受け取る側の形式

**写真 1 枚（録画は 1 本）ごとに 1 回送ります。** 巡回撮影では、1 回の撮影で向きの数だけ届きます。どの形式でも、送信の ID を **`X-ThingsConnect-Delivery-Id`** ヘッダで付けます。**再送しても同じ値**なので、受け取る側はこれで重複を捨てられます。送信先が **2xx** を返したら成功とみなします。

一緒に送る情報（メタデータ）は次のとおりです。

| 項目                      | 内容                                                                                  |
| ------------------------- | ------------------------------------------------------------------------------------- |
| `deliveryId`              | 送信の ID（写真 1 枚ごと）                                                            |
| `runId`                   | 実行の ID。同じ回（1 回の撮影で回った向き）の写真で共通です                           |
| `jobId` / `jobName`       | 撮影ジョブ                                                                            |
| `deviceId` / `deviceName` | カメラ                                                                                |
| `presetName`              | 撮影プリセットの名前（使わない場合は null）                                           |
| `viewName`                | 撮った向きの名前（呼称）。向きの無いプリセットでは null                               |
| `viewIndex` / `viewCount` | その向きがプリセットの何番目か（1 始まり）と、向きの数。向きの無いプリセットでは null |
| `trigger`                 | `schedule` / `edge` / `api` / `manual`                                                |
| `capturedAt`              | 撮影時刻（ISO 8601）                                                                  |
| `payload`                 | 呼び出し元が渡した JSON（無ければ null）                                              |

| 形式                    | 本文                                                                               |
| ----------------------- | ---------------------------------------------------------------------------------- |
| `multipart/form-data`   | `image`（JPEG ファイル）と `metadata`（上の項目の JSON 文字列）の 2 つのフィールド |
| `JPEG そのまま`         | 本文は JPEG だけ。メタデータはヘッダで送ります（下記）                             |
| `JSON（画像は base64）` | `{ ...メタデータ, "image": { "contentType": "image/jpeg", "base64": "..." } }`     |

**録画のジョブでは、画像の代わりに録画（MP4）を送ります。** `multipart/form-data` はフィールド名が `video`（`video/mp4` のファイル）、`JPEG そのまま` は本文が MP4 で `Content-Type: video/mp4`、`JSON` は `"video": { "contentType": "video/mp4", "base64": "..." }` になります。JSON の形式は録画を base64 にするので 1.3 倍ほど大きくなります。受け取る側の本文の上限に注意してください。

`JPEG そのまま` の形式で付けるヘッダです（値の無い項目のヘッダは付けません）。

| ヘッダ                                                      | 内容                                         |
| ----------------------------------------------------------- | -------------------------------------------- |
| `X-ThingsConnect-Run-Id`                                    | 実行の ID                                    |
| `X-ThingsConnect-Job-Id` / `X-ThingsConnect-Job-Name`       | 撮影ジョブ                                   |
| `X-ThingsConnect-Device-Id` / `X-ThingsConnect-Device-Name` | カメラ                                       |
| `X-ThingsConnect-Preset-Name`                               | 撮影プリセットの名前                         |
| `X-ThingsConnect-View-Name`                                 | 撮った向きの名前                             |
| `X-ThingsConnect-View-Index` / `X-ThingsConnect-View-Count` | 向きの順番（1 始まり）と向きの数             |
| `X-ThingsConnect-Trigger`                                   | `schedule` / `edge` / `api` / `manual`       |
| `X-ThingsConnect-Captured-At`                               | 撮影時刻（ISO 8601）                         |
| `X-ThingsConnect-Payload`                                   | 呼び出し元が渡した JSON を base64 にしたもの |

日本語を含む名前（ジョブ名・カメラ名・プリセット名・向きの名前）は URL エンコードして送ります。

**HMAC 署名**を設定した場合は、送った本文のバイト列そのもの（multipart は境界を含めた全体）に対する HMAC-SHA256 を `X-Signature: sha256=<16 進>` で付けます。受け取る側で同じ鍵で計算して一致を確かめてください。

## 送信と再送

- 撮った画像はいったんエッジPC に保存し、**外部送信先ごとに撮った順で 1 件ずつ**送ります。
- 送れなかった場合は 30 秒後から間隔を倍々に空けて（最大 30 分）再送し、**10 回、または撮影から 24 時間で諦めます**（`放棄`）。
- 再送は**送る時点の外部送信先の設定**を使います。URL やヘッダを直せば、溜まっている分にも効きます。
- エッジPC に溜められるのは **500 件・1GB** までで、超えた分は古いものから諦めます。

## 撮影ログ

**「撮影ログ」** タブに、直近 **30 日**の写真 1 枚ごとの撮影と外部送信の結果が出ます。ジョブ・状態・トリガーで絞り込めます。**「ジョブ / 向き」** 欄に、ジョブ名と撮影プリセット・向きの名前が出ます。**外部送信先へ送った画像はクラウドに残しません**（残すには出力で「メディアビューワーに保存する」を選びます）。

| 状態       | 内容                                                                     |
| ---------- | ------------------------------------------------------------------------ |
| `送信待ち` | 撮影して送信中（再送中を含む）。再送中は試行回数と直前のエラーが出ます   |
| `成功`     | 送信先が 2xx を返した                                                    |
| `失敗`     | 撮影できなかった（カメラが応答しない、ONVIF の接続情報が無いなど）       |
| `放棄`     | 送信先に送れないまま再送の上限に達した                                   |
| `保存のみ` | 外部送信先へ送らない（メディアビューワーへの保存だけの）ジョブで撮影できた |

撮影・再送の結果は、撮影ログに出るまで少し遅れます。

**手動・外部 API で依頼してから 15 分経っても撮影の報告が届かない場合は `失敗`（「エッジPC から撮影の報告が届きませんでした」）にします。** エッジPC が止まったときなどに、結果が分からないまま残り続けるのを防ぐためです。後からエッジPC の報告が届いた場合は、その結果で上書きします。

## カメラの詳細画面

カメラの詳細画面（**「デバイス」** から開く）の **「撮影」** タブに、そのカメラの撮影の様子が出ます。

| 項目                   | 内容                                                                                                                          |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| ジョブ                 | そのカメラの撮影ジョブの名前・使う撮影プリセット（向きが 2 つ以上なら「向き ◯ か所」）・スケジュール・次回の撮影時刻          |
| 直近の撮影             | 直前の回の時刻・ジョブ名・状態（`受付済み` / `撮影中` / `完了` / `中断（手動操作のため）` / `失敗`）と撮れた枚数 / 予定の枚数 |
| 撮影ログ               | 直近 5 件の写真の結果                                                                                                         |
| 送れなかった写真の枚数 | メディアビューワーへ登録できなかった写真があるときだけ出ます（下記）                                                            |

**「写真を見る」** でそのカメラに絞ったメディアビューワーを開きます。**「ジョブを見る」**（ジョブが無いときは **「ジョブを設定する」**）では撮影の画面、**「撮影ログを見る」** では撮影ログを開きます。

**エッジPC からメディアビューワーへ登録できなかった写真がある場合は、その枚数が出ます。** 登録を繰り返し断られた場合に起きます（回線が切れている間は数えず、つながってから登録します）。その時刻の写真はメディアビューワーに出ません。

## 写真を見る・保存先

保存した写真は **[メディアビューワー](/docs/guides/photos)** で、撮影プリセットと向き（現場の呼称）ごとの時系列で見ます。2 時点の比較・1 枚ずつの保存・ZIP でのまとめて保存・タイムラプス動画づくりができます。

**「メディアビューワーに保存する」を選んだ写真は撮ったエッジPC に置かれます。お客様側での準備は要りません。** 画面で開くときにエッジPC から読み出すので、エッジPC がオフラインの間は開けません。写真は録画と同じ保存先に置かれ、空き容量が少なくなると古いものから削除されます（→ [メディアビューワーの保存先と保持](/docs/guides/photos#保存先と保持)）。

**カメラ・撮影ジョブ・撮影プリセット・向きを削除しても写真は残ります。** カメラを削除すると、そのカメラの撮影ジョブと撮影プリセットも削除されます。

## AI エージェントから聞く

MCP で接続すると、現場の呼称のまま問い合わせられます（→ [利用可能な MCP ツール一覧](/docs/mcp/tools)）。

- `list_presets` — 撮影プリセットと向き（見られる場所）の一覧
- `get_snapshot` — 指定した時点に最も近い 1 枚
- `compare` — 2 時点を並べて取得
- `capture` — 向きを 1 つその場で撮る（ジョブの撮影に割り込み、あとで残りを撮ります）
- `list_capture_jobs` / `list_capture_deliveries` / `run_capture_job` — 撮影ジョブの一覧・撮影ログ・実行

呼称は表記ゆれを吸収するので、「調整池」でも「調整」でも引けます。

## 運用上の注意

- **巡回撮影をするカメラで常時録画をするときは、[定位置](/docs/guides/viewer#onvif-カメラを操作する)を決めてください。** 巡回している間は録画の画角も変わります。定位置を決めておけば撮り終えたときにそこへ戻り、決めていなければ最後の向きのまま録画を続けます。ジョブの編集画面にもその旨が出ます。
- **巡回撮影をするカメラを AI 推論の入力に使わないでください。** 移動中のフレームで推論すると誤った結果が出ます。
- **夜間の巡回撮影は想定していません。** 赤外線照明が届くのは 80〜100m 程度で、遠方は写りません。
- **カメラの左右・上下の反転は、向きを登録する前に決めてください。** 後から切り替えると、登録済みの向きが反対側を向きます（→ [ONVIF カメラを操作する](/docs/guides/viewer#onvif-カメラを操作する)）。
- **工事の進行で画角が合わなくなったら、向きの一覧の「変更」で向きを直してください。** 呼称を変えなければ、それまでの写真と同じ時系列につながります。
