124 lines
6.2 KiB
Markdown
124 lines
6.2 KiB
Markdown
# Windmill Workflow プロジェクト
|
||
|
||
白皇集落営農組合 統合システム向けの Windmill ワークフロー管理リポジトリ。
|
||
|
||
## 環境
|
||
|
||
| 項目 | 値 |
|
||
|------|-----|
|
||
| Windmillサーバー | https://windmill.keinafarm.net |
|
||
| ワークスペース | `admins` |
|
||
| APIトークン | `wm-api.sh` に設定済み |
|
||
| Gitリモート | https://gitea.keinafarm.net/akira/windmill_workflow.git |
|
||
|
||
## 重要な制約
|
||
|
||
- **`wmill` CLIは使用不可**(CE版のグローバルAPI認証制限)→ `wm-api.sh` または curl で直接REST APIを叩く
|
||
- **フローの PUT更新は 405**(Windmill CE版の制限)→ DELETE してから POST で再作成する
|
||
- **`wmill.get_state()` はインラインフロースクリプトで永続化されない**→ 状態管理は必ず `wmill.get_variable()` / `set_variable()` を使う
|
||
- **`python3` コマンドは Windows環境で失敗する**→ curl の出力は grep等で直接処理する
|
||
|
||
## ディレクトリ構成
|
||
|
||
```
|
||
windmill_workflow/
|
||
├── flows/ # フロー定義JSON
|
||
│ ├── system_heartbeat.flow.json # Windmill自己診断フロー
|
||
│ ├── shiraou_notification.flow.json # 白皇集落 変更通知フロー
|
||
│ └── mail_filter.flow.json # メールフィルタリングフロー
|
||
├── docs/
|
||
│ └── shiraou/ # 白皇集落営農組合関連ドキュメント
|
||
│ ├── 19_windmill_通知ワークフロー連携仕様.md # API仕様書
|
||
│ └── 20_マスタードキュメント_Windmill通知ワークフロー編.md # マスタードキュメント
|
||
├── .agent/workflows/ # エージェント作業手順
|
||
│ ├── windmill-push.md # サーバーへのpush手順
|
||
│ ├── windmill-pull.md # サーバーからのpull手順
|
||
│ └── windmill-new-script.md # 新規スクリプト作成手順
|
||
├── wm-api.sh # Windmill REST APIヘルパー
|
||
└── wmill.yaml # wmill設定(defaultTs: bun)
|
||
```
|
||
|
||
## 登録済みワークフロー
|
||
|
||
| パス | 概要 | スケジュール |
|
||
|------|------|-------------|
|
||
| `f/app_custom/system_heartbeat` | Windmill自己診断 | なし(手動) |
|
||
| `f/shiraou/shiraou_notification` | 白皇集落営農 変更通知 | 5分毎(JST) |
|
||
| `f/mail/mail_filter` | メールフィルタリング(IMAP→LLM→LINE) | 10分毎(JST)予定 |
|
||
| `u/antigravity/git_sync` | Git同期 | 30分毎 |
|
||
|
||
## wm-api.sh コマンド一覧
|
||
|
||
```bash
|
||
./wm-api.sh version # サーバーバージョン確認
|
||
./wm-api.sh flows # フロー一覧
|
||
./wm-api.sh schedules # スケジュール一覧
|
||
./wm-api.sh get-flow <path> # フロー詳細取得
|
||
./wm-api.sh create-flow <json-file> # フロー作成
|
||
./wm-api.sh create-schedule <json-file> # スケジュール作成
|
||
./wm-api.sh run-flow <path> # フロー手動実行
|
||
./wm-api.sh job-status <job-id> # ジョブ状態確認
|
||
```
|
||
|
||
## フローのデプロイ手順
|
||
|
||
```bash
|
||
# 1. flows/*.flow.json を編集
|
||
|
||
# 2. 削除して再作成(PUTは405のため)
|
||
curl -sk -X DELETE \
|
||
-H "Authorization: Bearer qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh" \
|
||
"https://windmill.keinafarm.net/api/w/admins/flows/delete/<path>"
|
||
|
||
curl -sk -X POST \
|
||
-H "Authorization: Bearer qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh" \
|
||
-H "Content-Type: application/json" \
|
||
-d @flows/<file>.flow.json \
|
||
"https://windmill.keinafarm.net/api/w/admins/flows/create"
|
||
|
||
# 3. コミット&プッシュ
|
||
git add flows/<file>.flow.json
|
||
git commit -m "..."
|
||
git push origin main
|
||
```
|
||
|
||
## Windmill Variables
|
||
|
||
| 変数パス | Secret | 説明 |
|
||
|---------|--------|------|
|
||
| `u/admin/NOTIFICATION_API_KEY` | ✅ | shiraou APIキー |
|
||
| `u/admin/LINE_CHANNEL_ACCESS_TOKEN` | ✅ | LINE Messaging APIトークン |
|
||
| `u/admin/LINE_TO` | ✅ | LINE通知先ID(ユーザーまたはグループ) |
|
||
| `u/admin/SHIRAOU_LAST_CHECKED_AT` | ❌ | 前回確認時刻(ワークフローが自動更新) |
|
||
| `u/admin/KEINASYSTEM_API_KEY` | ✅ | Keinasystem MAIL_API_KEY(.envと同じ値) |
|
||
| `u/admin/KEINASYSTEM_API_URL` | ❌ | `https://keinafarm.net` |
|
||
| `u/admin/GEMINI_API_KEY` | ✅ | Google Gemini API キー(LLM判定用) |
|
||
| `u/admin/GMAIL_IMAP_USER` | ✅ | GmailアカウントのIMAPユーザー名(メールアドレス) |
|
||
| `u/admin/GMAIL_IMAP_PASSWORD` | ✅ | GmailのアプリパスワードIMAPパスワード) |
|
||
| `u/admin/MAIL_FILTER_GMAIL_LAST_UID` | ❌ | Gmail最終処理UID(ワークフローが自動更新) |
|
||
| `u/admin/HOTMAIL_IMAP_USER` | ✅ | Hotmail IMAPユーザー名(有効化時に登録) |
|
||
| `u/admin/HOTMAIL_IMAP_PASSWORD` | ✅ | Hotmail IMAPパスワード(有効化時に登録) |
|
||
| `u/admin/MAIL_FILTER_HOTMAIL_LAST_UID` | ❌ | Hotmail最終処理UID(有効化時に登録) |
|
||
| `u/admin/XSERVER_IMAP_USER` | ✅ | Xserver IMAPユーザー名(有効化時に登録) |
|
||
| `u/admin/XSERVER_IMAP_PASSWORD` | ✅ | Xserver IMAPパスワード(有効化時に登録) |
|
||
| `u/admin/MAIL_FILTER_XSERVER_LAST_UID` | ❌ | Xserver最終処理UID(有効化時に登録) |
|
||
|
||
## マスタードキュメント
|
||
|
||
- [白皇集落 Windmill通知ワークフロー](docs/shiraou/20_マスタードキュメント_Windmill通知ワークフロー編.md)
|
||
|
||
## メールフィルタリング — アカウント有効化手順
|
||
|
||
Gmail → Hotmail → Xserver の順で段階的に有効化する。
|
||
|
||
### Gmail 初期設定
|
||
1. GoogleアカウントでIMAPを有効化(Googleアカウント設定 → セキュリティ → アプリパスワード)
|
||
2. Windmill Variables に `GMAIL_IMAP_USER`, `GMAIL_IMAP_PASSWORD` を登録
|
||
3. フローを手動実行(初回: 既存メールスキップ、最大UIDを記録)
|
||
4. スケジュール登録(10分毎)
|
||
|
||
### Hotmail/Xserver 追加時
|
||
1. Windmill Variables に対応する変数を登録
|
||
2. `flows/mail_filter.flow.json` の該当アカウントの `"enabled": false` を `true` に変更
|
||
3. フローを DELETE → POST で再デプロイ
|