Excelのリストを元にPower AutomateでTeamsに複数のグループチャットを作成する

新入社員研修ではグループワークなどのためにグループチャットを用意する必要があります。

例年、新入社員研修自身で実施してもらっていたのですが、管理の手間など考えた際に管理者側でまとめてやってしまった方が早いのでは、と考えました。

元になるExcelのメンバーリストとグループリストさえあればPower Automateでの自動化も簡単そうだったので、実際にやってみました。

Excelでメンバー表とグループ表を用意する

以下の様なデータをExcelで用意します。

メンバー表

Mail Group
Test01@example.com A
Test02@example.com A
Test03@example.com B
Test04@example.com B
Test05@example.com B

グループ表

Group
A
B

フローの大まかな構造を決める

まず、今回のメインとなるTeamsの「チャットの作成」アクションで必要なデータを考えます。

Excelのデータを元に、次のようなデータを生成すれば行けそうです。

  • 追加するメンバー
    • Test01@example.com; Test02@example.com
  • タイトル
    • GourpA

グループ表で読み取ったグループごとにメンバー表からメンバーを読み取り、セミコロンでつなげた文字列を用意すればよさそうだ、とあたりを付けました。

フローを作成する

では、方針に従って実際にフローを作成します。

トリガー

今回は単発の作業なので、「手動でフローをトリガーします」のトリガーを使います。

グループ表を読み取る

まずは、Excelの「表内に存在する行を一覧表示」アクションで、グループ表を読み取ります。

グループごとにメンバー表を読み取る

続いて、同じくExcelの「表内に存在する行を一覧表示」アクションで、グループごとにユーザー表からユーザーを読み取ります。

グループごとの読み取りにはフィルタークエリと繰り返しを使います。

チャットに追加するユーザーをセミコロンでつなげた文字列を用意する

注意点

実はここで結構苦戦しました。メンバー表から変数を使ってセミコロンつなぎの文字列を作成する際に、以下の様な形だと簡単に出来るのですが…

Test01@example.com; Test02@example.com;

上記の例の様に末尾にもセミコロンを付けてしまうと、Teamsの「チャットの作成」アクションで下記の様なエラーが出てしまいます。

Exception has been thrown by the target of an invocation.

これを回避して、末尾にセミコロンが付かない形でメンバーの一覧を作成するために、分岐や式を使いました。

変数の用意

二つの変数を用意します。

  • Member
    • 種類:文字列
    • 用途:冒頭で追加するメンバーをセミコロンでつなげた文字列を格納
    • 初期値:なし
    • 想定する値の例:Test01@example.com; Test02@example.com
  • MemberCount
    • 種類:整数
    • 用途:メンバーがリストの最後かどうかを判断するのに利用
    • 初期値:1
    • 想定する値の例:2

条件分岐の設定

条件分岐を使って、変数「Member」に文字列を設定していくのですが、前述の「末尾にはセミコロンを付けない」を実現するために少し複雑になっています。

まず、条件分岐の条件部分です。

ここでは、次の様な式を使い、グループごとのメンバーの数をlength式で読み取っています。

length(outputs('表内に存在する行を一覧表示:Member')?['body/value'])

今回でいえば、Aグループの時は2, Bグループの場合は3になります。

続いて条件を判定する部分ですが、MemberCount変数を使って、何人目のユーザーかをカウントしています。

初期値は1で、次のユーザーに行く前に1増やしています。

この二つの数字を使って、最後のユーザーだけを「いいえ」の分岐で処理します。

分岐の処理は以下の通りです。Excelで読み取ったメールアドレスの末尾にセミコロンを入れるかどうかだけが異なります。

変数のリセット

このままだと、後続のグループの処理に影響が出るので、一つのグループが終わったら変数をリセットします。(チャットの作成が入ってしまっていますが、後ほど説明します)

文字列生成の具体例

実際にどのような値が生成されるのかを一覧でまとめてみました。

繰り返し:グループ 繰り返し:メンバー 変数:Member 変数:MemberCount 分岐
1グループ目(A) 1人目 Test01@example.com; 1(初期値) はい
1グループ目(A) 2人目 Test01@example.com;Test02@example.com 2(メンバー数と同じ) いいえ
2グループ目(B) 1人目 Test03@example.com 1(リセット後の値) はい
2グループ目(B) 2人目 Test03@example.com;Test04@example.com; 2 はい
2グループ目(B) 3人目 Test03@example.com;Test04@example.com;Test05@example.com 3(メンバー数と同じ) いいえ

「チャットの作成」アクションを設定する

あとは、生成された文字列をTeamsの「チャットの作成」に入れるだけです。

補足・注意点

実行ユーザーとメンバー表

フローを実行したアカウント*1は、すべてのチャットグループにメンバーとして含まれる状態になります。

そのため、フローを実行するアカウント自体は、Excelのメンバー表から除外しておく必要があります。自分自身が入っている場合は以下の様なエラーが出ることがあります。

Duplicate chat members is specified in the request body.

チャット作成時の「メールアドレス」

「メールアドレス」と書かれていますが、メールアドレスとUPNが異なる組織の場合、実際には「UPN」の方を設定する必要があります。

おわりに

末尾にセミコロンが付いていてもグループチャットを作ることが出来れば楽だったんですが、その分勉強になりました。

今回と同じグループチャットの作成のシナリオでなくても、特定の条件で文字列の追加ルールを変えたい場合には参考になるのではないかと思います。お役に立てば幸いです。

*1:厳密にはこのフローのTeamsコネクタで使用されている接続で認証されているユーザー

執筆担当者プロフィール
舟越 匠

舟越 匠(日本ビジネスシステムズ株式会社)

人材開発部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。好きなサービスはPower Automate / Logic Apps。好きなアーティストはZABADAK。

担当記事一覧