はじめに
ごきげんよう、百合宮桜(Miyu)です💛
Microsoft 365 Copilot Business のライセンスを持っていると、Teams 会議をした時に Copilot が会議のメモを取り、概要をまとめてくれます。
これは非常に便利な機能ですが、会議ごとに作成されるため、「○○ について話し合った会議はどれだっけ?」となった時に検索しにくいという欠点があります。そこで今回は会議のメモを1つのノートブック(OneNote)に集約し、検索や振り返りの利便性を高めるフローを紹介します。
本フローはフロー利用者(開発者と実行者)・OneNote 閲覧者の両方が以下のライセンスを持っていることが前提です。
- Microsoft 365 Copilot Business
- Power Automate for Office 365
上記ライセンスを保持していない人に提供する場合、ライセンス規約に 違反 する可能性がございます。ご注意ください。なお、ライセンス周り(例 このように記載している理由や回避方法など)に関しまして、コメントや SNS などでお問い合わせ頂きましても、回答いたしかねます。不安な場合は信頼のおけるライセンスベンダーに必ずご確認ください。
やりたいこと
会議終了後にその Teams 会議の AI 分析の概要 を OneNote に転記します。
このフローを作ると、OneNote に Teams 会議の AI 分析の概要をコピー&ペーストする作業が不要になるので、会議内容をまとめる時間の短縮が期待できます。
前提条件
以下2点をご確認ください。
-
OneNote のノートブックに Teams 会議のメモ(AI 分析の概要)を転記する用の セクション があること
-
フローの実行に必要なライセンスが揃っていること
- Microsoft 365 Copilot Business(Power Platform Connectors in Microsoft 365 Copilot)
- Power Automate for Office 365
実装方法
今回のフローは、以下の4ステップで実装しました。
- AI 分析の概要を取得する
- 会議のメモを加工する
- フォローアップタスクを加工する
- OneNote に転記する
フロー全体の構成は以下の通りです。
アクション名は「何のためのアクションか - 元のアクション名」という形に変更しています。
後からフローを見直した時に、どのアクションが何をしているのか一目で分かるのでおすすめです (*'▽')
1つずつ説明します。
AI 分析の概要を取得する
まずは Teams 会議の AI 分析の概要(会議のメモやフォローアップタスク)を取得します。
1. トリガーを設定する
トリガーは 「手動でフローをトリガーします」 を利用しています。
Power Automate の「作成」から インスタント クラウド フロー を選び、トリガーに「手動でフローをトリガーします」を選択してください。
ボタンを押した時にフローが動くので、会議が終わって AI 分析の概要ができあがった後に、好きなタイミングで実行できます。
2. 会議の情報を取得する
AI 分析の情報を取得するには、まず どの会議の AI 分析を取得するのか を指定する必要があります。
そこで Microsoft Teams コネクタの 「オンライン会議を取得します」 アクションで、会議の情報を取得します。
設定は以下の通りです。
| 項目 | 設定値 |
|---|---|
| Lookup Type(検索の種類) | 会議参加ID(会議コード) |
| Lookup Value(検索する値) | 会議参加 ID の値(例:123456789123456) |
会議参加 ID (会議コード)は Teams 会議の招待状(Outlook の予定の本文)に記載されている 「会議 ID: 123 456 789 123 456」 のような数字です。
スペースを削除して 数字だけを入力してください。
会議 ID にスペースが入ったままだと、会議が見つからずエラーになります。ご注意ください。
3. AI 分析情報の一覧を取得する
次に Microsoft Teams コネクタの 「AI 分析情報の一覧表示」 アクションで、会議に紐づいている AI 分析情報の一覧を取得します。
会議 ID には、前のステップで取得した会議の ID(動的なコンテンツ)を入れます。
outputs('AI_分析概要がある会議を取得-オンライン会議を取得します')?['body/id']
4. AI 分析情報の中身を取得する
一覧表示アクションで取得できるのは、AI 分析情報の ID の一覧 だけです。
中身(会議のメモやフォローアップタスク)を取得するには、Microsoft Teams コネクタの 「AI 分析情報の取得」 アクションを利用します。
| 項目 | 設定値 |
|---|---|
| 会議 ID | オンライン会議を取得しますの ID(ステップ3と同じ) |
| AI 分析情報 ID | 下記の式 |
AI 分析情報 ID には Fx ボタンをクリックし、以下の式を入れています。
first(outputs('AI_分析情報の一覧表示')?['body/value'])?['id']
一覧表示アクションの結果は 配列(複数のデータが入った箱)で返ってきます。
そのまま入れるとアクションが自動で「それぞれに適用する」で囲まれてしまうので、first 関数で 最初の1件の ID だけ を取り出しています。
今回は単発会議を想定しているので first 関数を用いています。週次定例会議のような繰り返しの予定で行われる会議は別の方法を考える必要があります。
「AI 分析情報の取得」アクションでは、主に以下のようなデータが取得できます。
| データ | 中身 |
|---|---|
meetingNotes |
会議のメモ(大見出し) |
meetingNotes の中の subpoints
|
会議のメモ(小見出し) |
actionItems |
フォローアップタスク |
ここまでで AI 分析の概要の取得は完了です。
ただし、このままでは OneNote へ貼り付けられる形になっていないので、次のステップから加工していきます。
会議のメモを加工する
まずは、会議のメモの どこが大見出しで、どこが小見出しなのか を確認しましょう。
Teams 会議の「要約」にある AI 分析の概要では、会議のメモが下図のように表示されています。
| 名前 | 画面上の場所 | 例 |
|---|---|---|
| 大見出し | 「▼」の横にある 太字 の部分(コロン「:」の前) | PADとComputer Useの比較 |
| 大見出し本文 | 大見出しのコロン「:」の 後ろ に続く文章 | ○○は、connpassでPowerAutomate45の次回開催日とURLを取得する同一作業を…… |
| 小見出し | 大見出しの下にある、「・」付きの字下げされた行 の 太字 の部分(コロン「:」の前) | PADの仕組み |
| 小見出し本文 | 小見出しのコロン「:」の 後ろ に続く文章 | PADでは、Edgeの起動、検索欄へのPowerAutomate45の入力…… |
つまり、会議のメモは 「話題のまとまり(大見出し)」ごとに、その詳細(小見出し)がいくつかぶら下がっている という構成になっています。
上の例では、大見出し「PADとComputer Useの比較」の下に、小見出しが4つ入っています。
「AI 分析情報の取得」アクションで取得したデータでは、それぞれ以下の名前で入っています。
meetingNotes(大見出しの一覧)
├─ title:大見出し
├─ text:大見出し本文
└─ subpoints(小見出しの一覧)
├─ title:小見出し
└─ text:小見出し本文
| 画面上の名前 | データの名前 |
|---|---|
| 大見出し |
meetingNotes の title
|
| 大見出し本文 |
meetingNotes の text
|
| 小見出し |
subpoints の title
|
| 小見出し本文 |
subpoints の text
|
subpoints は meetingNotes の 中 に入っています。
このように、データの中にさらにデータが入っている形を 入れ子(ネスト)構造 と呼びます。
これを OneNote で読みやすい形にするため、HTML(Web ページを作るための言語)に変換して、1つの文字列にまとめます。
完成イメージは以下の通りです。
▼ 大見出し:大見出し本文
・小見出し:小見出し本文
・小見出し:小見出し本文
▼ 大見出し:大見出し本文
・小見出し:小見出し本文
1. 文字列変数を用意する
加工した会議のメモを入れておくための箱として、「変数を初期化する」 アクションで文字列変数を用意します。
| 項目 | 設定値 |
|---|---|
| Name(名前) | MeetingNotesText |
| Type(種類) | String(文字列) |
| Value(値) | 空欄のまま |
変数を初期化するアクションは、繰り返し処理(それぞれに適用する)の中では使えないので、繰り返し処理の前 に用意しておく必要があります。
2. 大見出しを1つずつ取り出す
会議のメモには大見出しが複数あるので、「それぞれに適用する」 アクションで1つずつ順番に取り出して処理します。
「前のステップから出力を選択します」には「AI 分析情報の取得」アクションの meetingNotes を入れます。
outputs('AI_分析情報の取得')?['body/meetingNotes']
3. 大見出しを変数に追加する
「それぞれに適用する」の中に 「文字列変数に追加」 アクションを入れて、大見出しを MeetingNotesText に追加します。
| 項目 | 設定値 |
|---|---|
| Name(名前) | MeetingNotesText |
| Value(値) | 下記の式 |
concat(
'<p><strong>▼ ',
item()?['title'],
':</strong>',
item()?['text'],
'</p>'
)
concat 関数は、複数の文字をつなげて1つの文章にする関数です。
item() は「それぞれに適用する」で今取り出しているデータ(ここでは大見出し1つ分)を表しています。
item()?['title'] が 大見出し、item()?['text'] が 大見出し本文 です。
HTML のタグの意味は以下の通りです。
| タグ | 意味 |
|---|---|
<p>~</p>
|
1つの段落 |
<strong>~</strong>
|
太字 |
つまり、「▼ タイトル:」の部分を太字 にした段落を作っています。
4. 小見出しを1つずつ取り出して変数に追加する
1つの大見出しの下には小見出しが複数あるので(上の例では4つ)、大見出しの中にある小見出しを取り出すため、「それぞれに適用する」の 中に、もう1つ「それぞれに適用する」 を入れます。
「前のステップから出力を選択します」は、上記スクリーンショットのように動的な値を選択するか、以下の式を入れます。
items('meetingnotes-それぞれに適用する')?['subpoints']
items('アクション名') は、指定した「それぞれに適用する」で今取り出しているデータを表しています。
繰り返し処理が2重になっているので、外側の繰り返し処理(大見出し)の subpoints を指定するために、アクション名を指定しています。
items() の中には、外側の「それぞれに適用する」のアクション名 を入れてください。アクション名に含まれる半角スペースは、式の中では _(アンダーバー)に置き換わります。
内側の「それぞれに適用する」の中に 「文字列変数に追加」 アクションを入れて、小見出しを MeetingNotesText に追加します。
concat(
'<p style="margin-left:20px;">・<strong>',
item()?['title'],
':</strong>',
item()?['text'],
'</p>'
)
ここでの item() は小見出し1つ分を表しているので、item()?['title'] が 小見出し、item()?['text'] が 小見出し本文 です。
大見出しとの違いは style="margin-left:20px;" の部分です。
これは CSS(見た目を整えるための言語)で、左側に 20px の余白を入れて、字下げ(インデント) しています。
これで大見出しと小見出しの区別がつきやすくなります。
5. 大見出しごとに改行を入れる
最後に、外側の「それぞれに適用する」の中(内側の「それぞれに適用する」の 後)に 「文字列変数に追加」 アクションを入れます。
| 項目 | 設定値 |
|---|---|
| Name(名前) | MeetingNotesText |
| Value(値) | <br> |
<br> は HTML で 改行 を表すタグです。
大見出しのまとまりごとに1行空けることで、OneNote 上で読みやすくなります。
フォローアップタスクを加工する
次はフォローアップタスクを加工します。
フォローアップタスクは「誰が・何を・するのか」を一覧で見たいので、表(テーブル) の形にします。
1. 必要な項目だけを取り出す
データ操作コネクタの 「選択」 アクションで、フォローアップタスクから必要な項目だけを取り出し、列名を日本語に変更します。
「差出人」には「AI 分析情報の取得」アクションの actionItems を入れます。
outputs('AI_分析情報の取得')?['body/actionItems']
「マップ」には以下のように設定します。左側が表の列名、右側が値です。
| キー(列名) | 値 |
|---|---|
| タスク名 | item()?['title'] |
| 内容 | item()?['text'] |
| 担当者 | item()?['ownerDisplayName'] |
「選択」アクションを使うと、「それぞれに適用する」を使わなくても、配列の中のデータをまとめて加工できます。
2. 表を HTML に変換する
データ操作コネクタの 「HTML テーブルの作成」 アクションで、前のステップで作ったデータを HTML の表に変換します。
| 項目 | 設定値 |
|---|---|
| From | 「選択」アクションの 出力 |
これで以下のような表ができあがります。
| タスク名 | 内容 | 担当者 |
|---|---|---|
| (タスクのタイトル) | (タスクの内容) | (担当者の氏名) |
ただし、このままだと OneNote へ貼り付けた時に 表の罫線が表示されません (´・ω・`)
罫線の追加は、次の「OneNote に転記する」で行います。
OneNote に転記する
いよいよ加工したデータを OneNote に転記します。
1. OneNote に記載する HTML を作成する
OneNote のページは HTML と CSS で表現できるので、「作成」 アクションで OneNote に記載するページの HTML を作ります。
OneNote コネクタの「セクションにページを作成」アクションに直接書くこともできますが、作成アクションに入れておくことで、後からレイアウトを変更する時のメンテナンスが楽になります。
作成アクションの入力には以下を入れています。
<html>
<head>
<title>【ページタイトル】</title>
<meta name="created" content="【ページ作成日時】"/>
</head>
<body>
<h1>会議内容</h1>
【会議のメモ】<br>
<h1>フォローアップタスク</h1>
【フォローアップタスク】
</body>
</html>
【】の部分には、以下の動的なコンテンツや式を入れます。
ページタイトル
「オンライン会議を取得します」アクションの 議題(会議のタイトル)を入れます。
outputs('AI_分析概要がある会議を取得-オンライン会議を取得します')?['body/subject']
ページ作成日時
OneNote ページの作成日時を日本時間で設定します。
concat(
convertTimeZone(
utcNow(),
'UTC',
'Tokyo Standard Time',
'yyyy-MM-ddTHH:mm:ss'
),
'+09:00'
)
utcNow() で取得できる現在日時は 世界協定時(UTC) なので、convertTimeZone 関数で日本時間に変換しています。
最後に +09:00 を付けることで、「この日時は日本時間ですよ」と OneNote に伝えています。
会議のメモ
「会議のメモを加工する」で作った変数 MeetingNotesText を入れます。
variables('MeetingNotesText')
フォローアップタスク
「フォローアップタスクを加工する」で作った HTML テーブルを入れますが、そのままだと罫線が表示されないので、以下の式で罫線を追加しています。
replace(
body('フォローアップタスク一覧をHTML化-HTML_テーブルの作成'),
'<table>',
'<table border="1">'
)
replace 関数は、文字を置き換える関数です。
HTML テーブルの <table> というタグを <table border="1"> に置き換えることで、表に罫線を追加 しています。
2. OneNote にページを作成する
最後に OneNote(Business)コネクタの 「セクションにページを作成」 アクションで、OneNote にページを追加します。
| 項目 | 設定値 |
|---|---|
| ノートブック キー | 転記先のノートブック |
| セクション ID | 転記先のセクション |
| ページ コンテンツ | 「作成」アクションの 出力 |
ノートブック キーとセクション ID は、プルダウンから選択できます。
これですべて完了です。
保存して、会議 ID を設定した会議の AI 分析の概要ができあがっていることを確認してから、フローを実行してみましょう (*'▽')
おわりに
今回は Teams 会議のメモ( AI 分析の概要)を OneNote に転記する方法を紹介しました。
OneNote への転記は HTML を利用することが多く、少しややこしいですが、とても便利です。ぜひ挑戦してみてくださいね✨





























