Microsoft Forms で問い合わせが投稿されたら輪番で担当者のアサインとメンションを行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/83d6c7e0-923e-d5bb-6f3f-7bd35ea6db2b.png)

Microsoft Formsで作ったフォームに新規に投稿があった際に、Power Automateを使って自動で担当窓口にメールを送ったり、投稿内容を自動でTeamsに転記する等の自動化を実装したことがあるかたは多いと思います。

ですが、新規に問い合わせがあったことを単に担当者全員に通知しても「結局この問い合わせ対応は誰が担当するのか」などの譲り合いがおきたりして着手が滞る場合があります。問い合わせ対応が主業務でない場合はなおさらです。

問い合わせ対応が主業務ではないチームで問い合わせに対する初動を起こしやすくするために作成したのが掲題の「輪番での担当者アサイン」と「担当者へのメンション」の自動化です。

**自動でアサインされた担当者が主業務で忙しいため問い合わせの対応ができない場合は、「アサインされた担当者が、別の担当者に対応を引き取ってもらうよう調整する」**という運用ルールも合わせて取り入れると良いと思います。

フローをGitHubにアップロードしました。「問い合わせ一覧.xlsx」については後述します。
・フローをエクスポートしたzipファイル
・問合わせ一覧.xlsx（問い合わせ一覧テーブルと担当者一覧テーブル）

https://github.com/wataruf01/Microsoft365/tree/main/PowerAutomate_Flow/MentionToPersonInRotation

#フロー図
フロー全体の流れは下図の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/76ee4816-126e-54ff-ea2b-89a0f526e16e.png)

#説明
担当者一覧の定義はGitHubにアップロードしている「問合わせ一覧.xlsx」を使います。

このExcelファイルは「担当者一覧」と「問い合わせ一覧」という2つシートがあります。
それぞれのシートにはシート名と同じ名前のテーブルがあります。

##説明：担当者一覧
「担当者一覧」テーブルは、フローが輪番で担当者を指定するためのインプット情報として使います。最低限必要な列は「No」列と「担当者メールアドレス」列です。

「担当者名」列は運用でこのシートの更新を行うひとが分かりやすいように設けています。フローの処理には使いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/383a81ad-16ec-078a-4447-f3793b09d278.png)

**新規に問い合わせがあるとフローがNoの順番に担当者を指名します。** つまり、ある問い合わせがあったときにNoが1 のNestor Wike さんが指名されたら、次の問い合わせがあったときにはNoが2のMegan Bowenさんが指名されます。

そのように 3 → 4 → 5 → … と担当者が指名され、最後のNoまでたどり着くとまた1に戻ります。

##説明：担当者を輪番で指定する仕組み
下図のスコープ名の通り、**「問い合わせNo」÷「担当者数」＋1**という計算式で担当者Noを決めています。

「問い合わせNo」はMicrosoft Forms が既定で持っている、フォームごとの投稿IDを指しています。

「担当者数」は、担当者一覧テーブルの行数をフローで取得したものです。行数を取得するアクションは無いのでテーブル内で存在する行の一覧を取得したうえで、Apply to eachで行数を数えています。

最後に＋1をしている理由は、割り算をするときに余りが0というケースがあるためです。担当者一覧のNoの開始番号を1にしたいため、フローの計算結果に0がでないように1を足しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/4ae22008-f0d3-347b-18d0-1cd43f472d97.png)

##説明：問い合わせ一覧
「問い合わせ一覧」テーブルは、問い合わせがあった内容と担当者を記録するために使います。

このテーブルでは新規の問い合わせがあるたびにフローによって行を追加します。ですが、輪番での担当者指定のインプット情報としては使いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/5258fd74-8a85-c097-3689-254cc1a2466b.png)

#操作
フローのインポートと必要な設定について説明します。

##フローをインポートして編集画面を開く

フローの定義ファイルをインポートします。
・問い合わせが投稿されたら担当者に輪番でメンションする_20211014142439.zip

インポート手順：
https://docs.microsoft.com/ja-jp/learn/modules/administer-flows/2-flow-export-import

インポートが完了したら、フローの編集画面を開きます。
これから、トリガーとアクションに必要な設定を行います。この編集画面はこのまま開いた状態にして次の手順に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/ef87db2e-5beb-06df-6829-bdef1034243b.png)

##問い合わせフォームを作成する
問い合わせを受け付けるフォームを作成します。

Microsoft Forms を開いて、フォームを作成する対象のチームを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/5052a622-2fae-64be-a11f-9a544ec8a42b.png)

「新しいグループフォームの作成」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/bc91a0cb-936b-a988-9ce9-6a5cbeb61896.png)

質問項目を作成します。例としてここではテキスト入力の質問項目をひとつ作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/1cebe207-08d9-7606-da8e-f8b5f34a4942.png)

アドレスに表示されているURLの最後尾にあるFormIdをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/03c8a762-21e7-7526-360a-6d8b3b051552.png)

コピーしたFormIdをフローの2箇所に貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/89fb005d-3f2d-bcc9-6167-47dc19d26653.png)

##問い合わせ内容の「動的なコンテンツ」を再設定する
FormIdを変更した際はフォームに入力された値を表す「動的なコンテンツ」も合わせて再設定する必要があるようです。

該当するアクションはこの変数設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/e5459463-e8a7-44a0-7f53-24d923642d9f.png)

既に配置されている「動的なコンテンツ」は「×」をクリックして削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/bf06f3f3-2ebc-3b43-bd71-ab97365d9a92.png)

新しく「動的なコンテンツ」を配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/32f35715-5cb1-c912-d9d0-a249f7a6512f.png)

##担当者一覧を用意する
担当者一覧テーブルに輪番での担当者指定をするメンバーを記入します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/4efa8988-4271-ceca-c4f4-d4660c2dc3e6.png)

更新したExcelファイルをTeamsにアップロードします。
どのチャネルにファイルを置くかは特に制約は無いですが、Power Automateによる投稿を行うチャネルに置くと分かりやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/7f2d8bff-7dad-da9d-df5c-be4c06f1cf25.png)

フローの編集画面で、先ほどアップロードしたExcelファイルにある「担当者一覧」テーブルを参照するように設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/e34c0ea7-f9ed-18a2-6a89-1bc1180e6e45.png)

同様に「問い合わせ一覧」テーブルを参照するようにファイルパスやテーブルの参照設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/e839dde3-b16f-a6dc-6207-1b8d967ff861.png)

##投稿先のチャネルを指定
フローの最後のアクションとしてチャネルへの投稿を行います。投稿先のチームとチャネルをドロップダウンから指定します。指定が完了したらフローを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/f7784f0d-2786-809b-2bbc-a2c7610c9bc1.png)

インポートしたフローは既定でオフになります。そのため、フローをテスト実行する前にオンにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/7b7ca9c0-6dc9-b71d-3f67-4bd6a13958c5.png)

#テスト実行
フォームに問い合わせ内容を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/a075ccc6-1a78-6d7c-4cd1-bf7ad29b0738.png)

送信しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/dd74530a-f5c9-b954-c8c5-38b0bf02755e.png)

フローによって投稿が行われたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/299f2b62-9d65-b988-7f0a-9caae75765e2.png)

問い合わせNoは1です。
フローが 1（問い合わせNo）を6（担当者の人数）で割った余りに1を足した「2」を担当者一覧テーブルの「No」列から探します。その結果、「No」列の2にあたるメンバーがメンションされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/ba8c3f1a-fef6-c8ad-f86f-22c7ceb83b9e.png)

「問い合わせ一覧」テーブルにも自動で行が追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/6bcb2b20-b7e2-db62-ca49-8f6b31fe3896.png)

#最後に
今回のフローでは担当者一覧をメンテナンスしやすいようにExcelのテーブルをインプット情報としています。ですが、メンションの対象が特定の人物に紐づかないメールアドレスであったり、メンテナンスを行うひとがフローの操作を理解しているひとであれば、フロー内で担当者を定義することもできます。