会社のハッカソンでZoomのAPIを使ったサービスを作ろうとしているので、その下調べを行った。
Zoom API 認証
使えそうなものとして、JWT トークンか OAuth 2.0 が用意されている。
すぐに使えるJWTトークンは画面に表示されるものを使った。
会社のco.jp ドメインで登録されているzoomユーザーは、会社アカウント配下にあり、その場でJWTトークンを取得することができなかった(appの作成権限がなかった)ため、別途個人のGmailでユーザーを作って appを作成し、JWTトークンを入手している。
Webhook のURLを用意する
お手軽に API Gateway + Lambda のAPIを作る事ができるフレームワークである Chalice を選択した。手間のかかる権限周りの設定もAPI Gatewayの設定もほとんど意識することなく、関数を書いて deployコマンド一発で諸々をデプロイしてくれるのでとてもお手軽です。
Chalice
https://github.com/aws/chalice
デプロイされたら、REST API URL が表示されるので、zoom のapp管理画面から Event notification endpoint URL
に登録します。
登録するのは REST API URL + 関数名 なので、こんな具合になりました。
https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/webhook
zoomでは非常に多くのwebhookイベントを用意しているので、受け取りたいイベントにチェックを入れておきます。
Postman でAPIの確認
webhookのURLが生きているか?をさっと確認しておきます。GETメソッドではすぐにレスポンスが返ってきたのですが、webhookはPOSTメソッドでアクセスされます。Chalice側でPOSTメソッドを受け取る指定をしておく必要があります。
@app.route('/webhook', methods=['POST'])
def webhook():
print('received event:')
request = app.current_request
app.log.debug(json.dumps(request.to_dict()));
app.log.debug(json.dumps(request.json_body))
# デプロイ
chalice deploy --profile xxxxx
# ログを待ち受ける
chalice logs -f --profile xxxxx
こんなふうにログを待ち受けていて、Postman でリクエストを投げてみます。
2-3秒ほどで、ターミナルにログが流れてきました。
この時点で、zoomのミーティングを開始・終了 などを行うと、実際のwebhookを受け取ってログを出力できることもわかりました。postman同様に、2-3秒ほどでログが流れてくることから、ほぼ遅延無しで通知されているものと考えています。
次回は受け取った情報をもとにZoom APIを実行してみます。