Skip to content

morishin/sagyoipu

Repository files navigation

sagyoipu

スクリーンショット

sagyoipu-client

Web UI を持つフロントエンドアプリケーション。Firestore から Zoom ミーティングの状態を取得して表示している。

Setup

yarn install
yarn run dev

functions

HTTP トリガで Zoom からの Webhook を受け取り、Firestore のデータを更新する Cloud Function。

Setup

yarn install

Deploy

firebase deploy --only functions

プロジェクトの初期セットアップ

やったことのメモ

1. Zoom アプリの作成

https://marketplace.zoom.us/docs/guides/getting-started/app-types/create-jwt-app に従い Zoom アプリを作成し、App Credentials を発行する。

また https://marketplace.zoom.us/docs/guides/getting-started/app-types/create-jwt-app#features に従い Webhook の登録をする必要がある。

  • Participant/Host joined meeting
  • Participant/Host left meeting

のイベントを選択し、Event notification endpoint URL にはデプロイした Cloud Functions の URL を指定する。

Webhook イベントは全てのミーティングに関するイベントが飛んでくるので、Cloud Function 側でさぎょイプに登録したミーティング ID に関するイベントかどうかを見てハンドリングしている。

2. Zoom ミーティングの用意

App Credentials を使って Zoom API を叩き、

  • さぎょイプで用意する Zoom ミーティングの数だけライセンスユーザーを作成
  • ライセンスユーザーをホストにした Zoom ミーティングを作成

する。Zoom の仕様で一人のユーザーは同時に複数の進行中ミーティングのホストになれないため、一人のユーザーに対して一つのミーティングにする必要がある。

作成手順の詳細

cURL で API リクエストを叩くのはちょっと大変なので https://github.com/hintmedia/zoom_rb を使うと楽。

require 'zoom'
Zoom.configure do |config|
  config.api_key = '***'
  config.api_secret = '***'
end
client = Zoom.new

ユーザー作成

custCreate は ID/Password でログインできないユーザーを作るオプション。ドキュメントにはこのオプションを使うなら問い合わせてくれって書いてあるけど、実は普通に使えて、フォーラムを見るとドキュメントが古いことがわかる。

client.user_create(
  action: 'custCreate',
  first_name: 'Sagyoipu',
  last_name: 'Host',
  email: "[email protected]",
  type: 2
)

ミーティング作成

start_time は現在時刻より前ならいつでも。

c.meeting_create({
  topic:'さぎょイプ',
  type: 2,
  user_id: '<上で作ったユーザーのID>',
  settings: {
    joine_before_host: true
  },
  start_time: '2020-03-16T10:00:00Z'
})

このユーザー作成とミーティング作成を部屋の数だけ行い、作成したミーティングの ID (数字) を下記の手順で functions:config:set する。


3. Firebase プロジェクトの作成

Firebase の Web コンソールからポチポチとプロジェクトを作成する。Zoom の Webhook はたくさん飛んできて無料プランだと Cloud Functinos の Rate Limit に引っかかってしまうため、Blaze プランにアップグレードしておくと良い。おそらく無料枠に収まるはず。

また、さぎょイプで利用する Zoom ミーティングの ID を functions:config:set する必要がある。

設定の例

firebase functions:config:set \
  meeting_ids.0="12345678" \
  meeting_ids.1="23456789" \
  meeting_ids.2="34567890"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published