# 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 # フロー詳細取得 ./wm-api.sh create-flow # フロー作成 ./wm-api.sh create-schedule # スケジュール作成 ./wm-api.sh run-flow # フロー手動実行 ./wm-api.sh job-status # ジョブ状態確認 ``` ## フローのデプロイ手順 ```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/" curl -sk -X POST \ -H "Authorization: Bearer qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh" \ -H "Content-Type: application/json" \ -d @flows/.flow.json \ "https://windmill.keinafarm.net/api/w/admins/flows/create" # 3. コミット&プッシュ git add flows/.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 で再デプロイ