😆

Teamsに雑談用アプリを作ってみる

5 min read 3

Slackに雑談用アプリ登場

皆さん、Slackの雑談用アプリCollaちゃんはご存知ですか?
最近リリースされたアプリで、

  • Collaちゃんからメンバーに質問チャットが飛ぶ
  • 質問された人は回答する
  • 共通のチャンネルに回答が共有される
  • みんなでやいのやいの雑談する
  • 楽しい!!!

という、話題の種を提供してくれるアプリになります。
こちらのサイトから是非是非インストールしてみてくださいね。

Collaちゃんは毎日ランダムでメンバーを選び、簡単な質問を送ってきます。
一日何人に質問を送るかは設定から選ぶことができます。

送られてきた質問に対して回答します。
回答は一回コッキリで修正不可なので少しプレッシャーです。

メンバーが質問に答えると、その回答が共通のチャネルに投稿されます。
その日に回答したものはプールされ、プールされたものからランダムで投稿されるようです。


わかるんかい

面白いアプリだなぁと思い、slackのグループにはインストールして使ってみてます。
ただ仕事でTeamsを使う場面もあり、Teamsでしかつながっていないグループで同じことができないか考えてみました。
今回はPower Automateの勉強もかねて、Teams版Collaちゃんの実装にトライしてみました。

完成イメージ

ランダムで質問チャットが飛ぶ

朝の9時にFlow君から個別に質問チャットが飛んできます。
質問される人は毎日ランダムで選出します。
質問もひとまず50種類ぐらいの中からランダムで選出。

質問に対する回答は「こちらから」のリンクを開いて出てくるMicrosoft Formsから回答します。
回答は一時的にプールされます。

記事書きながら誤字発見

共通のチャンネルに回答が落とされる

昼になると、プールされた回答の一部がチャンネルに落とされます。
ここもFlow君から投稿させたかったんですが、どうもうまくいかず私のアカウントからの自動投稿という形で今回は実装。
この投稿に対してやいのやいの言って雑談が盛り上がる、というような流れになります。

やいのやいの言われたい

実装

今回はPower Automateの勉強ということなので、色々回りくどいことしているかもしれませんが生暖かい目で見てくださいね。

データ管理用Excelの準備

今回のもろもろのデータ保管はExcelで行い、投稿先のチャンネルに保管しました。
DB立てたり色々やり方あると思いましたが、変なところで躓かないための策と思ってください。
Excelには大きく4つのテーブルを作っておきます。

参加者テーブル

参加するメンバーの情報一覧になります。

  • 参加者欄:メンバーのメールアドレス(チャットに必要な情報)
  • 質問中:質問している内容
  • 呼び名:あだ名など(チャンネル投稿時の「〇〇さんに聞いてみました」に反映)

質問テーブル

チャットで送る質問の一覧です。
思いついたものをひたすら書いていくだけの簡単なお仕事です(吐血)

  • No:質問番号(質問を選ぶ際のキー)
  • 質問:質問

回答テーブル

返ってきた回答一覧です。
あとで見返してわいわいするためにも使えそう。

  • No:回答番号(回答を選ぶ際のキー)
  • 質問:回答に対する質問
  • 回答者:回答者のメールアドレス
  • 回答:回答

各データテーブル

参加者・質問・回答に関するデータの一覧です。
Power Automate上でも関数を組んで実装できそうでしたが、Excelの関数を組み合わせたほうがサクッと終わる気がしたので今回はこちらのテーブルも用意しました。

  • 参加者数:参加者テーブルから参加者の人数を取り出します
  • 質問数:質問テーブルから質問の数を取り出します
  • 回答数:回答テーブルから回答の数を取り出します
  • 次のレコードNo:回答数+1
  • 次の紹介No:次に投稿する際にどのNoから紹介するかの記録です

PowerAutomateの実装

今回PowerAutomateでは3つのFlowを実装しました。

朝9時に質問チャットを送る

全体像はこちら。

まず繰り返し(Schedule)で「平日の9時ぐらいに3回実行」を実装します。
私のチームには10~15人のメンバーがいるので、一日あたり3人ぐらいに質問すればよいだろう、ということで「3回実行」にしています。
開始時刻の設定に簡単なトラップ(末尾のZを抜く)があるのでこちらの記事を一度ご覧ください。

Excelからのデータ取得&更新は案内に従ってポチポチしていけば実装可能です。
一つ例を挙げて掲載しておきますね。

今回質問をランダムで選択したいので、キー値には乱数取得の関数rand()を利用しています。
rand(a, b)でa以上b未満の整数を取得でき、bを質問数にすることで質問が増えても対応できるようにしています。
Excelから取得した数値はstring型として格納されるようなので、一度intにパースして使う必要があることに注意してくださいね。

outputs云々のところは「動的なコンテンツ」から値を持ってきます
この辺りの実装は別の記事でも少しまとめてみましたので、そちらもご覧ください!

質問者・質問を選びチャットを送ります。
チャット送信部分はこんな感じ。
Teamsでマークダウンが使えるようなのでリンク付与してみました(参考記事はこちら)。

Formsの回答を回答テーブルに転記する

この部分は正直Forms側の機能でどうにかできそうでしたが、勉強のために実装してみました。
全体像はこんな感じ。

FormIDって何・・・?とか、Formを作っても表示されないなどなどいろいろハマりました。
FormIDはFormのタイトルにあたるようなので、私の場合「Flowの質問に答えておくれ」がFormIDになるようです(参考記事はこちらから)。

Formを作ってもリストに出ない問題はこちらの記事をご覧ください。ざくっと

  • 使いたいFormsをブラウザで開く
  • Share as a templateのCopyを押し、URLを取得
  • URLからフォーム画面を出し、右上のDuplicate itをクリック
  • 作ったフォームが複製される
  • あら不思議Formがリストに出てきてる

という流れです。この操作でなぜリストに出てくるようになるのかはさっぱり分かりません。

昼になったらチャットに投稿する

これも一つ目と同じようなFlowですね。全体像を示します。

「次の紹介No」に該当する回答を取り出し、チャンネルに投稿。
その後「次の紹介No」の値を1増やし更新という流れです。
関数を使っている部分はこんな感じ。

さいごに

Power Automate楽しい!
Power Automateの練習にもなるし、質問の内容とかもカスタマイズし放題なFlowなので、是非是非ハンズオンしてみてくださいね。

Discussion

canon no様
こちら非常に勉強になります!ありがとうございます!
初心者なので基本的なところで大変恐縮なのですが、1点お伺いさせてください。
データテーブルからのデータ取得のところが実装できずに困っているのですが、「キー値」はどのように設定すればよいでしょうか?もしかするとデータテーブル自体の理解が間違っているかもしれないので、データテーブルについても補足頂けると大変有難いです。よろしくお願いいたします。

yu19様
コメントありがとうございます!
データ取得の部分へいくつか個別に質問いただいております、分かりにくい表現で申し訳ないです。
別途解説記事を書いてみましたので、こちらをご覧になってみてください。
質問への回答になってなさそうでしたら、また教えてください。

canon no様
気づくのが遅くなり申し訳ありません。
ご返信いただきありがとうございます!解説記事を見て理解することができました!
大変勉強になりました。ありがとうございます。

ログインするとコメントできます