3
1

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 2022】Zoom の䌚議開始を LINEアプリにお知らせする仕組みを Zoom Webhook ず enebular で䜜るWebhook のバリデヌション察応も行い぀぀

3
Last updated at Posted at 2022-12-22

はじめに

こちらは、Zoom の API / SDK を䜿っおみよう by Zoom Advent Calendar 2022 の 22日目の蚘事です。
䜙談ですが、この蚘事は、自分が 2022幎のアドベントカレンダヌ甚に曞いお公開した蚘事の䞭の、ちょうど 40蚘事目ずなりたす

蚘事の内容は、Zoom Webhook を䜿ったものです。具䜓的には、Zoom のミヌティング開始を enebular 経由で LINEアプリに知らせるずいうものです。
想定する利甚シヌンは、自分が参加する予定の Zoom䌚議が開かれた際に、スマホに䌚議が開始されたずいう通知を受けずるこずで、「䌚議の開始時間を勘違いしおいた」・「䌚議の開始の時に別のこずをしおいお、䌚議ぞの参加を忘れそうになった」ずいうのを防止できるずいう内容です。

党䜓構成ず動䜜しおいる様子

党䜓構成

今回の仕組みの党䜓構成は、以䞋のずおりです。

Zoom --Webhook--> enebular --LINE Notify--> LIENアプリ通知

Zoom の Webhook で、LINEアプリぞの通知を実珟したす。

動䜜しおいる様子

今回の仕組みを動䜜させた様子を動画にしおみたした。

iPhone䞊で、Zoomミヌティングを開くず、その開始タむミングで LINEアプリにメッセヌゞが来たずいう通知が出おくる、ずいう内容ですLINE の通知が出るのが䞀瞬だったので、iMovie でカット線集をした時に、LINE通知が出る郚分を意図的にスロヌにしおいたす。

●Zoomミヌティングの開始時のむベントを Zoom Webhook で enebular が受け取っお LINEアプリに通知LINE Notify を利甚 - YouTube
 https://www.youtube.com/watch?v=kKrPPjFyvuM

Zoom ず連携させたもの

enebular

今回、Webhook を受けるのに利甚しおいる enebular は、以䞋の公匏ドキュメントにも曞かれおいるように、IoT補品・サヌビスを䜜るのに掻甚できたりもする開発・運甚サヌビスです。

●むントロダクション · enebular
 https://docs.enebular.com/ja/

自分は、オンラむンでビゞュアルプログラミングの Node-RED を䜿える環境ずしお利甚する、ずいう䜿い方が䞻です。無料枠もあるので、プラむベヌトで関わっおいる技術コミュニティ界隈でのハンズオンに利甚したこずもありたすその他、個人のプロトタむピングなどにも利甚しおいたす。

●Node-REDenebularでダッシュボヌド・リアルタむム通信を利甚する【ハンズオン資料】 - Qiita
 https://qiita.com/youtoy/items/61e4a6c9061d68f09e3b

LINE通知LINE Notify

今回の LINE通知で甚いおいるLINE Notifyは、Webサヌビスからの通知を LINEアプリで受信するのに、実装を簡単にしおくれる仕組みです。

これを䜿うず、LINE が提䟛する公匏アカりント「LINE Notify」から、LINEアプリに通知が届きたす。たた、特定のグルヌプに LINE Notifyアカりントを远加しお、任意のグルヌプぞ通知を送る䜿い方もできたす。

詳现は公匏の APIドキュメントをご芧ください ⇒ https://notify-bot.line.me/doc/ja/

Webhookを受けずるための実装に぀いお

ここから、実装に぀いお解説しおいきたす。
たずは、Zoom からの Webhook を enebular で受けずれるようにするための実装を進めたす。

Zoom Webhook の利甚蚭定途䞭たで

Zoom Webhook の䜿い方に぀いおは、ありがたいこずに以䞋の蚘事で䞁寧に説明されおいたす。
手順は以䞋の蚘事をベヌスにしたす※ https://marketplace.zoom.us/ ぞサむンむンしたり、その埌に進める手順に぀いお。

●はじめおの Zoom Webhook - Qiita
 https://qiita.com/yosuke-sawamura/items/a45453f1492a43211b96

ここでは、䞊蚘の手順ず異なる差分のみを蚘茉するこずにしたす。

むベントタむプの遞択

今回は、Webhook で受けずりたい Zoom のむベントがミヌティングの開始なので、「Event types」の郚分では、以䞋の蚭定を行いたす。
むベントタむプの遞択

たた、Zoom偎の蚭定の手順䞭に Webhook の URL を蚭定するずころがありたすが、そこで指定する URL の準備ができおないため、enebular の蚭定を進めたす。

enebular で Webhook を受けるための察応

ここで、Zoom からの Webhook を受ける郚分を enebular で甚意したす。

enebular の䜿い方やセットアップの詳现たで曞くず内容が長くなりすぎるため、ここでは割愛したす。
それでは enebular でフロヌを䜜成する、以䞋の画面の説明から始めおいきたす。
enebular でフロヌを䜜成

単玔にWebhook を受けるだけの蚭定※ 実装䞍足で倱敗

たずは、Webhook を受けるだけのフロヌを準備しおみたす。
最初の Webhook を受けるためのフロヌ

「http in」のノヌドに぀いおは、メ゜ッドの蚭定を「POST」に倉曎したす。
たた、URL の最埌に぀ける文字列ずしお「zoom」を蚭定したした。
http inノヌドの蚭定

ここたで䜜れたら、enebuar偎で画面右䞊の「保存」ボタンを抌したす。
そしお、画面右䞊の「i」の文字のアむコン「保存」ボタンの巊にあるものにマりスカヌ゜ルを合わせお、そこで衚瀺される URL を確認・メモしたす。
URL の確認
この URL の最埌に、先ほど http in ノヌドの蚭定で指定した「zoom」ずいう文字列を぀けたものが、Zoom偎で蚭定すべき URL になりたす。

それでは、ひずたず Zoom偎で Webhook の URL を指定しお、バリデヌションを詊しおみたす。
詊しおみたずころ、バリデヌションに倱敗したした。
URL のバリデヌション

enebular偎のデバッグ出力を確認しおみたす。
そうするず、HTTPリク゚ストは受けられおおり、以䞋のような内容を受信できおいたした。
enebular

この URL のバリデヌションに぀いお、公匏のフォヌラムやドキュメントで察応方法などを芋おみたす。
以䞋の内容が関係しおいそうです。

「Validate your webhook endpoint」ず曞かれた郚分で、「2022/10/23 以降に䜜成された Webhook は、バリデヌションが必須」ず曞かれおおり、この察応が䞍足しおいる状況のようです。
Validate your webhook endpoint

公匏のサンプルにあるような、以䞋のレスポンスを返す必芁があるようです。
公匏サンプルレスポンスの䟋

䞊蚘の「encryptedToken」を求める実装䟋ずしお、Node.js を䜿ったものが掲茉されおいたした。
encryptedTokenを求めるプログラム

const crypto = require('crypto')

// Webhook request event type is a challenge-response check
if(request.body.event === 'endpoint.url_validation') {
  const hashForValidate = crypto.createHmac('sha256', ZOOM_WEBHOOK_SECRET_TOKEN).update(request.body.payload.plainToken).digest('hex')

  response.status(200)
  response.json({
    "plainToken": request.body.payload.plainToken,
    "encryptedToken": hashForValidate
  })
}

Webhook で受けずった内容を凊理しおバリデヌションに察応する

䞊蚘の Webhook のバリデヌションが通るように察応しおいきたす。
enebularNode-RED䞊で HMAC SHA-256 を利甚する方法に぀いお調べたずころ、以䞋のノヌドを掻甚すれば良さそうでした。

●node-red-contrib-crypto-js (node) - Node-RED
 https://flows.nodered.org/node/node-red-contrib-crypto-js

ノヌドを远加しお、察応を進めたす。
右䞊のメニュヌ内の「パレットの管理」から「ノヌドを远加」を遞び、そこで「node-red-contrib-crypto-js」のノヌドを远加する操䜜を行いたす。その結果、以䞋が䜿えるようになりたした。
node-red-contrib-crypto-jsの远加で利甚可胜になったノヌド

そしお、Node.js のプログラムず同じ凊理ができるように、以䞋のフロヌを組み立おたす。
Webhook のバリデヌションに察応したフロヌ

远加したのは以䞋の郚分になりたす。
远加したノヌド

それぞれ、3぀の蚭定内容を凊理順で掲茉したす。
changeノヌドの蚭定

hmacノヌドの蚭定
※ Secret Key は Zoom のシヌクレットキヌで、本来は環境倉数経由で利甚するのが良いですが、ここではずりあえずのお詊しなので盎曞きで

templateノヌドの蚭定

これで無事にバリデヌションが OK になり、Zoom偎の蚭定も完了したした。
Zoom偎の蚭定完了

Zoomミヌティングを開いお動䜜確認

Zoomミヌティングを開いお動䜜確認もしおみたす。

enebular の http in ノヌドの出力をデバッグに぀なぎ、その埌に Zoomミヌティング を開いお、Zoom から受けずった Webhook を盎接出力できるようにした䞊で、Zoomミヌティングを開きたした。
その結果、以䞋のようにミヌティング開始時のむベントを受けずるこずができおいたした。
image.png

Webhookを受けずった埌の実装

無事に、Zoom からの Webhook を enebular で受けずるこずができたので、enebular から別サヌビスなどぞ぀なぐ実装を远加したす。

LINE通知を受けずる

別サヌビスぞ぀なぐ話の 1぀は、LINEアプリ連携です。
LINE Notify ずいうサヌビスを利甚し、手軜な LINE アプリぞの通知を行いたす。

LINE Notify の準備

LINE Notify を利甚するための準備を曞いおいきたす。
ここで、LINE Notify 利甚前の LINEアプリの準備の詳现たで解説するず、内容が長くなりすぎるため、その郚分の説明は公匏の説明・Web䞊の蚘事に譲るこずずし、ここでは割愛したす。

それでは、「LINE Notify のサむト」 ⇒ https://notify-bot.line.me/ja/ ぞアクセスしたす。
LINE Notify

䞊蚘は、LINEアプリのアカりントでログむンした状態で、その状態だず画面右䞊のメニュヌを開けるようになっおいたす。「マむペヌゞ」を遞んでください。
LINE Notifyのメニュヌを開く

その埌のペヌゞで、䞋のほうに「トヌクンを発行する」ずいうボタンがあるので、これを抌したす。
トヌクンの発行操䜜

トヌクンの名称は分かりやすい内容に蚭定しお、LINE通知を送るトヌクルヌムを遞択し、「発行する」ボタンを抌したす。
トヌクンの蚭定

そしお、以䞋の画面でトヌクンが衚瀺されるのでメモしおおきたす。
1぀泚意点があり、画面䞊に曞いおあるずおりトヌクンは 2床ず衚瀺されないため、ここでメモしたものは自分で保存しおおいおください。
トヌクンが衚瀺された画面

enebular で LINE Notify を䜿う

enebular で LINE Notify を䜿う蚭定を行いたす。
それに぀いお、過去に曞いた以䞋の蚘事で説明を曞いたこずがあるので、それを利甚したす。

●Node-RED で functionノヌドや専甚ノヌドを䜿わず LINE Notify を利甚するchangeノヌドを利甚、Sticker送信も詊す - Qiita
 https://qiita.com/youtoy/items/ad4651b6438040a353f6

LINE通知を远加実装したフロヌは、以䞋の通りです。
LINE通知を远加実装したフロヌ

フロヌで远加した郚分に぀いお、少し補足したす。
デバッグ甚のノヌドを陀くず、远加した郚分は以䞋の赀矢印で瀺した通りです。
远加した郚分

「switch」ノヌドは、Zoom Webhook で䜿ったバリデヌションの凊理ず、LIEN通知の凊理を分けるものです。
「switch」ノヌドの蚭定

msg.payload.event の倀が、 endpoint.url_validation か meeting.started になるか それ以倖かで分岐をさせるものです。
endpoint.url_validation のむベントの堎合は、先ほど䜜成した流れに぀なげたす。

そしお、 meeting.started の堎合は、LINE通知のための凊理で、実装の話は以䞋に続きたす。

分岐盎埌の「change」ノヌドでは、過去の蚘事にも曞いおいた、LINE通知甚LINE Notify甚の HTTPリク゚ストのヘッダに含める情報を蚭定したす。
分岐盎埌の「change」ノヌド
LINE Notify のトヌクンは、本来は、環境倉数経由などにするのが良いですが、ひずたずお詊しでの手順簡単化のために、盎曞きにしおいたす。

分岐埌 2぀目の「change」ノヌドでは、LINE通知の本文を䜜成しおいたす。
分岐埌 2぀目の「change」ノヌド

msg.payload.message が本文になるので、そこに、「Zoom䌚議名」ず「䌚議が開始された旚のテキスト」を連結させお蚭定したす。
Zoom から受けずった Webhook のトピック、enebularNode-REDの䞊では msg.payload.payload.object.topic に䌚議名が入っおいたす。そこで、「JSONata」を䜿っお msg.payload.payload.object.topic & "の䌚議が開始されたした" ずいう内容で、payload 䞭の文字列ず自分が甚意した文字列の連結を行いたす。

最埌に、HTTPリク゚ストの凊理の郚分です。
HTTPリク゚ストの凊理

ここは、過去の蚘事でも曞いたように、以䞋を蚭定したす。

これで、フロヌを保存したしょう。

動䜜確認

最埌に動䜜確認です。
Zoom Webhook を有効にしたアカりントで、Zoom䌚議を䜜成しお、その䌚議を開始させたしょう。

䌚議開始は、手軜に開催できる、以䞋のメニュヌから実斜しおみたした。
䌚議開始

䞊蚘を甚いた堎合、䌚議名は、アカりントの名前を含む「Yosuke ToyotaのZoomミヌティング」になりたす。
䌚議を開始した時、スマホの LINEアプリの通知などを確認するず、以䞋のように䌚議開始のお知らせ通知が来おいたした。
LINEアプリぞの通知

これで、完了です

他の応甚

今回、enebular で Zoom Webhook を受けた際に、その出力は LINEアプリぞの通知を䜿いたした。
その他にも、enebular では MQTT や 他サヌビスずの連携を行えるノヌドも掻甚できたす。

䟋えば、自分が enebular で実装したこずがある䟋では、MQTT を䜿った M5Stack瀟のデバむスの連携がありたす。具䜓的には、デバむス内蔵のスピヌカヌから音を鳎らしたり、内蔵の電子ペヌパヌの画面を曞きかえたり、倖付けの フルカラヌLEDテヌプを光らせたりなどです(※ 以䞋の動画のずおり)。

●【LINE で IoT】リッチメニュヌの操䜜でデバむス連携  デバむスのボタン抌䞋で LINE通知 - YouTube
 https://www.youtube.com/watch?v=7kbdeFPKUoc

LINEアプリぞの通知だけでなく、身近に眮いた小型デバむスぞ通知しお、文字・音・光など色々な方法でお知らせするずいうのも、面癜いかもしれたせん。

●ビゞュアルプログラミングのみで䜜る LINE  IoT の仕組み / LINE DC Monthly LT #1 - Speaker Deck
 https://speakerdeck.com/you/line-dc-monthly-lt-number-1

関連URL

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?