LoginSignup
2
3

More than 3 years have passed since last update.

Zoomのクラウドレコーディング完了をAPI, Lambda経由でSlackに通知する

Last updated at Posted at 2020-06-16

これは何

zoomのクラウドレコーディング完了を、slackの特定のチャンネルに通知
今回は

  • Slack App (Incoming Webhook)
  • AWS Lambda(python)
  • AWS api gateway
  • Zoom App (Outgoing Webhook)

などを使用します。
※練習も兼ねて手順を細かめにメモしています。

▼クラウドレコーディングが終わってしばらくすると通知が来る。それだけ。こっからカスタマイズしていきたい
image.png

image.png

作成のきっかけ

  • エンコードに時間がかかること、MTGが一旦終了しないとエンコードが始まらないぽい? ことが手伝って動画をアップ&共有することを忘れがちです。なので楽したい。
    • でもZoom側でエンコードしてくれるのは正直ありがたいです。
  • Lambdaの練習
  • 今後のZoom APIを絡めたカイゼンのステップとして
  • Zoomの容量はすぐにいっぱいになるので要改善

Slackの設定

処理の後方から設定していきます

https://api.slack.com/apps へ行って「Create New App」
image.png

▼「App Name」(後で変更可能)と、ワークスペースを選択

▼Incoming Webhooksの項へ行って、Activate Incoming WebhooksをONに
image.png

▼Add New Webhook to Workspace
image.png

▼投稿するチャンネル先を選ぶ
image.png

▼「Copy」を押してURLを取っておきます
image.png

Lambdaの設定

https://aws.amazon.com/jp/lambda/ へ。まずリージョンを確認、今回は東京にしました
image.png

▼関数の作成
image.png

▼「一から作成」
ランタイムを「Python 3.8」としました
ロールはデフォルト「基本的な Lambda アクセス権限で新しいロールを作成」
image.png

▼Slackまでの接続確認用の簡易コードはこんなかんじ。
※slack_urlには slack設定で得たURLを貼る

import json
import urllib.request

def post_slack(slack_url, message, icon_emoji="robot_face", username="BOT"):
        send_data = {
                "text": message,
                "icon_emoji": icon_emoji,
                "username" : username,
        }
        send_text = json.dumps(send_data)
        request = urllib.request.Request(slack_url,
                data=send_text.encode('utf-8'),
                method="POST"
        )
        with urllib.request.urlopen(request) as response:
                response_body = response.read().decode('utf-8')

def lambda_handler(event, context):
        message = "hogehoge"
        slack_url = "https://hooks.slack.com/services/****/****/****"
        post_slack(slack_url, message)

▼接続確認コードを貼り付けたら一旦テスト
image.png

▼テストイベントをそのまま「作成」
image.png

▼もう一度「テスト」を押すと
image.png

▼slackに通知が来ました。なんとかなりそうな気がしてきた
image.png

▼本番のコード


import json
import urllib.request
import ast
import datetime
import dateutil.parser

def post_slack(slack_url, message, icon_emoji="robot_face", username="BOT"):
        send_data = {
                "text": message,
       "icon_emoji": icon_emoji,
       "username" : username,
        }
        send_text = json.dumps(send_data)
        request = urllib.request.Request(slack_url,
                data=send_text.encode('utf-8'),
                method="POST"
        )
        with urllib.request.urlopen(request) as response:
                response_body = response.read().decode('utf-8')

def lambda_handler(event, context):
        # bodyの取得
        dict_body = ast.literal_eval(event['body'])

        # 開始時間の取得
        start_time = dict_body['payload']['object']['start_time']
        JST = datetime.timezone(datetime.timedelta(hours=+9), 'JST')
        jst_timestamp = dateutil.parser.parse(start_time).astimezone(JST)
        str_jst = jst_timestamp.strftime('%Y-%m-%d %H:%M:%S')

        # いろいろ取得
        topic = dict_body['payload']['object']['topic'] # nnのミーティング
        share_url = dict_body['payload']['object']['share_url']
        password = dict_body['payload']['object']['password']

        #message作成
        message = str_jst + " 開始 【" + topic + "】のクラウドレコーディングが完了しました" + "\n"
        message += "<" + share_url + "|" + share_url + ">" + "\n"
        message += password + "\n"

        slack_url = "https://hooks.slack.com/services/****/****/****"
        post_slack(slack_url, message)

AWS API Gatewayの設定

https://aws.amazon.com/jp/api-gateway/ から作成を開始
Lambdaと同じリージョンでやります
image.png

▼APIを作成
image.png

▼HTTP API
image.png

▼統合を追加
image.png

▼Lambdaを選択して、Lambda関数を選ぶ
image.png

▼API名を決めて「次へ」
image.png

▼メソッドをPOSTにして「次へ」
image.png

▼ステージ名はdefaultのまま「次へ」→「作成」
image.png

▼LambdaにもどってAPI Gatewayをクリック、
image.png

▼API Gateway、
先ほど設定したAPIを指定、
デプロイされるステージは$default
セキュリティは今回はオープンにします
image.png
image.png

▼APIエンドポイントをコピーしておきます
image.png

Zoom Appの設定

https://marketplace.zoom.us/ へ行って、Develop > Build App
image.png

▼Webhook Only を「Create」
image.png

▼app名を入力

▼もろもろ入力して Continue
image.png

▼Event Subscriptionsをオンにして、
Sumbscription Name は適当に
Event Notification endpooint URLは、AWS API Gatewayで取得したURLを入力
Add eventsをクリック
image.png

▼Recording > All Recordings have completed
image.png

▼SaveしてContinue
image.png

▼完了
image.png

動作を確認

image.png

参考記事

slackのIncoming webhookが新しくなっていたのでまとめてみた - Qiita

https://qiita.com/kshibata101/items/0e13c420080a993c5d16

今度こそ理解する!俺式Lambda入門 | Developers.IO

https://dev.classmethod.jp/articles/lambda-my-first-step/

GitHub - cloudnative-co/lambda-ZoomRecordingsTransfer

https://github.com/cloudnative-co/lambda-ZoomRecordingsTransfer?fbclid=IwAR3q09GtYvAujG2hU8X1I5fiihHwyd-XcpAIWsPjeqtbX8L0RDeGwcBhBMM

▲着想、Zoom App部分はほぼここを参考にさせてもらいました m(__)m

2
3
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
2
3