Power Automate DesktopでGoogleカレンダー予定を毎朝社内チャットへ自動リマインド投稿する方法

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

🎯 目的

  • 毎朝自動でGoogleカレンダーの当日予定をWebから取得
  • 時間とタイトルを一覧に整形して
  • Teams または Slack(Web)に自動投稿し、社内全体へ共有

✅ Google Workspace API不要
✅ Chromeのプロファイルを使ってログイン状態を維持
✅ Teams / Slack も Webブラウザで直接投稿


🔄 自動化の全体フロー

[1] ChromeでGoogleカレンダーを開く(自動ログイン)
 ↓
[2] 当日の予定一覧をDOMから抽出(時間・タイトル)
 ↓
[3] 予定を整形 → 投稿メッセージを生成
 ↓
[4] TeamsまたはSlackの投稿画面を開く
 ↓
[5] テキストを貼付 → Enterで送信

📁 フォルダ構成(おすすめ)

CalendarReminderBot/
├─ main_flow.padx
├─ modules/
│   ├─ GetTodayEvents.padx         ← カレンダー取得
│   ├─ PostToChat.padx             ← チャット送信
│   └─ Utilities/
│       ├─ FormatMessage.padx
├─ data/
│   ├─ config.json                 ← 設定ファイル(プロファイル名・投稿先など)
│   ├─ message_template.txt       ← 投稿テンプレ

📄 config.jsonの例

{
  "chromeProfile": "Profile 2",
  "calendarUrl": "https://calendar.google.com/calendar/u/0/r/day",
  "chatPlatform": "Slack",
  "chatUrl": "https://app.slack.com/client/XXXXX/YYYYY"
}

✉️ message_template.txt(テンプレ)

📅 本日の予定({{日付}})

{{予定一覧}}

以上です。よろしくお願いします!

🛠 フロー作成手順(PAD完全解説)


✅ STEP1:GoogleカレンダーをChromeで起動(ログイン済)

アクション:「アプリケーションを起動」

  • アプリ:chrome.exe
  • 引数:
--profile-directory="Profile 2" https://calendar.google.com/calendar/u/0/r/day

※ 最初にChromeでプロファイルを作成して、Googleにログインしておいてください(2FAなど手動)


🕒 STEP2:当日の予定を取得(GetTodayEvents.padx)

処理内容:

  • 「日」表示モード(/day)で読み込まれていることを前提に、DOMから予定リストを取得

取得要素例(DOM構造に応じて調整):

時間タイトル
div[role="main"] span.timespan.event-summary

実装:

  • 「WebページのUI要素を抽出」で、予定が並んでいるブロック全体をループ取得
  • 各予定ごとに 時間 + タイトル のセットを作成
  • 予定がなければ「予定なし」とする

出力形式:

[
  "09:00 - 朝会",
  "13:00 - 顧客打合せ(オンライン)",
  "16:00 - プロジェクトレビュー"
]

→ 変数名:EventList


🧾 STEP3:メッセージ生成(FormatMessage.padx)

手順:

  1. message_template.txt を読み込み
  2. {{日付}} → 今日の日付(yyyy/MM/dd)
  3. {{予定一覧}}EventListを改行で連結
📅 本日の予定(2025/09/11)

09:00 - 朝会
13:00 - 顧客打合せ(オンライン)
16:00 - プロジェクトレビュー

以上です。よろしくお願いします!

→ 出力:FinalMessageText


💬 STEP4:チャット投稿(PostToChat.padx)

1. SlackまたはTeamsの投稿画面を開く

  • config["chatUrl"] を使用
  • chrome.exe --profile-directory="Profile 2" URL で起動

2. テキスト入力欄を検出

  • DOMセレクタ指定
    • Slack:div.ql-editor
    • Teams:div[data-text="true"]

UI要素取得が困難な場合は、TAB+Ctrl+Vによるキーボード操作でも代用可

3. メッセージ貼付&送信

クリップボードに FinalMessageText を設定
→ UI要素にフォーカス
→ Ctrl+V(貼り付け)
→ Enter(送信)

🧷 応用Tips

✅ 複数予定のテーブル抽出

  • Googleカレンダーの構造は更新が多いので、
    • 時間 → span[jsname="huwtOb"]
    • タイトル → div[role="presentation"] div[data-eventchip]
      を組み合わせて取得がおすすめ

✅ Chromeプロファイルでログイン維持

  • 複数アカウントがある環境でもログイン状態を保持できる
  • --profile-directory="Profile名" を必ず明示

✅ Slack / Teams の安定投稿

プラットフォーム投稿UIの特徴操作方法
Slack(Web)エディタにフォーカス必要Ctrl+V+Enter
Teams(Web)textarea + 送信ボタン形式TAB→貼付→TAB→Enter が安定

📋 テスト手順(5分で確認)

  1. Google Chromeで対象プロファイルでカレンダーにログイン済にしておく
  2. calendarUrl/day 表示に指定(1日分予定だけ)
  3. item_list.xlsxなし → 手動で予定登録して確認
  4. SlackまたはTeamsで手動投稿画面を開いてからフロー起動
  5. 正しく予定が投稿されるか確認

❓ よくある質問(FAQ)


Q1. カレンダーAPIの方が安定では?

A. たしかにAPIの方が正式ですが、APIは認可・アクセストークン・設定が面倒。本フローは純ブラウザ操作で簡単導入可能なのが特徴です。


Q2. メッセージが途中で切れる?

A. SlackやTeamsは長文でも投稿できますが、改行・絵文字・特殊文字のエスケープ処理に注意が必要。template.txtを編集して調整してください。


Q3. DOMが変わって動かない!

A. セレクタ変更が頻繁な場合は、「画像認識」や「表示テキスト検出(例:”終日”など)」と組み合わせて堅牢にしてください。


Q4. 予定がない場合も投稿したい

A. EventListが空だった場合に "予定はありません" と設定すれば対応可能です。

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

この記事を書いた人

目次