---
document_type: "reference_doc"
service: "MOMENTRY_CORE"
title: "Momentry Core API 教育訓練手冊"
date: "2026-04-27"
version: "V1.5"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "momentry"
  - "core"
  - "教育訓練手冊"
  - "processing_status"
ai_query_hints:
  - "查詢 Momentry Core API 教育訓練手冊 的內容"
  - "Momentry Core API 教育訓練手冊 的主要目的是什麼？"
  - "如何操作或實施 Momentry Core API 教育訓練手冊？"
  - "processing_status 字段說明"
---

# Momentry Core API 教育訓練手冊

> **對象**: marcom 團隊  
> **版本**: V1.5 | **日期**: 2026-04-27

---

## 1. 快速開始

### 基本資訊

| 項目 | 值 |
|------|-----|
| API 網址 | `https://api.momentry.ddns.net` |
| 認證方式 | Header `X-API-Key` |
| 格式 | JSON |

### Demo 測試帳號

#### API Key（用於 API 認證）

```
X-API-Key: muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69
```

#### SFTPGo（用於影片上傳）

| 項目 | 值 |
|------|-----|
| SFTP 主機 | `sftpgo.momentry.ddns.net` |
| SFTP 連接埠 | `2022` |
| 用戶名 | `demo` |
| 密碼 | `demopassword123` |
| Web 管理介面 | `https://sftpgo.momentry.ddns.net` |

**使用方式**：透過 SFTP 上傳影片，系統會自動註冊並處理。

---

## 2. 快速範例

### 查詢所有影片

```bash
curl -s -H "X-API-Key: muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69" \
  "https://api.momentry.ddns.net/api/v1/videos"
```

### 查詢單一影片

```bash
curl -s -H "X-API-Key: muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69" \
  "https://api.momentry.ddns.net/api/v1/videos/{uuid}/details"
```

### 查詢處理任務狀態

```bash
curl -s -H "X-API-Key: muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69" \
  "https://api.momentry.ddns.net/api/v1/jobs/{job_id}"
```

---

## 3. API 端點說明

### 3.1 影片相關

#### GET /api/v1/videos
取得所有影片列表

**回應範例**:
```json
{
  "videos": [
    {
      "uuid": "5dea6618a606e7c7",
      "filename": "demo_video.mp4",
      "duration": 123.45,
      "status": "ready",
      "created_at": "2026-03-25T10:00:00Z"
    }
  ]
}
```

#### GET /api/v1/videos/:uuid/details
取得單一影片詳情（包含 chunks、processing status 等）

### 3.2 搜尋與分段查詢

#### POST /api/v1/search
向量搜尋，查詢分段（Chunk）詳情

**請求參數**:
| 參數 | 類型 | 必填 | 說明 |
|------|------|------|------|
| `query` | string | 是 | 搜尋關鍵字 |
| `limit` | number | 否 | 回傳數量（預設 10） |
| `uuid` | string | 否 | 只搜尋指定影片 |

**請求範例**:
```json
{
  "query": "天氣",
  "limit": 10,
  "uuid": "5dea6618a606e7c7"
}
```

**回應範例**:
```json
{
  "results": [
    {
      "uuid": "39567a0eb16f39fd",
      "chunk_id": "sentence_1471",
      "chunk_type": "sentence",
      "start_time": 5309.08,
      "end_time": 5311.08,
      "text": "influenced by a vital way,",
      "score": 0.68
    }
  ],
  "query": "天氣"
}
```

**Chunk 欄位說明**:
| 欄位 | 說明 | 範例 |
|------|------|------|
| `uuid` | 影片唯一識別碼 | `39567a0eb16f39fd` |
| `chunk_id` | 分段識別碼 | `sentence_1471` |
| `chunk_type` | 分段類型 | `sentence` / `cut` / `time` / `trace` / `story` |
| `start_time` | 開始時間（秒） | `5309.08` |
| `end_time` | 結束時間（秒） | `5311.08` |
| `text` | 內容文字 | `influenced by a vital way` |
| `score` | 相似度分數（0-1） | `0.68` |

**Chunk 類型說明**:
| 類型 | 說明 | 來源 |
|------|------|------|
| `sentence` | 語音轉文字片段 | ASR 處理 |
| `cut` | 場景變化片段 | CUT 處理 |
| `time` | 固定時間分段 | 系統自動切割 |
| `trace` | 軌跡追蹤片段 | YOLO 追蹤 |
| `story` | 故事線片段（父子關係） | Story 分析 |

#### POST /api/v1/n8n/search
n8n 專用搜尋（包含完整影片檔案路徑 file_path）

**請求參數**: 與 `/search` 相同

**回應範例**:
```json
{
  "query": "天氣",
  "count": 2,
  "hits": [
    {
      "id": "sentence_1471",
      "vid": "39567a0eb16f39fd",
      "start": 5309.08,
      "end": 5311.08,
      "title": "Chunk sentence_1471",
      "text": "influenced by a vital way,",
      "score": 0.68,
      "file_path": "/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4"
    }
  ]
}
```

**與 /search 的差異**:
| 欄位 | `/search` | `/n8n/search` |
|------|-----------|----------------|
| 影片 UUID | `uuid` | `vid` |
| Chunk ID | `chunk_id` | `id` |
| 開始時間 | `start_time` | `start` |
| 結束時間 | `end_time` | `end` |
| 相似度分數 | `score` | `score` |
| **檔案路徑** | ❌ | ✅ `file_path` |

> **注意**: `file_path` 是影片的實際路徑，可用於本地播放。

### 3.3 任務相關

### 3.4 任務相關

#### GET /api/v1/jobs/:uuid
查詢處理任務狀態

**回應範例**:
```json
{
  "uuid": "9760d0820f0cf9a7",
  "file_uuid": "5dea6618a606e7c7",
  "status": "completed",
  "progress": 100,
  "created_at": "2026-03-25T10:00:00Z",
  "completed_at": "2026-03-25T10:05:00Z"
}
```

#### GET /api/v1/jobs
查詢所有任務

**查詢參數**:
| 參數 | 說明 | 範例 |
|------|------|------|
| `status` | 篩選狀態 | `pending`, `processing`, `completed`, `failed` |
| `limit` | 回傳數量 | `10` |

**範例**:
```bash
curl -s -H "X-API-Key: ..." \
  "https://api.momentry.ddns.net/api/v1/jobs?status=completed&limit=5"
```

### 3.5 系統管理

#### POST /api/v1/config/cache
切換快取功能（管理員專用）

**請求範例**:
```json
{
  "enabled": true
}
```

**回應範例**:
```json
{
  "cache_enabled": true,
  "message": "Cache toggled successfully"
}
```

#### POST /api/v1/unregister
刪除影片及其所有關聯資料（管理員專用）

**請求範例**:
```json
{
  "uuid": "5dea6618a606e7c7"
}
```

**回應範例**:
```json
{
  "success": true,
  "message": "Video unregistered successfully",
  "uuid": "5dea6618a606e7c7"
}
```

**注意**: 此操作會刪除影片及其所有分段、處理結果、縮圖等關聯資料，**無法復原**。

### 3.6 健康檢查

#### GET /health
服務健康狀態（**無需認證**）

**回應**:
```json
{
  "status": "ok",
  "version": "0.9.20260325_144654"
}
```

---

## 4. n8n Workflow 範例

### 4.1 基本設定

在 n8n workflow 中使用 HTTP Request 節點：

```
┌─────────────────┐
│  HTTP Request   │
├─────────────────┤
│ Method: GET     │
│ URL: https://api.momentry.ddns.net/api/v1/videos
│ Headers:        │
│   X-API-Key:    │
│   [YOUR_KEY]    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  處理回應資料    │
└─────────────────┘
```

### 4.2 範例：檢查任務狀態

```javascript
// n8n Function Node 範例
const jobUuid = $input.item.json.uuid;

return [{
  json: {
    method: "GET",
    url: `https://api.momentry.ddns.net/api/v1/jobs/${jobUuid}`,
    headers: {
      "X-API-Key": "YOUR_API_KEY"
    }
  }
}];
```

---

## 5. 常見問題

### Q: 返回 401 錯誤怎麼辦？
確認 Header 中有正確的 `X-API-Key` 值

### Q: 如何確認影片處理完成？
```
GET /api/v1/jobs/{uuid}
```
檢查 `status` 是否為 `completed`

### Q: 查不到資料？
確認 UUID 格式正確（16碼 hex 字串）

---

## 6. 快速參考卡

```
┌─────────────────────────────────────────────────────────────┐
│                     Momentry API 速查                        │
├─────────────────────────────────────────────────────────────┤
│  查詢所有影片      GET  /api/v1/videos                       │
│  查詢單一影片      GET  /api/v1/videos/:uuid                │
│  向量搜尋          POST /api/v1/search                      │
│  n8n 搜尋          POST /api/v1/n8n/search                 │
│  查詢任務狀態      GET  /api/v1/jobs/:uuid                  │
│  查詢所有任務      GET  /api/v1/jobs                        │
│  快取設定          POST /api/v1/config/cache (管理員)       │
│  刪除影片          POST /api/v1/unregister (管理員)        │
│  健康檢查          GET  /health (免認證)                    │
├─────────────────────────────────────────────────────────────┤
│  Header: X-API-Key: [YOUR_KEY]                             │
│  URL: https://api.momentry.ddns.net                        │
└─────────────────────────────────────────────────────────────┘
```

---

## 附錄：回應狀態說明

### 任務狀態 (status)

| 狀態 | 說明 |
|------|------|
| `pending` | 等待處理 |
| `processing` | 處理中 |
| `completed` | 已完成 |
| `failed` | 處理失敗 |

### 影片狀態 (status)

| 狀態 | 說明 |
|------|------|
| `pending` | 等待處理 |
| `processing` | 處理中 |
| `completed` | 已完成 |
| `failed` | 處理失敗 |

### 影片詳細狀態 (processing_status)

| 狀態 | 說明 | Portal 顯示 |
|------|------|-------------|
| `REGISTERED` | 已註冊 | 藍色「已註冊」 |
| `PENDING` | 等待處理 | 黃色「等待處理」 |
| `PROBING` | 探測中 | 紫色「分析中」 |
| `ASR` | 語音識別中 | 靛藍「語音識別」 |
| `OCR` | 文字識別中 | 靛藍「文字識別」 |
| `YOLO` | 物體檢測中 | 靛藍「物體檢測」 |
| `FACE` | 人臉檢測中 | 靛藍「人臉檢測」 |
| `POSE` | 姿態檢測中 | 靛藍「姿態檢測」 |
| `CUT` | 鏡頭分析中 | 靛藍「鏡頭分析」 |
| `COMPLETED` | 完成 | 綠色「已完成」 |
| `FAILED` | 失敗 | 紅色「處理失敗」 |

**說明**：Portal 顯示優先使用 `processing_status`（詳細狀態），Fallback 使用 `status`（基本狀態）。

---

## 附錄：版本歷史

| 版本 | 日期 | 內容 | 操作人 |
|------|------|------|--------|
| V1.0 | 2026-03-25 | 初版建立 | OpenCode |
| V1.1 | 2026-03-25 | 新增快取/刪除 API、搜尋端點文件 | OpenCode |
| V1.2 | 2026-03-25 | 新增 Chunk 欄位說明、類型、播放方式 | OpenCode |
| V1.3 | 2026-03-25 | 新增 Demo 測試帳號（SFTPGo）| OpenCode |
| V1.4 | 2026-03-25 | 更新 n8n 搜尋回傳欄位說明 (media_url→file_path) | OpenCode |
| V1.5 | 2026-04-27 | 新增 processing_status 字段說明，移除 'ready' 狀態 | OpenCode |
