7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Zoomのミーティング入退出のwebhookをLambdaで受け取るAPIの下調べをした (1)

Last updated at Posted at 2020-08-06

会社のハッカソンで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.py
@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を実行してみます。

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?