この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
せーのでございます。
今回はzoom APIを使って会議用の部屋を作ってみます。
どうして?
現在社内では会議ソリューションとしてGoogle Meetとzoomの2つが使われています。
zoomで定期的に会議を開くには「スケジュール」から部屋を作ればOKです。
ただこの場合、ミーティングIDは自分の個人IDか、独自に振ったID、どちらにしても毎週同じものが使われます。
ミーティングのURLはミーティングIDで一意になるので、毎回同じミーティングIDになる場合、もし社外にこのURLが漏れてしまうと、関係ない人がこっそり入ってこられることになります。
そこで今回は、zoom APIとLambdaを使って、毎回違うIDで定期的に部屋を作ってみたいと思います。
要するに、こういうこと
zoomのスケジュール機能を使うと毎回同じIDで部屋が作られますが
Lambdaから毎週zoomのAPIを叩いてやれば、都度違うIDで部屋が作られる、というわけです。
やってみた
それではやっていきましょう。手順としては
- zoomのAppを作る
- LambdaからそのAppの設定に従ってzoomのAPIを叩く
と非常にシンプルです。
zoomのAppを作る
最初にzoomのAPIが使えるようにAppを作ります。AppはzoomのMarketPlaceというところにあります。
持っているアカウントでログインしたら「Develop」トグルボタンより「Build App」をクリックします。
作るAppの種類が表示されます。ブラウザから操作するような場合は「OAuth」を選びます。今回はLambdaから毎回自動で作りたいので、都度認証のいらない「JWT」を選びます。「Create」ボタンをクリックします。
アプリの名前をつけます。ここは任意です。
会社情報や担当者のアドレスなどを「Information」のタブで入力します。
入力したら「App Credentials」に移動します。
ここに連携に必要な情報が入っています。今回はサンプルなのでそのままトークンを使います。本番ではAPI KeyとAPI Secretから作ります。
「View JWT Token」のリンクをクリックすると下にトークンが表示されます。「Expire in」はトークンの使用期限ですので、使う期間を指定して、トークンをコピーしてください。
使うAPIのドキュメントを見る
今回は部屋を作りたいので「meeting API」の中の「Creating meeting」というAPIを使います。
このAPIに必要なのはまず「User ID」です。これはzoomにログインするときのメールアドレスのことです。
次にbodyに必要な情報を書いたjsonを送ってあげます。
{
"topic": "string",
"type": "integer",
"start_time": "string [date-time]",
"duration": "integer",
"timezone": "string",
"password": "string",
"agenda": "string",
"recurrence": {
"type": "integer",
"repeat_interval": "integer",
"weekly_days": "string",
"monthly_day": "integer",
"monthly_week": "integer",
"monthly_week_day": "integer",
"end_times": "integer",
"end_date_time": "string [date-time]"
},
"settings": {
"host_video": "boolean",
"participant_video": "boolean",
"cn_meeting": "boolean",
"in_meeting": "boolean",
"join_before_host": "boolean",
"mute_upon_entry": "boolean",
"watermark": "boolean",
"use_pmi": "boolean",
"approval_type": "integer",
"registration_type": "integer",
"audio": "string",
"auto_recording": "string",
"enforce_login": "boolean",
"enforce_login_domains": "string",
"alternative_hosts": "string",
"global_dial_in_countries": [
"string"
],
"registrants_email_notification": "boolean"
}
}
かなり細かいところまで指定できるのですが、今回作る上で必要な情報は
パラメータ名 | 概要 |
---|---|
topic | 会議の名前 |
type | 会議のタイプ。即時に作るときは1。時間指定で予約するときは2。 |
start_tyme | 開始時間。YYYY-MM-DD T HH:mm:ss形式で書く |
timezone | タイムゾーン。日本はAsia/Tokyo |
settings/use_pmi | PMI(Personal Meeting ID。自分の個人ID)を使うかどうか。falseに設定 |
これくらいになります。これらの情報を
こんな感じでJSONにまとめて投げてあげればOKです。
それではコードを書いていきましょう。
Lambdaを作る
それではLambdaを書いていきます。特に他のAWSサービスとはつなげませんので、ごくごくシンプルに。
側ができたら、コードを書いていきます。今回はzoom APIを叩くのでモジュールとして「request」を使います。ローカルで任意にディレクトリを作り、そこにnpmを使って「request」をインストールした上で「index.js」というファイルを作成、中身を書いたらzipに固めてアップロード、という手順です。
npm install request
index.js
var request = require("request");
exports.handler = (event, context, callback) => {
var options = {
method: 'POST',
url: 'https://api.zoom.us/v2/users/yourmailaddress@aaa.ne.jp/meetings',
headers: {
authorization: 'Bearer <ここにJWTのトークンを貼る>' // Do not publish or share your token publicly.
},
json: {
"topic": "Weekly Meeting",
"type": "2",
"start_time": "2020-04-27T18:30:00",
"timezone": "Asia/Tokyo",
"settings": {
"use_pmi": "false"
}
}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
callback(null,body);
});
};
これでOKです。シンプルですね。メールアドレスやトークンは皆さんのものと置き換えてお使いください。
Lambdaを叩くとこのような結果が返ってきます。
この「id」の値がLambdaを叩くたびに変わります。そして参加者はこのidを使ったURL「join_url」を使ってアクセスするので、この値が毎回変わるとセキュアですね。
「join_url」をミーティングの参加者に通知してあげると、参加することができますので、戻り値をJsonパースしてこのjoin_urlの値を拾ってあげて、Slackなどで通知してあげると良いですね。Slackへの通知はこんな記事がありますので参考になさってください。
Lambdaを叩いたあとにSlackを開いてみると
このように、部屋が取れている事がわかります。
まとめ
ということで今回はAPIを使ってzoomの部屋を取ってみました。応用すればSlackからのコマンドでzoomの部屋を取ったり、Google Calendarに特定のキーワードを入れると自動的にzoomの部屋を取ってくれたり(Meetでいいじゃん、とか言わない)、色々使い勝手が広がります。
仕事でzoomミーティングを使う時などに参考にしてみてください。