Power Automate DesktopでLINE公式アカウントから誕生日DM自動送信|API不要・テンプレ対応・ログ付き

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

🎯 目的

  • 毎日 birthdays.csv を読み込み
  • 当日が誕生日の顧客にだけ テンプレートメッセージを送信
  • LINE公式アカウントの管理画面上で送信(APIは使わない)
  • 手動2FA対応可(ログインは手作業で先にやっておく)
  • log.csv同日+顧客IDの重複送信防止
  • メッセージは文字数制限(500字)対応、絵文字除去オプションあり

📁 フォルダ構成(ロボットディレクトリ)

LineBirthdayDM/
├─ main_flow.padx
├─ modules/
│   ├─ LoadBirthdays.padx
│   ├─ SendMessage.padx
│   ├─ WriteLog.padx
│   └─ Utilities/
│       ├─ TrimToMaxLength.padx
│       └─ RemoveEmoji.padx
├─ data/
│   ├─ birthdays.csv       ← 顧客データ
│   ├─ log.csv             ← 送信履歴
│   ├─ config.json         ← 設定(絵文字除去/文字数)
│   └─ template.txt        ← メッセージテンプレ

🔄 処理全体の流れ

[1] 誕生日データ読み込み(birthdays.csv)
 ↓
[2] 今日が誕生日の人だけ抽出
 ↓
[3] log.csvと照合(同日+顧客IDで未送信を判定)
 ↓
[4] テンプレ文生成 → 文字数調整 → 絵文字除去(オプション)
 ↓
[5] LINE管理画面で顧客検索+フォーム送信
 ↓
[6] 成功したらログ保存(log.csvへ)

📄 birthdays.csvの例

顧客ID,名前,誕生日,LINE名
1234,田中太郎,2000/09/11,tanakataro
1235,山田花子,1995/09/11,yamahana
1236,佐藤次郎,2001/02/14,satojiro

🧾 log.csvの例(送信履歴)

送信日,顧客ID,LINE名,結果
2025/09/11,1234,tanakataro,送信成功

⚙️ config.jsonの例

{
  "maxLength": 500,
  "removeEmoji": true
}

✉️ template.txtの例

{{名前}}さん、お誕生日おめでとうございます🎉
素敵な1年になりますように!
LINEスタッフ一同より

🛠 フロー作成ステップ(初心者向けに丁寧解説)


✅ STEP1:birthdays.csvの読み込み(LoadBirthdays.padx)

アクション:

  • 「CSVファイルを読み取る」→ birthdays.csv
  • 出力:BirthdayList

当日判定:

  • ループ処理内で %Today%%行["誕生日"]%MM/DD比較
  • 条件一致した人だけ TodayBirthdays に追加

🔍 STEP2:log.csvと照合(送信済みチェック)

アクション:

  • log.csv を読み取り → SentLogList に格納
  • 条件:「%今日% + 顧客ID」で一致したらスキップ
ループ:%TodayBirthdays%
条件:行["顧客ID"] + 今日 が log.csv にあるか?
→ なければ処理対象として次へ

✏️ STEP3:メッセージ生成&整形

1. テンプレ読み込み

templateText ← ファイル読み取り(template.txt)

2. プレースホルダ置換

{{名前}} → %CurrentCustomer["名前"]%

3. 絵文字除去(オプション)

If config["removeEmoji"] = true
→ 正規表現 or ユーティリティで削除

4. 最大文字数制限

最大500文字(config["maxLength"])を超えたら自動で末尾カット

🌐 STEP4:LINE管理画面で送信(SendMessage.padx)


1. 顧客検索

  • LINE管理画面の「メッセージ送信」ページへ遷移済みを前提
  • 検索欄に %CurrentCustomer["LINE名"]% を入力 → Enter

2. DOM操作または座標クリックで顧客選択

  • UI要素で選択できない場合は「画像近傍クリック」や「相対座標クリック」にフォールバック

3. フォームへメッセージ入力

  • クリア → %FinalMessageText%を貼り付け
  • 日本語IMEがONであることを保証(「キーの送信:半角/全角」)

4. 送信ボタン押下

  • UI要素がない場合も「相対クリック」で対応可能
  • 成功判定は送信ボタンが非表示になる or 確認ダイアログで判定

💾 STEP5:送信ログの記録(WriteLog.padx)

送信日,顧客ID,LINE名,結果
2025/09/11,1235,yamahana,送信成功

アクション:

  • 変数Nowで日時取得
  • CSV追記(appendモード)

⚠️ DOM未検出時のフォールバック処理

操作対象対策例
顧客選択ボタン「画像認識」 or 「座標指定クリック」
メッセージ入力欄UI要素指定 → なければ「Tab+Ctrl+V」で貼り付け
日本語入力「キー送信:半角/全角」でIME強制ON+入力確実化

🧪 テスト手順

  1. birthdays.csvに今日の人だけ入れる
  2. log.csvを空にする or 一部送信済みとして入れておく
  3. 実行してフォーム送信 → 正しく貼り付けられるか確認
  4. log.csvに送信履歴が追記されているか確認
  5. 次回実行時、同じ人はスキップされるかを確認

✨ 応用・拡張アイデア

機能実装方法
名前の敬称追加テンプレで {{名前}}さん のように記述
画像添付機能管理画面で「ファイルを選択」ボタン操作
遅延送信・時間指定送信メッセージ送信前に「時間を指定」入力欄操作

❓ よくある質問(FAQ)


Q1. APIでやった方が楽では?

A. 公式LINE Messaging APIはBusiness IDごとに設定が必要+審査ありです。本自動化はブラウザベースでAPI不要のため、どのLINE公式アカウントでもすぐに運用可能です。


Q2. 絵文字ってどうやって除去してる?

A. Unicodeの範囲で絵文字を正規表現で検出・削除しています。シンプルな [\uD83C-\uDBFF\uDC00-\uDFFF]+ でもほぼ対応可。


Q3. メッセージが途中で切れる原因は?

A. LINE管理画面の仕様で500文字制限があります。config.jsonの"maxLength"を守るよう設計されていますが、テンプレ文が長すぎると切れることもあるため調整してください。


Q4. 顧客検索で表示されない場合は?

A. LINE名が間違っている可能性があります。カナや絵文字を含む場合は正確に一致しないと表示されません。


Q5. 管理画面のUIが変わったら動かなくなる?

A. はい。そのため、セレクタと画像認識・座標クリックの2段構えで処理しており、柔軟に対応できます。

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

この記事を書いた人

目次