Zoomで同僚がいつでも入れる仮想オフィスを設定、誰かが参加したらSlackで通知を受ける方法
お久しぶりです。最後に記事を書いてからしばらく経ってしまいました。AlteryxからSisense(サイセンス)という会社に転職しました。日本法人は10人に満たないサイズで、立ち上げの時期に入社できたことは本当に恵まれている!Sisenseは第3世代BIと呼ばれていますが、個人的には「ビジネスに同化させるアナリティクス」と思ってます。ワークマンの「空気のように広く社内に広める分析(Excel)」みたいな感じです。(これに関しては改めて記事を書きますが)気になる人はココからミーティング設定してください。どういう意味かを説明します。笑
さて本題ですが、COVID-19が深刻化した後の8月に入社したので、トレーニングもオンライン何もかもがオンライン。Slackで文字でのやりとりが多くなり、努力しなければ顔を合わせて会話することがない。変なミスコミュニケーションも経験し、「もっと話さなければヤバイ」と思っていたところで、サンフランシスコのオフィスの人とたまたま会話し知った「キッチン」の存在。シリコンバレー的なノリの仮想オフィスの一室のイメージで、Zoomの部屋を開放して誰でも入って話せるというもの。ただ、コレに感心したのはいくつかギミックがあり、以下がオマケでついてくる:
• Zoomの設定次第でいつでも誰でも参加できる部屋「キッチン」ができる
• 誰かが最初にキッチンに入るとSlackで通知してくれる
• Google Sheetで誰がキッチンにいるかも確認できる
• キッチン入退室の履歴をGoogle Sheetに残せる(任意)
サンフランシスコのオフィスのエンジニアはコレを全部自動化していたので、単純に好奇心で「どうやってるの?!」と聞いた。ここで記事を書いているのでみなさんもお気付きかとは思いますが、私は基本コーディングできないです。今回の上の全てはあるJavaSpriptをコピペしただけでできました。ほぼほぼノンコーディング。いつも通りハードルを下げてはいるものの、必要な有償サービスがあるのでリストしておきます:
• Zoomのアカウント(時間制限などがない有償アカウント推奨)
• Zapierのアカウント(Professional、49 USD/月)
• Slackのアカウントと連携可能なチャネル(無償でもOK)
• Google Spreadsheet(無償でもOK)
コレが揃ったら早速設定を開始しましょう!
いつでも同僚が入れる部屋をZoomで設定する
Sisenseではいつでも誰でも入って井戸端会議ができる部屋を「キッチン」と呼んでますが、名前はラウンジでもなんでもいいですよね。これの設定はそこまで複雑ではなくて、Personal Roomをホストがいなくても入れるように設定するだけでおしまい。Zoomの管理画面、自分のアカウントのページで以下の①〜③を設定するだけです:
①Meetings
②Personal Room
③Enable join before hostを有効化
部屋を用意するだけであれば、上のJoin URLを置いておくだけでOK。ただ、コレでは雑すぎるし、遊び心がない。ということで追加のステップを設定します(その際にこのURLを使うのでどこかにコピペして置いておくといいかも)さて、この誰かが参加したり退室したりするイベントをトリガーにするためにZoom Webhookアプリを作成し、インストールする必要があります。以下のページから設定できます:
https://marketplace.zoom.us/
場所はZoomにサインイン、画面右上にある「Develop」のメニューをクリック、 アプリのビルド(Build App)をクリックで開始します。
弊社ではOAuth アプリしか使えないので、OAuthを選択しましたが、ニーズに合わせてアプリのタイプを選びます。アプリは一応社内で使う物なので、公開しませんでした。 (「OAuthって?」という方はこちらの記事がわかりやすかったです)
App Credentials に移動します。適切なリダイレクトURLとホワイトリストURLを選択します。私はパーソナルミーティングルームのURLをどちらにも入れました。
「Information」に移動し、必要な項目を入力してください。その次は、「Feature」に移動します。「Event Subscription」のトグルを有効化します。「+ Add new event subscription」をクリックしてトリガーになるイベントを追加します。(Event Notification endpoint URLは次の「Zapierの設定」のステップ①で取得できるので、同時に設定開始してください)
このEvent Subscriptionでは、下のスクリーンショットにもあるように「参加者がホストの前に参加する」「参加者/ホストが参加する」「参加者/ホストが退室する」をチェックします。
Scopeはスキップして、Activationに移動し、InstallをクリックすればZoomの設定は完了です。
Zapierの設定
次はZapier(ザピアー)の設定です。ZapierはSaaS版のRPAのようなサービスで、様々なサービスに連携してワークフローを自動化できます。今回の通知などの自動化もZapierに一役買ってもらいます。
Zapier管理画面、「Make a Zap」をクリックし、ワークフロー(Zap)の作成を開始します。ワークフローを大きく4つに分けて説明すると:
1. Zoomからのウェブフックを受け取る
2. Javascriptで受け取ったデータをパースする
3. 日付のデータをきれいにする
4. 条件に応じて分岐させたワークフローを設定(参加と退室の場合)
です。コレをステップバイステップで設定方法を書いていきます。なるべくミスをしないように細かく説明を書きます。
① Zoomからデータを取得する
最初のイベントは、ZapierでZoomからデータを取得する設定です。アプリを検索する際に「Webhooks by Zapier」を選択します。そこから、トリガーのイベントで「Catch Raw Hook」を選択します。
Set Up Webhook で、以下のような Webhook URL が生成されているので、これをひとつ前の手順の、Zoom Appの設定のFeatureにある「Event Notification endpoint URL」に入力します。
Find Dataでは、欲しいデータ(ユーザー名、イベント名、など)があることを確認してこのステップは完了です。
② 取得したデータをパースする
上でとったデータをパースするワークフローの設定です。次のイベントは「Code by Zapier」を選択、アクションイベントとして「Run Javascript」を選択します。
入力データの名前は raw_data でも何でも大丈夫です。入力は Webhook からの Raw Body になります。以下のような設定の画面ですが、
コードはこれです。コピペで十分!コーディングはここだけ。コピペならコーディングのうちに入らない?笑
var payload = JSON.parse(inputData.raw_data)
output = [payload].
データがきれいになっていて、使えるようになっていることをテストして、確認します。
③ 日付/時刻フォーマット
Google Sheetにデータがインプットされていくように④のステップで設定しますが、その日付データがしっかり入力されていくためのステップです。「なんでデータに残す必要があるのか?」ですよね。コレは、データドリブンな文化、スケールした時に分析するネタがあるための、いわば分析の業界に長くいる人のクセみたいなもんですね(笑)とにかく設定を進めましょう。このワークフローでは、「Formatter by Zapier」を選択し、アクションイベントとして「Date / Time」を選択します。
日付のデータを、日付として扱うために以下のように選択します。
テストして、しっかりデータが日付としてきれいに取得できていることを確認したら最後のステップです!(と言っても、最後のステップは分岐なので大きく分けて2つになりますが。笑)
④ 分岐
次は、参加者やホストが「参加」した時と「退室」した時のワークフローによって別のワークフローを走らせる設定です。選択するイベントは「Path by Zapier」です。フィルターの場合はゼロイチの世界ですが、パスは何パターンも条件に応じてワークフローを分岐できます。
Path Aを「Joined(参加した)」という名前のパスとし、Path Bを「Left(退室した)」としてパスを追加します。「Joined」のパスはユーザーが参加したときにスプレッドシートの行を作成し、「Left」のパスはユーザーが退室時に行を削除します。これで、ユーザーがシートをチェックして、現在誰がそこにいるのかをリアルタイムで確認できるようになります。
④-A: Joined(参加した時)
ルールはイベントとZoom IDを比較するものです。「Event」に「meting.participant_left」が含まれていないこと、かつ「Payload Object ID」にZoomの指定のPersonal RoomのID(URLの末尾の部分)が一致するという条件で設定します。
次のイベントは、参加者/ホストの参加でスプレッドシートの行の作成をするワークフローです。アプリはGoogle Sheet、イベントは「Create Spreadsheet Row」です。その前にGoogle Sheetでキッチン用のシートを作成して用意しておきましょう(一行目に必要なカラムのカラム名を入れておくとなおよしです!)
正しいアカウント、ファイル、シートを指定して・・・と、あとはカラム名をフィールドがどのようにマッピングされているかは、以下のスクショをご参照ください。笑
コレも前回同様にテストし、データがしっかり入っていれば完成!
リアルタイムのデータをシートに書き込むワークフローと、履歴をシートに書き込んんで残すワークフローは同様にするので、上の「6.」に続き、下の「7.」は同様の設定になります。データを残す対象のシートを履歴のためのシート2を別に作り、同様なカラムを設定しておきます。(任意ではありますがオススメです。)
次のイベントはZapierでフィルタリング → 「Only Continue If...」を選択します。下の画像の条件を設定します。最後の「Payload Object Participant ID」の値は、ホストのIDを入力します。(Zapierの最初のステップのraw_dataの中にあると思います)これはホストより先に誰もいないキッチンに誰かが最初に参加した時に通知したりデータを書き込むためですが、ホストでも発動するようにするためです。値もコピペできるように以下に置いておきます。
meeting.participant_jbh_joined
meeting.participant_joined
次のイベントはSlackの通知の設定です。
ここでも正しいSlackのアカウント、チャネルが指定されていることを確認したら、以下のようにSlackチャネルで通知されるメッセージのカスタマイズをします。
ここは完全に自由ですが、値の頭に「Payload Object Participant User Name」を入れることで誰が入ったかを名前入りで通知してくれるようになるのでオススメです。あとはテンプレ的に私が設定した内容を置いておきます。(<>内はハイパーリンクの設定です。URLは前半、「|」で区切られた後が表示テキストになります。)
{{101329967__payload__object__participant__user_name}} has entered the kitchen! Click <https://sisense.zoom.us/j/xxxxxxxxxx |here> to join! (Click <https://docs.google.com/spreadsheets/d/xxxxxxxxxx|here> to see who else has joined!)
完了したら、テストし動くことを確認してZap(全体のワークフロー)をオンにします。
いろんな場所にオフィスのある会社では、サンフランシスコのオフィスでは「#kitchen-ca」、東京は「#kitchen-tyo」みたいなSlackのチャネルを用意しているのですが、オフィスごとにチャネルを作ってワークフローを設定してあげるといいかもしれないですね。
私が設定したあとは、上のようなSlackのメッセージが指定のチャネルに届きます。アイコンも指定したので、一般にこの通知を見る人はZapierが裏で動いてるのも気付かないですね。これ、個人的には設定するだけでも結構楽しいのですが、実際にキッチンに誰かが入ると会話ができて普段DMやコメントだけのやりとりだけでできていないキャッチアップができて非常に良いです。
④-B: Left (退室した時)
この設定が最後です。記事を書いていて、「丁寧に説明しようとすると意外と長い文だなw」と思いましたが、あと一息です!頑張りましょう。笑
参加した場合は設定が終わったので、次は参加者/ホストが退室した時の設定です。分岐した「10. Left」のワークフローの設定です。イベント含め以下のように設定します。
次に、すでにGoogle Sheetに入っているデータを見つけるため「Lookup Spreadsheet Row」をイベントとして選択します。
正しいアカウント、スプレッドシート、シートを指定したらユーザーIDが入力されているカラムのデータを、退室したユーザーのIDと一致するか参照する設定をします。(私の場合は「user_id」と指定したカラム名)バックアップで参照するデータとして「startt_time」を参照させます。
あとはその参照したデータを元に、リアルタイムに更新される参加している人のリストの方のシートから、その人のデータを削除する設定です。イベントに「Delete Spreadsheet Row」を選択します。
あとは単純ですが、以下のようにひとつ前の「11.」で指定した行を削除する設定をします。これでリアルタイムに更新される参加者リストが完成します。
最後に、履歴のシートの更新です。更新する部分は「11.」と同じなので、同じ設定をしてあげます。
文字通り更新になるので、イベントとして「Update Spreadsheet Row」を選択します。
指定するのは行なので「Left - 4. Row」と、「13.」でLookup(参照)した行を指定して、履歴のシートに「left_time」と新しいカラムを作成した上で、そのカラムに「Payload Object Participant Leave Time」を選択します。
これでワークフローが全て完成し、最初に話していた社内コラボレーションの通知、データの格納、全てが自動化されます。
まとめ
これはZapierを使ってワークフローを自動化する一つの例ですが、RPAなどが色々と取り上げられていますが、簡単に自動化することができることというのは「人間の思考、行動で繰り返されることをロボットに任せる」ということだと思います。これは自分の分身を作るようなものですね。実は、SisenseというBIでは、データの閾値に応じてトリガーし、Zapierと連携する口がデフォルトで表示されています。データを使ったワークフローの自動化、これを次の記事では書いてみたいと思います。
この記事が気に入ったらサポートをしてみませんか?