Power Automate DesktopでBtoB ECの「出荷完了メール+請求書PDF」一括送信ロボの作り方

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

🎯 目的と背景

毎日多数の出荷があるBtoB ECでは、出荷完了メールと請求書の送付作業が手間で非効率です。
このPADフローは、以下の一連の業務を自動化し、メールの誤送信や作業漏れ防止・業務効率化を実現します。


🔄 自動化対象フローの概要

  1. 受注CSVを読み込み
  2. 出荷済み注文だけを抽出
  3. 基幹システムにログイン(複数ID対応)
  4. 請求書PDFをダウンロード
  5. Outlookメールで送信(テンプレ+PDF添付)
  6. ログ保存(CSV)

📁 必要ファイル構成

InvoiceMailerBot/
├─ main_flow.padx
├─ modules/
│   ├─ LoginSystem.padx
│   ├─ DownloadInvoicePDF.padx
│   ├─ SendEmail.padx
│   └─ WriteLog.padx
├─ data/
│   ├─ orders.csv              ← 受注データ
│   ├─ accounts.csv            ← ログイン情報
│   ├─ config.json             ← 各種設定値
│   └─ log.csv                 ← 実行ログ
├─ templates/
│   └─ email_template.txt      ← メール本文テンプレ

🧾 各ファイルの内容


orders.csv(受注一覧)

注文番号,顧客名,出荷ステータス,メールアドレス
1001,ABC株式会社,出荷済み,abc@example.com
1002,XYZ商事,未出荷,xyz@example.com
1003,LMN産業,出荷済み,lmn@example.com

accounts.csv(ログインアカウント)

表示名,ユーザーID,パスワード
A社担当,admin_a,pass_a
B社担当,admin_b,pass_b

config.json

{
  "downloadFolder": "C:\\Users\\User\\Downloads\\invoices\\",
  "timeoutSeconds": 30,
  "maxRetry": 3
}

email_template.txt

{{顧客名}} 御中

いつも大変お世話になっております。
以下のご注文について、出荷が完了いたしましたので、請求書をお送りいたします。

注文番号:{{注文番号}}

何卒よろしくお願いいたします。

🧠 全体の処理構成

[1] orders.csvを読み込み
 ↓
[2] 出荷済みのみ抽出
 ↓
[3] 各注文ごとに以下を処理
     ├─ ログイン(複数アカウント切替)
     ├─ 請求書PDFをDL
     ├─ Outlookで送信(テンプレ文)
     └─ ログ書き込み

🔧 PADフロー構築手順(画面操作つきで解説)


🔹 STEP1:受注CSVの読み込み

アクション:

  • 「CSVファイルを読み取る」→ orders.csv
  • 変数名:OrdersList

フィルター処理:

アクション:リストをフィルタリング
条件:項目["出荷ステータス"] = "出荷済み"
出力:ShippedOrdersList

🔁 STEP2:出荷済み注文をループ処理

アクション:ループ
対象:%ShippedOrdersList%
変数:CurrentOrder

🔹 STEP3:ログイン(LoginSystem.padx)

引数:

  • ユーザーID:%Account[“ユーザーID”]%
  • パスワード:%Account[“パスワード”]%

内容:

  • Chrome起動
  • ログイン画面に遷移
  • ユーザーID/パスワードを入力 → ログイン

複数アカウントを交互に使いたい場合は、注文番号から担当者を識別するロジックを別途追加


📥 STEP4:請求書PDFをDL(DownloadInvoicePDF.padx)

処理内容:

  1. 基幹システムで「注文番号」を検索
  2. 請求書画面へ遷移
  3. 「PDF出力」ボタンをクリック
  4. ファイル出力を待機

アクション(ファイル待機):

アクション:ファイルの存在を待機
ファイルパス:%config["downloadFolder"]%%CurrentOrder["注文番号"]%.pdf
タイムアウト:%config["timeoutSeconds"]%

フォールバック処理:

  • ファイルが見つからない場合は WaitRetry
  • maxRetry 回失敗したらログに「失敗」と記録

📧 STEP5:Outlookで送信(SendEmail.padx)

使用ファイル:email_template.txt

手順:

  1. テキストファイルを読み込み(メールテンプレ)
  2. {{顧客名}}{{注文番号}} を置換
  3. Outlookの「新しいメールメッセージを送信」アクションで送信

添付:

添付ファイルパス:%config["downloadFolder"]%%CurrentOrder["注文番号"]%.pdf

アドレス:

宛先:%CurrentOrder["メールアドレス"]%

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

ファイル:log.csv

追記内容:

日時,注文番号,メール宛先,結果
2025-09-11 10:00,1001,abc@example.com,送信完了

アクション:

  • 「現在の日時を取得」
  • 「CSVファイルに追記」

⚠️ エラーハンドリングの設計

エラー内容処理方法
PDFがDLされないフォールバック+リトライ(最大3回)
メール送信失敗エラー詳細をログへ書き込み
ログイン失敗「画面遷移できなかった」旨をログへ記録
Outlookが開いていない自動起動 or メッセージで促す

💡 応用TIPS

🔁 アカウントのローテーション

  • accounts.csvを順番に使い回すようにすれば、日別でログインIDを分散可能。
  • 例:1件ずつaccounts.csvから順に取得してログイン。

🔍 PDF命名の工夫

  • ダウンロードファイルに「注文番号_日付.pdf」などを付けると管理が容易。

🔐 セキュリティ対応

  • パスワードを Windows 資格情報マネージャーで管理して、直接入力を避けると安心。

📋 よくある質問(FAQ)


❓ Q1. PDFがDLされないのはなぜ?

A. システム側でPDF生成に時間がかかっている可能性があります。timeoutSeconds を長めに設定してみてください。


❓ Q2. メール本文を変更したい場合は?

A. templates/email_template.txt を編集するだけで変更できます。


❓ Q3. メールアドレスの取得元を変えたい

A. orders.csvの構成を変えて、宛先列に別のアドレスを指定すればOKです。


❓ Q4. 実行のタイミングを自動化できますか?

A. Windowsのタスクスケジューラで、PADフローを任意の時間に起動できます(例:毎朝9:00)。


❓ Q5. なぜOutlook限定?

A. OutlookはPADが公式サポートしており、「メール送信アクション」で直接操作できるため安定性が高いからです。

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

この記事を書いた人

目次