皆さん、こんにちは。
業務ハックLabのよ~よんです。
突然ですが皆さんは業務でアンケートを取ったりすることはありますか?
Microsoft Formsを利用すると簡単にアンケートの作成ができるし、社内の人間に対してのアンケートだった場合、ユーザー名も自動で取得できるので私は非常に重宝しています。
ただ、注意しなきゃいけないのは回答期限が少し先に設定されているアンケートです。
リマインダーをかけるにしても往々にして忘れがちです。
そんなわけでアンケートを出したあと定期的に未回答者にのみリマインダーを飛ばすフローを作成してみました。
今回のアンケートリマインダーフローを使うストーリーですがこんな感じです。
ストーリー
定期的に交通安全動画を社内で配信、動画視聴後、アンケートに答えることで、
動画視聴したと判定。
- 動画は木曜日の朝に配信される
- 翌日の金曜日までに動画視聴を必須とし、アンケート未回答者のみに
8:00と12:00にリマインダーを飛ばす。 - 対象者は300名
事前に準備するデータ
フロー結果の受け皿用Excelデータ
- アンケート対象者の一覧
User列:対象者のメールアドレスを入力
DisplayName列:対象者の氏名を入力
Status列:フローで自動記入
Remaind列:フローで自動記入 - 動画URLシート
Movie_Key列:1と入力
Movie_URL列:動画の共有用URLを入力 - FormsURLシート
Forms_Key列:1と入力
Forms_URL列:Formsアンケートの共有用URLを入力 - FormsURLシート
Movie_TitleKey列:1と入力
Movie_Title列:動画のタイトルを入力
ではまずアンケートに答えたかどうかを判定するためのフローを作成します。
Formsアンケート回答取得フロー作成方法
- まずマイフローを選択し「新規」メニューから「自動-一から作成」をクリックして下さい。
- フロー名に任意の名前を付け、Microsoft Formsコネクタの「新しい応答が送信されるとき」を選択し、作成をクリックして下さい。
- トリガーが作成されるのでフォームIDで先ほど作成したFormsアンケートを選択して下さい。
- 次にMicrosoft Formsコネクタから「応答の詳細を取得する」を選択し、フォームDには先程のFormsアンケート、応答IDには「新しい応答が送信されるとき」で作成された応答IDを選択して下さい。
- 次にExcel Online(Business)コネクタから「行の更新」を選択し、下記のように設定します。
場所:受け皿用のExcelデータの格納場所を選択
ドキュメンドライブラリ:上記と同様
ファイル:対象のファイルを選択
テーブル:対象データのテーブルを選択
キー列:Userを選択
キー値:Responders' Emailを選択
Status:回答済みと入力
回答取得フローに関しては以上で設定が終わりです。
上記でどのような処理を行っているかというと
対象のFormsアンケートで回答が入力される
↓
自動的にトリガーが発火
↓
回答されたデータの各種情報を取得
↓
受け皿のExcelデータのUser列とResponders' Emailが合致している行のStatus列に「回答済み」と自動記入
といった流れになっています。
では次の工程に行ってみましょう!!
Formsリマインダー用フローの作成
- 前段で説明した内容と同様、マイフローを選択し「新規」メニューから「スケジュール-一から作成」をクリックして下さい。
- フローの名前を任意で入力し、開始日と繰り返しの間隔を入力し作成をクリックします。
※今回は木曜、金曜にのみリマインダーを飛ばす形で設定します。
- フローの編集画面が出てきたらトリガーをクリックして詳細オプションの表示を開くとリマインダーを飛ばす時間指定もできます。(今回は8時と12時に設定)
- 現在の時刻のアクションを追加します。これは後工程で使用します。
特に設定する項目はありません。
- 前段で取得した「現在の時刻」はUTC時間なので「タイムゾーンの変換」で日本時間に変換するアクションを追加します。
- 今回は対象者が300名なのでExcelで一度にできる行取得の上限(256行)を超えてしまいます。そこでDo untilを使って上限数を回避します。
(@Yellow11さんのQiita記事「Do untilを使い、ExcelやSharePointリストのデータ取得数制限を回避して全件取得する」を参考にさせて頂きました。)
まずは変数を初期化します。
- 次にDo untilの中身はこんな感じになっています。
細かく分解していきます。
まずDo untilの条件は「DataEmpty」が「true」の時という条件です。
次に表内に存在する行を一覧表示の設定。
アンケートを回収するメンバーを記載した一覧のエクセルの場所を指定します。
ちなみに一覧は必ずテーブル形式にしてください。
スキップ数の数式は以下の通り。
mul:2 つの数値を乗算した積を返す
variables:指定した変数の値を返す
条件の内容は下記の通りです。
「empty(body('表内に存在する行を一覧表示')?['value'])」が「true」の時
はいの場合:
変数の設定を下記のような形にします。 DataEmpty:trueいいえの場合:
変数の値を増やすを下記のような形にします。 LoopCount:1
条件2を下記のような条件で設定します。
「empty(variables('JoinArray'))」が「true」の時
はいの場合:
変数の設定2を下記のような形にします。JoinArray:value
いいえの場合:
「作成」の「入力」欄に下記の数式を入力します。
union(variables('JoinArray'), body('表内に存在する行を一覧表示')?['value'])
変数の設定3を下記のような形にします。 JoinArray:出力 -
次に作成2の入力欄に下記のようにします。
入力欄にJoinArrayを代入 - 行の取得-Streamを下記のとおりに設定します。
アンケート回収リストの中のMovie_Keyの値を取得します。
- 行の取得-FormsURLを下記のとおりに設定します。
アンケート回収リストの中のForms_Keyの値を取得します。
- 行の取得-Titleを下記のとおりに設定します。
アンケート回収リストの中のMovie_TitleKeyの値を取得します。
- アレイのフィルター処理を下記のとおりに設定します。
- Apply to eachでTeamsにリマインダーを飛ばす設定をします。
以前の手順から出力を選択欄に「アレイのフィルター処理」から「本文」を設定
メンションするため「ユーザーの @メンション トークンを取得する」でユーザー情報を取得します。
「独自のアダプティブ カードをフロー ボットとしてユーザーに投稿する」でユーザーに送付するアダプティブカードを作成します。
メンション部分の設定は下記の通り。
動画タイトル部分の設定は下記の通り。
動画ページURL部分の設定は下記の通り。
アンケートURL部分の設定は下記の通り。 -
行の更新で回収リストの行更新を実施します。
ものすごいざっくりとした説明になりましたがこんな感じで設定すると自動的にFormsアンケートへのリマインダーを飛ばすことができます。
皆さんも是非試してみてください。
ではまた~