これは何
zoomのクラウドレコーディング完了を、slackの特定のチャンネルに通知
今回は
- Slack App (Incoming Webhook)
- AWS Lambda(python)
- AWS api gateway
- Zoom App (Outgoing Webhook)
などを使用します。
※練習も兼ねて手順を細かめにメモしています。
▼クラウドレコーディングが終わってしばらくすると通知が来る。それだけ。こっからカスタマイズしていきたい
作成のきっかけ
- エンコードに時間がかかること、MTGが一旦終了しないとエンコードが始まらないぽい? ことが手伝って動画をアップ&共有することを忘れがちです。なので楽したい。
- でもZoom側でエンコードしてくれるのは正直ありがたいです。
- Lambdaの練習
- 今後のZoom APIを絡めたカイゼンのステップとして
- Zoomの容量はすぐにいっぱいになるので要改善
Slackの設定
処理の後方から設定していきます
▼https://api.slack.com/apps へ行って「Create New App」
▼「App Name」(後で変更可能)と、ワークスペースを選択
▼Incoming Webhooksの項へ行って、Activate Incoming WebhooksをONに
Lambdaの設定
▼https://aws.amazon.com/jp/lambda/ へ。まずリージョンを確認、今回は東京にしました
▼「一から作成」
ランタイムを「Python 3.8」としました
ロールはデフォルト「基本的な Lambda アクセス権限で新しいロールを作成」
▼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)
▼slackに通知が来ました。なんとかなりそうな気がしてきた
▼本番のコード
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と同じリージョンでやります
▼API Gateway、
先ほど設定したAPIを指定、
デプロイされるステージは$default
セキュリティは今回はオープンにします
Zoom Appの設定
▼ https://marketplace.zoom.us/ へ行って、Develop > Build App
▼Event Subscriptionsをオンにして、
Sumbscription Name は適当に
Event Notification endpooint URLは、AWS API Gatewayで取得したURLを入力
Add eventsをクリック
▼Recording > All Recordings have completed
動作を確認
参考記事
slackのIncoming webhookが新しくなっていたのでまとめてみた - Qiita
今度こそ理解する!俺式Lambda入門 | Developers.IO
GitHub - cloudnative-co/lambda-ZoomRecordingsTransfer
▲着想、Zoom App部分はほぼここを参考にさせてもらいました m(__)m