Formsアンケートの未回答者への催促をTeamsの個別チャットでやってみる

はじめに

社内でFromsのアンケートを使う際、こんな経験をしたことは無いでしょうか?

  • 質問者
    • 未回答者を探して未回答者に催促の連絡を送る
  • 回答者
    • アンケートに回答しても、しばらくすると「アンケートに回答して下さい」と催促が来る
    • 念のため回答したかを確認したら回答済みだった

そこで、質問者と回答者の工数を減らせないだろうかと考えて、回答済の人には催促せず、未回答者だけに催促するシステムを Power Automate で作ってみました。

システムの説明

アンケートの送信

Teams の「チーム」の「チャネル」で対象メンバーにアンケートを依頼します。チャネル内にアンケートへのリンク(URL)を貼り付けておきます。*1

アンケートは  Forms で作成しました。

アンケートへ回答

朝食についてのアンケートです。対象メンバーが回答します。朝食を食べたら、「食べた」をチェックして送信します。

未回答者に個別チャットで催促

未回答者に個別チャットを使って、自動的に回答を催促します。個別チャットで催促するので、アンケートを依頼した他のメンバーには催促を気づかれません。

みんな回答したら完了チャットでお知らせ

 アンケートの対象メンバーがみんな回答してくれたら、自動的に完了チャットが届きます。

システムの構築

システム概要

このシステムは Forms のアンケート、Teams、テーブル、Power Automateで構成されます。

テーブルは「アンケート」テーブルと「台帳」テーブルです。2つともExcelで作成します。

「アンケート」テーブル

アンケートを自動で投稿するための情報が登録されています。

  • No.
    • アンケートの識別子
  • 送信日時
    • アンケートの送信日時
  • チームID
    • Teamsでアンケートの投稿を掲載するチームの識別子
  • チャネルID
    • Teamsでアンケートの投稿を掲載するチャネルの識別子
  • アンケートを投稿したリンク
    • Teamsでアンケートを投稿したチャネルのリンク
  • 完了通知の送信先チャットのリンク
    • みんながアンケートに回答したら完了通知を送信するチャットのリンク
  • アンケートを投稿するチャネルのリンク
    • アンケートを投稿するチャネルのリンク
  • アンケートのURL
    • アンケートのFormsのURL
「台帳」テーブル

 アンケートの対象メンバーを指定するための情報が登録されています。

  • No. 
    • 通し番号
  • UPN 
    • メンバーのユーザープリンシパル名です。
    • Teams のメンション先やアンケートの回答者には、メールアドレスではなく、UPN を使っています
  • 姓 
    • メンバーの姓
  • 名 
    • メンバーの名
  • メールアドレス 
    •  メンバーのメールアドレス
  • アンケート対象
    • メンバーがアンケート対象なのかを登録。対象なら「対象」と登録。
  • 回答(回答有:有)
    • メンバーからアンケートに回答があったら「有」
  • 回答日時
    • メンバーからアンケートの回答があった日時
  • 個別チャット用リンク
    • メンバーとの個別チャットへのリンクを登録
Power Automate を使ったシステム構築

今回作成するフローの概要です。

  • (1)アンケートの作成
    • アンケートを Forms で作成
  • (2)テーブルの作成
    • 「アンケート」テーブルと「台帳」テーブルを作成する Power Automate を作成し、手動で実行してテーブルを作成
  • (3)テーブルへデータを登録
    • 「アンケート」テーブルと「台帳」テーブルにデータを登録する Power Automate を作成し、手動で実行して登録したり、質問者が直接登録します。
  • (4)アンケートの送信
    • アンケートを送信する Power Automate を作成し、自動的に送信
  • (5)アンケートの回答が来たら台帳へ登録
    • アンケートの回答を「台帳」テーブルに自動的に登録する Power Automate を作成
  • (6)未回答者に個別チャットで催促
    • 未回答者に自動的に個別チャットで自動的に催促する Power Automate を作成
  • (7)みんな回答したら完了チャットでお知らせ
    • 未回答者がいなくなったら自動的に個別チャットへ完了連絡する Power Automate を作成

アンケートの作成

Forms でアンケートを作成します。アンケートの作成後に、「設定」の下記をチェックします。それ以外はチェック不要です。

テーブルの作成

テーブルはExcelファイルに作成します。

今回はファイル名を「催促の自動化」とし、「Sheet1」シートに作成します。

そのテーブルに、Power Automate の Excel オンラインでアクセスしたいので、OneDriveに保存します。

今回は、OneDrive でデスクトップ同期を有効にした状態でPC のデスクトップ上に「催促の自動化」を作成したので、以下の OneDrive の階層へファイルが存在する状態になりました。


Power Automate のフローを作成して、手動で実行します。フロー名は「1.テーブルの作成」で以下の通りです。

(1) トリガーに 1回実行するだけなので、「手動でフローをトリガーします」を使います。

(2)「Excel Online」コネクタを使って「アンケート」テーブルを作成します。

OneDriveのExcel ファイルへの書き込み先は上記のように指定します。「列名」は「,」で区切ります。

(3)「Excel Online」コネクタを使って「台帳」テーブルを作成します。

 

完成した「アンケート」テーブル

B2の「アンケートテーブル」は登録されません。こちらで便宜上設定しました。

完成した「台帳」テーブルです。

B7の「台帳テーブル」は登録されません。こちらで便宜上設定しました。

テーブルへデータを登録

 「アンケート」テーブルへ初期値を登録します。それから Power Automate を手動で実行し登録します。

最後に「台帳」テーブルへアンケートを送りたいメンバーの情報を登録します。

「アンケート」テーブルへ初期値を登録
「No.」列

「1」を登録します。

「完了通知の送信先チャットのリンク」列

みんなが回答したら完了チャットを送信する個別チャットを登録します。今回はアンケートの投稿者である自分の個別チャットへのリンクを設定します。

例えば、ブラウザで「teams.microsoft.com」を入力するとTeamsが開きます。取得したい個別チャットをクリックし、URLをコピーしてメモ帳に貼り付けます。

URLを「https://teams.microsoft.com/_#/conversations/4@@@@@@@:ries?ctx=chat」とすると、「https://~conversations/」から「?」までの間の「4@@@@@@@:ries」をコピーして、「完了通知の送信先チャットのリンク」へ貼り付けます。

「アンケートを投稿するチャネルのリンク」列

今回は、チャネル「998.お砂場」を使います。Teamsのチャネル「998.お砂場」をクリックします。チャネル右の「・・・」をクリックし、「チャネルへのリンクを取得」をクリックします。   

下記画面で「コピー」をクリックし、「チャネルへのリンク」に貼り付けます。

「アンケートのURL」列

作成したアンケートのFormsを開き、「回答を収集」をクリックし、「リンクをコピー」をクリックします。アンケートテーブルの「アンケートのURL」に貼り付けます。

登録した「アンケート」テーブルはこちらです。

Power Automate で登録

「アンケート」テーブルと「台帳」テーブルへデータ登録を行うフローを作成し、手動で実行します。フロー名は「2.テーブルへデータ登録」で以下の通りです。

(1) トリガーに 1回実行するだけなので、「手動でフローをトリガーします」を使います。

(2)「Excel Online」コネクタを使って「アンケート」テーブルの「No.」列が「1」の行のデータを取得します。

(3)「データ操作」コネクタの「作成」アクションで、「入力」に「アンケートを投稿するチャネルのリンク」を設定します。

(4) (3)同様のアクションで、「入力」に「式」で「decodeUriComponent(outputs('作成'))」を設定します。

(5) (3)同様のアクションで、「入力」に「式」で「split(outputs('作成_2'),'/')」を設定します。

(6) (3)同様のアクションで、「入力」に「式」で「outputs('作成_3')[5]」を設定します。アクション名を「チャネルID」に変更します。

(7) 「テキスト関数」アクションで、「テキスト」に「式」で「outputs('作成_3')[6]」を設定します。「検索テキスト」に「groupId=」を設定します。

(8) (7)同様のアクションで、「テキスト」に「式」で「outputs('作成_3')[6]」を、「開始位置」に「式」で「add(outputs('テキストの位置の検索')?['body'],8)」を設定します。

(9) (3)同様のアクションで、「式」で「split(outputs('部分文字列')?['body'],'&')[0]」を設定します。アクション名を「チームID」に変更します。

(3)~(9)で、「アンケートテーブル」の「アンケートを投稿するチャネルのリンク」を読込み、「チャネルID」と「チームID」を取り出します。

(10)「Excel Online」コネクタを使って、「アンケート」テーブルの「No.」列が「1」の行を更新します。「チームID」に(9)の出力を、「チャネルID」に(6)の出力を設定します。

(11)「Microsoft Teams」コネクタを使い、「チーム」に(9)の出力を設定します。

(12)「Office 365 Groups」コネクタを使い、(11)の出力の「チームID」を設定します。

(13)「変数」コネクタを使い、「名前」に「ナンバー」を、「種類」に「整数」を、「値」に「0」を設定します。

(14)「コントロール」コネクタの「それぞれに適用する」アクションを使い、「以下の手順から出力を選択」で、(12)の出力の「value」を設定します。

(15)「変数」コネクタを使い、「名前」に「ナンバー」を、「値」に「1」を設定します。

(16)「Excel Online」コネクタを使って、「台帳」テーブルの「No.」列に(15)の出力の「ナンバー」を、「UPN」列に(12)の出力の「ユーザープリンシパル名」を、「姓」列に(12)の出力の「姓」を、「名」列に(12)の出力の「名」を、「メールアドレス」列に(12)の出力の「メールアドレス」を設定します。

(14)~(16)で、(12)の出力から、1件ずつ読込み、通し番号の「ナンバー」列の値に 1を足した値を追加して、「台帳」テーブルに追加しています。(12)の出力が終わるまで繰り返します。

「台帳」テーブルへアンケートを送りたいメンバーの情報を登録

「台帳」テーブルを見て、アンケートを送りたいメンバーの「アンケート対象者」列に「対象」と登録します。

次に「個別チャット用リンク」列へ、「「アンケート」テーブルへ初期値を登録」の「完了通知の送信先チャットのリンク」列に設定したのと同様の方法で作成したものを「個別チャット用リンク」へ貼り付けます。

アンケートの送信

アンケートを送信するフローを作成します。フロー名は「3.アンケートの送信」で以下の通りです。

(1) 自動的にアンケートを送信するため、「スケジュール」コネクタの「繰り返し」アクションを使います。今回は、2023年1月31日火曜日10時スタートで毎週火曜日10時にアンケートを送信する設定をします。

「間隔」に「1」を、「頻度」に「週」を、「タイムゾーン」に日本のタイムゾーンを、「開始時刻」に「2023-01-31T10:00:00Z」を、「設定曜日」に「火曜日」を、「設定時刻(時)」に「10」を設定します。

(2)「Excel Online」コネクタを使って「アンケート」テーブルの「No.」列が「1」の行のデータを取得します。

(3)「Excel Online」コネクタを使って「台帳」テーブルの「アンケート対象」列が「対象」のデータを取得します。

(4)「変数」コネクタを使い、「名前」に「メンション」を、「種類」に「アレイ」を設定します。

(5)「コントロール」コネクタの「それぞれに適用する」アクションを使い、「以下の手順から出力を選択」で、(3)の出力の「value」を設定します。

(6)「Microsoft Teams」コネクタを使い、「ユーザー」に(3)の出力の「UPN」を設定します。

(7)「変数」コネクタを使い、「名前」に「メンション」を、「値」に(6)の出力の「@mention」を設定します。

(5)~(7)でアンケートを送りたいメンバーのUPNを「メンション」配列に設定していきます。

(8)「データ操作」コネクタを使い、「結合する配列」に「メンション」配列を、「次を使用して結合」に「,」を設定します。

(9)「コントロール」コネクタの「条件」アクションを使います。

(2)の出力の「送信日時」に値が設定されていないことempty(outputs('行の取得')?['body/送信日時'])に値が設定されていないこと)、

かつ、(8)の出力の「メンション」に値が設定されていること(empty(variables('メンション'))に値が設定されていること)であれば、「はいの場合」に進みます。

(10)「Microsoft Teams」コネクタを使い、「投稿者」に「ユーザー」を、「投稿先」に「Channel」を、「Teams」に(2)の出力の「チームID」を、「Channel」に(2)の出力の「チャネルID」を、「Message」に、アンケート対象者への案内文のメンション先として、(8)の出力を設定し、案内文を記入します。

最後に(2)の出力の「アンケートのURL」を設定します。「アンケートのURL」はリンクを貼るので<a>タグを設定します。

(11)「日時」コネクタを使い、現在の時刻を取得します。

(12)「日時」コネクタを使い、「基準時間」に(11)の出力の「現在の時刻」を設定します。「書式設定文字列」を設定します。「変換元のタイムゾーン」に「(UTC)協定正解時」を、「変換先のタイムゾーン」に日本のタイムゾーンを設定します。

(13)「Excel Online」コネクタを使って、「アンケート」テーブルの「No.」列が「1」の行を更新します。「送信日時」に(12)の出力の「変換後の時間」を、「アンケートを投稿したリンク」に(10)の出力の「メッセージリンク」を設定します。

アンケートの回答が来たら台帳へ登録

アンケートの回答が来たら「台帳」テーブルに登録するフローを作成します。フロー名は「4.アンケートの回答が来たら台帳へ登録」で以下の通りです。

(1) トリガーに「Microsoft Forms」コネクタの「新しい応答が送信されるとき」を使います。「フォームID」で「朝食の調査」を選択します。「朝食の調査」は Forms 作成時の以下の部分です。

(2)「Microsoft Forms」コネクタを使い、「フォームID」で「朝食の調査」を選択し、「応答ID」に(1)の出力の「応答ID」を設定します。

(3)「Excel Online」コネクタを使って「台帳」テーブルの「アンケート対象」列が「対象」のデータを取得します。

(4)「コントロール」コネクタの「それぞれに適用する」アクションを使います。「以前の手順から出力を選択」で(3)の出力の「value」を設定します。

(5)「コントロール」コネクタの「条件」アクションを使います。(2)の出力の「Responder」と(3)の出力の「UPN」を 1件ずつ比較し、等しい時は「はいの場合」に進みます。

(6)「はいの場合」で、「Excel Online」コネクタを使って、「台帳」テーブルの「UPN」列が(3)の出力の「UPN」の行を更新します。「回答(回答有:有)」に「有」を、「回答日時」に式で「addHours(outputs('応答の詳細を取得する')?['body/submitDate'],9,'yyyy/MM/dd HH:mm:ss')」を設定します。

(4)~(6)でアンケートの回答から回答者のUPNを取り出し、「台帳」テーブルの「UPN」列に合致したら、そのメンバーから回答があったことといつあったかを設定します。

未回答者に個別チャットで催促

未回答者に個別チャットで催促するフローを作成します。フロー名は「5.未回答者に個別チャットで催促」で以下の通りです。

(1)アンケートの未回答者が存在するか「台帳」テーブルを定期的にチェックして、未回答者がいたら個別チャットで催促します。「スケジュール」コネクタの「繰り返し」アクションを使います。今回は、アンケートを送信したのが2023年1月31日火曜日で、翌週月曜日10時から毎週月曜日10時にアンケートの未回答者に個別チャットで催促する設定をします。

「間隔」に「1」を、「頻度」に「週」を、「タイムゾーン」に日本のタイムゾーンを、「開始時刻」に「2023-02-03T01:00:00Z」を、「設定曜日」に「月曜日」を、「設定時刻(時)」に「10」を設定します。

(2)「Excel Online」コネクタを使って「台帳」テーブルの「アンケート対象」列が「対象」のデータを取得します。

(3)「コントロール」コネクタの「それぞれに適用する」アクションを使います。「以前の手順から出力を選択」で(2)の出力の「value」を設定します。

(4)「コントロール」コネクタの「条件」アクションを使います。(2)の出力の「回答(回答有:有)」列が「有」と等しくない時は「はいの場合」に進みます。

(5)「はいの場合」で、「Excel Online」コネクタを使って、「アンケート」テーブルの「No.」列が「1」の行を取得します。「DateTime形式」に「ISO 8601」を設定します。

(6)「Microsoft Teams」コネクタを使い、「投稿者」に「ユーザー」を、「投稿先」に「Group Chat」を、「Group Chat」に(2)の出力の「個別チャット用リンク」を、「Message」に、アンケートの未回答者への案内文として、「式」で「formatDateTime(outputs('行の取得')?['body/送信日時'], 'yyyy/MM/dd HH:mm:ss')」を、アンケートの投稿先として、(5)の出力の「アンケートを投稿したリンク」を、最後に(5)の出力の「アンケートのURL」を設定します。リンクを貼る所は<A>タグを設定します。

<注意>

(6)ですが、「Microsoft Teams」コネクタを使い、そのまま設定していくと以下になります。

これで実行するとなぜかリンクが外れた状態で「チャット」してしまいます。「チーム」の「チャネル」の時はリンクが外れませんでしたが、「チャット」の時は外れてしまうようです。

ですので、以下の赤枠をクリックします。

以下になります。

赤線の「&lt;」→「<」、「&gt;」→「>」のように変更します。

これで実行するとちゃんとリンクが貼れるようになります。

みんな回答したら完了チャットでお知らせ

みんな回答したら完了チャットでお知らせするフローを作成します。フロー名は「6.みんな回答したら完了チャットでお知らせ」で以下の通りです。

(1)アンケートを送ったメンバーがみんな回答したか「台帳」テーブルを定期的にチェックして、みんな回答したら、完了連絡を個別チャットで送ります。「スケジュール」コネクタの「繰り返し」アクションを使います。今回は、1時間間隔で、定期的にチェックする設定をします。

「間隔」に「1」を、「頻度」に「時間」を、「タイムゾーン」に日本のタイムゾーンを、「開始時刻」に「2023-02-03T01:00:00Z」を設定します。

(2)「Excel Online」コネクタを使って「台帳」テーブルの「アンケート対象」列が「対象」のデータを取得します。

(3)「変数」コネクタを使い、「名前」に「アンケート対象者の数」を、「種類」に「整数」を、「値」に「0」を設定します。

(4)「変数」コネクタを使い、「名前」に「回答者の数」を、「種類」に「整数」を、「値」に「0」を設定します。

(5)「コントロール」コネクタの「それぞれに適用する」アクションを使います。「以前の手順から出力を選択」で(2)の出力の「value」を設定します。

(6)「コントロール」コネクタの「条件」アクションを使います。(2)の出力の「アンケート対象」列が「対象」と等しい時は「はいの場合」に進みます。

(7)「変数」コネクタを使い、「名前」に「アンケート対象者の数」を、「値」に「1」を設定します。

(8)「コントロール」コネクタの「条件」アクションを使います。(2)の出力の「回答(回答有:有)」列が「有」と等しい時は「はいの場合」に進みます。

(9)「変数」コネクタを使い、「名前」に「回答者の数」を、「値」に「1」を設定します。



(10)「コントロール」コネクタの「条件」アクションを使います。(7)の出力の「アンケート対象者の数」と(9)の出力の「回答者の数」が等しく、かつ、(9)の出力の「回答者の数」が「0」より大きい時は、「はいの場合」に進みます。

(11)「はいの場合」で、「Excel Online」コネクタを使って、「アンケート」テーブルの「No.」列が「1」の行を取得します。

(12)「Microsoft Teams」コネクタを使い、「投稿者」に「ユーザー」を、「投稿先」に「Group Chat」を、「Group Chat」に(2)の出力の「完了通知の送信先チャットのリンク」を、「Message」に、みんなからアンケートの回答が来た案内文を設定します。

トピック

アンケートの Teams への投稿先を変えてアンケートを送信したい

アンケートを変えてアンケートを送信したい

アンケートの対象者を変えてアンケートを送信したい

おわりに

長文失礼しました。最後まで読んでいただきありがとうございました。

初心者から始めた Power Automate でした。

思ったよりたくさんの情報がネットに溢れていたので助かりましたが苦労もありました。

  • 上述になりますが、Power Automateを使って、Teams の「チャネル」に投稿する時はリンクがちゃんと貼れるのですが、「チャット」ではなぜかリンクが外れてしまい、びっくりしました。
  • Excel オンラインの「台帳」テーブルへアンケートを送りたいメンバーの情報を登録して、そのメンバーにだけメンションしますが、登録したメンバーが反映されずメンションできないことがありました。どうやら、登録しても「Excel Online」コネクタで指定した「台帳」テーブルに反映されるまでに時間がかかってしまうようで、最長 5分くらいかかることがありました。あれ!?この前はできていたのに何で?と悩みました。

初心者だと苦労することが多いですが、今は達成感があって心地よいです。

*1:対象メンバーをまとめて送信しようとして、タグを使おうとしましたが、権限がなくて使えず、メンバーひとりひとりをまとめて送信することにしました。

執筆担当者プロフィール
鈴木 功

鈴木 功(日本ビジネスシステムズ株式会社)

中部モダンワークプレイス部に所属。エンジニア歴数十年ですが、Microsoft 365初心者です。

担当記事一覧