Power Automate DesktopでX(旧Twitter)リプライ自動化|ChatGPT連携・複数アカウント・雛形対応フローの作り方

  • URLをコピーしました!
目次

✅ このガイドでできること

  • 毎日19:00にPADフローが自動実行
  • 複数アカウントに対応(accounts.csvに追加するだけ)
  • 指定アカウントでXへログイン
  • 固定ポストの次の最新ポストへ1件だけリプライ
  • 自分のリプが既にある場合はスキップ
  • ChatGPT(Custom GPT)でリプ内容自動生成
  • ログ出力(reply_log.csv

📦 事前準備

以下のファイル・設定を準備してください。

🔹 1. フォルダ構成

XReplyBot/
├─ main_flow.padx               ← メインフロー
├─ modules/                     ← サブフロー群
│   ├─ LoginAndNavigate.padx
│   ├─ FetchLatestPost.padx
│   ├─ CheckIfAlreadyReplied.padx
│   ├─ GenerateReply.padx
│   ├─ PostReply.padx
│   └─ WriteLog.padx
├─ data/
│   ├─ accounts.csv             ← アカウント設定
│   ├─ config.json              ← 実行設定
│   ├─ prompt.txt               ← ChatGPTプロンプトテンプレ
│   └─ reply_log.csv            ← 実行ログ
├─ docs/
│   ├─ setup_guide.pdf          ← セットアップ手順書
│   ├─ operation_manual.pdf     ← 運用マニュアル
│   └─ known_issues.pdf         ← 既知の制約一覧

🔹 2. ファイル内容サンプル

accounts.csv

表示名,ユーザー名,プロフィールURL,ログイン方式
アカウント1,user1,https://x.com/user1,Profile 1
アカウント2,user2,https://x.com/user2,Profile 2

config.json

{
  "startTime": "19:00",
  "delaySeconds": 5,
  "timeoutSeconds": 30,
  "maxRetries": 2
}

prompt.txt

以下の内容に対して、簡潔かつ前向きなリプライを作成してください:
【投稿内容】
{{POST_TEXT}}

【リプライ】

reply_log.csv(空でOK)

日時,アカウント,ポストURL,結果

💡 フロー全体の流れ(概要図)

[起動]
 ↓

[accounts.csv読み込み]

↓ [各アカウントに対して以下を実行] ├─ Chrome起動+ログイン ├─ 固定ポストの次を取得 ├─ 自リプチェック ├─ GPTでリプ生成 ├─ 投稿 └─ ログ出力 ↓ [終了]


🛠 フロー作成ステップ詳細(PAD画面での操作付き)


🏁 STEP1:フローの開始(main_flow.padx)

1. スケジュールトリガー設定(Windowsタスクスケジューラで設定)

  • 「Power Automate Desktopのフロー」→「スケジュールタスク」で毎日19:00に実行

📄 STEP2:accounts.csv読み込み

アクション:Excelワークシートから読み取り

  • ファイル:data/accounts.csv
  • 開始行:2行目(ヘッダは無視)
  • 出力:AccountsList(リスト型)
アクション名:Excelからデータを読み取る(ワークブックを開かずに)
変数名:AccountsList

🔁 STEP3:各アカウントをループ処理

アクション:ループ(For Each)

  • 対象:AccountsList
  • 現在の項目:CurrentAccount
アクション名:ループ
配列:%AccountsList%
変数:%CurrentAccount%

🧭 STEP4:Chrome起動・ログイン(LoginAndNavigate.padx)

アクション:サブフローを呼び出す

フロー名:LoginAndNavigate
引数:
  ユーザー名:%CurrentAccount["ユーザー名"]%
  プロフィールURL:%CurrentAccount["プロフィールURL"]%
  プロファイル:%CurrentAccount["ログイン方式"]%

Chromeの起動オプション

"C:\Program Files\Google\Chrome\Application\chrome.exe" --profile-directory="Profile 1"

📰 STEP5:固定ポストの次のポストを取得(FetchLatestPost.padx)

  • DOMセレクタで固定ポストを探し、それをスキップ
  • 次に現れるポスト要素を抽出
変数:PostText, PostURL
出力:対象ポストの本文とURL

🔍 STEP6:自分のリプライがあるかチェック(CheckIfAlreadyReplied.padx)

  • 方法1:ポスト画面内のリプ欄に自分の名前があるか
  • 方法2:reply_log.csvを開いて該当URLとアカウントが一致していればスキップ
出力:IsAlreadyReplied(Boolean)

❌ STEP7:リプ済みならスキップ

条件分岐(If)

条件:%IsAlreadyReplied% = True
→ 次のアカウントへ

🤖 STEP8:リプライ生成(GenerateReply.padx)

変数操作:

  • prompt.txt読み込み
  • {{POST_TEXT}}%PostText% に置換

Web操作:

  • Custom ChatGPTにアクセス
  • テキストエリアに貼り付け+送信(Enterキー)
  • 応答を取得 → ReplyText

📨 STEP9:リプライ投稿(PostReply.padx)

  • 対象ポストの「返信する」ボタンをクリック
  • ReplyTextを入力
  • 送信ボタン押下

🧾 STEP10:ログ出力(WriteLog.padx)

日時:%Now%
アカウント:%CurrentAccount["ユーザー名"]%
ポストURL:%PostURL%
結果:"投稿済"

⚠️ エラーハンドリング戦略

想定エラー対応方法
DOMが見つからないセレクタ失敗時はTry-Catch+ログ記録
2FA要求された表示メッセージで中断し、手動入力を促す
GPT応答がないリトライ 最大2回まで
投稿失敗ログに「投稿失敗」と記録し次アカウントへ

📋 テストとデバッグ手順

  1. accounts.csvに1アカウントだけ設定
  2. prompt.txtに簡単なテストプロンプト記載
  3. 実行してリプ投稿まで確認
  4. reply_log.csvに記録されたか確認
  5. IsAlreadyRepliedチェックが動作してるか確認

📚 よくある質問(FAQ)


❓ Q1. APIを使ってないのはなぜ?

A. XのAPI制限が厳しく、RPAによるブラウザ操作の方が安定・再現性が高いためです。


❓ Q2. ChatGPTのプロンプトを切り替えたい場合は?

A. prompt.txtを編集するだけで、リプ生成のトーンやスタイルを自由に変えられます。


❓ Q3. アカウントを増やしたいときは?

A. accounts.csvに行を追加するだけでOK。PADフローの編集は不要です。


❓ Q4. 投稿に画像がある場合は?

A. 現在は「テキストのみ対応」です。画像の解析は含まれていません。


❓ Q5. UIが変わって動かなくなったら?

A. セレクタの再設定または画像認識の代替で対応可能です。更新されたXの構造を確認してください。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次