Power Apps
PR

【Power Apps】カンファレンスの予定登録が面倒すぎるので、AIにテキストを丸投げしてOutlook登録するアプリを作ってみた

tantan_tech
記事内に商品プロモーションを含む場合があります

はじめに

Microsoft AI Tourなどの大型カンファレンスに参加する際、どのセッションを回るか悩みますよね。 公式のタイムテーブルはあっても、「自分が参加するセッションだけをOutlookに入れて、同行者にも空き状況や居場所を共有したい」と思うことはありませんか?

しかし、数十あるセッションの中から自分の行きたいものを選び、一つずつ「件名・時間・場所」をOutlookにコピペして登録するのはあまりにも面倒くさくて、気絶しそうです。 そこで今回は、「Webサイトのセッション情報を適当にコピペしたら、いい感じに整形してOutlookに一括登録してくれるアプリ」をPower Appsで作ってみました。

作ったアプリの概要

今回作成したアプリの全体像はこちらです。 今は機能検証用なので見た目は無骨ですが、やっていることは以下の4ステップです。

  1. Webサイトのセッション情報をテキストとしてコピー&ペーストする。
  2. AI Builder がテキストを読み取り、構造化データ(JSON)に整形する。
  3. 整形されたデータをPower Appsのギャラリーで一覧表示する。
  4. 参加したいセッションにチェックを入れ、ボタンを押すとOutlook予定表に一括登録される。

ポイントは、Power Automate(フロー)を使わずに、Power Appsの中だけで完結している点です。

技術的なポイント

このアプリの肝となる技術を少しだけ解説します。

1. AI Builder (GPT) によるテキスト整形 Webサイトからコピーしたテキストは、改行やスペースが含まれていて形式がバラバラです。これをPower Appsで扱いやすくするため、AI Builder(GPTモデル)に以下の指示を与えています。

AI Builderへの指示(Copilotで作成)
You are tasked with extracting specific event-related information from the provided text and formatting it for integration with Power Apps.

Instructions:

Analyze the input text carefully to identify and extract the following details for every event mentioned in the text:
Subject: The main topic or title of the event.
StartDatetime: The starting date and time of the event.
EndDatetime: The ending date and time of the event.
Place: The location where the event will take place.
Ensure that the extracted information is accurate and corresponds exactly to the details found in the input text.
Format the extracted data into a JSON array (list) of objects suitable for passing to Power Apps.
If any of the required fields are missing for a specific event, indicate their absence explicitly with a null or empty value.
Respond only with the valid JSON array without additional commentary.

Output Format:

Provide the output as a JSON array containing objects with the following keys:
"Subject": string or null
"StartDatetime": string or null (use ISO 8601 format if possible)
"EndDatetime": string or null (use ISO 8601 format if possible)
"Place": string or null
Example:
JSON[
  {
    "Subject": "Team Meeting",
    "StartDatetime": "2024-07-01T09:00:00",
    "EndDatetime": "2024-07-01T10:00:00",
    "Place": "Conference Room A"
  },
  {
    "Subject": "Project Review",
    "StartDatetime": "2024-07-01T13:00:00",
    "EndDatetime": "2024-07-01T14:00:00",
    "Place": "Online"
  }
]

Provide the input text here: Input Text

これにより、人間が読めるテキストを、アプリが処理できるデータ形式(JSON)に変換しています。

2. JSONのパースとコレクション化 AIが出力したJSON文字列を、Power Appsの ParseJSON 関数を使って読み取り、コレクション(アプリ内の一時テーブル)に格納します。これでギャラリーへの表示が可能になります。

Power FXコード
// 1. まずコレクションを初期化
Clear(colEvents);

// 2. JSONを解析して、ループ処理でコレクションに追加
// ParseJSON(varJsonString).events で "events" 配列にアクセスします
ForAll(
    Table(ParseJSON(varJsonString.Text).events), 
    Collect(
        colEvents,
        {
            Subject: Text(Value.Subject),
            // 日時は ISO形式なので DateTimeValue で日付型に変換
            StartDatetime: DateTimeValue(Text(Value.StartDatetime)),
            EndDatetime: DateTimeValue(Text(Value.EndDatetime)),
            Place: Text(Value.Place)
        }
    )
);

3. Outlookへの一括登録 チェックボックスにチェックが入っている項目に対して、ForAll 関数を使用し、Office365Outlookコネクタをループさせています。 Power Automateにデータを渡す必要がないため、アプリの動作も軽快で、実装もシンプルになります。

実際に使ってみて

これまで手作業で1つ1つ登録する、気絶してしまいそうな作業をしなくても良くなりました。何なら一旦全てのセッションをOutlookに一括で登録してしまって、重複してるものや休憩したい時間帯のセッションを削除してしまってもいいかもしれないです。

今回は自分用なのでUIは最低限ですが、本格的に運用するならデザインを整えてみたいです。 Power Platformを使えば、こうした「気絶しそうな場面」を数時間で解決できるのが楽しいですね。

ABOUT ME
tantan_tech
tantan_tech
淡々と改善している人
建設会社にて、現場の施工管理からDX推進、データ利活用や機械学習を経て、現在は社内の市民開発(Power Platform)を推進しています。
記事URLをコピーしました