ã¯ããã«
ãã¡ãã¯ã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 ã§ãããŒãäœæããã以äžã®ç»é¢ã®èª¬æããå§ããŠãããŸãã

åçŽã«Webhook ãåããã ãã®èšå®ïŒâ» å®è£ äžè¶³ã§å€±æïŒ
ãŸãã¯ãWebhook ãåããã ãã®ãããŒãæºåããŠã¿ãŸãã

ãhttp inãã®ããŒãã«ã€ããŠã¯ãã¡ãœããã®èšå®ããPOSTãã«å€æŽããŸãã
ãŸããURL ã®æåŸã«ã€ããæååãšããŠãzoomããèšå®ããŸããã

ãããŸã§äœããããenebuaråŽã§ç»é¢å³äžã®ãä¿åããã¿ã³ãæŒããŸãã
ãããŠãç»é¢å³äžã®ãiãã®æåã®ã¢ã€ã³ã³ïŒãä¿åããã¿ã³ã®å·Šã«ãããã®ïŒã«ããŠã¹ã«ãŒãœã«ãåãããŠãããã§è¡šç€ºããã URL ã確èªã»ã¡ã¢ããŸãã

ãã® URL ã®æåŸã«ãå
ã»ã© http in ããŒãã®èšå®ã§æå®ãããzoomããšããæååãã€ãããã®ããZoomåŽã§èšå®ãã¹ã URL ã«ãªããŸãã
ããã§ã¯ãã²ãšãŸããZoomåŽã§ Webhook ã® URL ãæå®ããŠãããªããŒã·ã§ã³ã詊ããŠã¿ãŸãã
詊ããŠã¿ããšãããããªããŒã·ã§ã³ã«å€±æããŸããã

enebularåŽã®ãããã°åºåã確èªããŠã¿ãŸãã
ãããããšãHTTPãªã¯ãšã¹ãã¯åããããŠããã以äžã®ãããªå
容ãåä¿¡ã§ããŠããŸããã

ãã® URL ã®ããªããŒã·ã§ã³ã«ã€ããŠãå
¬åŒã®ãã©ãŒã©ã ãããã¥ã¡ã³ãã§å¯Ÿå¿æ¹æ³ãªã©ãèŠãŠã¿ãŸãã
以äžã®å
容ãé¢ä¿ããŠãããã§ãã
- Event notification endpoint URL - URL validation failed. Try again later Webhook Only App - API and Webhooks / Webinars - Zoom Developer Forum
- Using webhooksïŒ Validate your webhook endpoint
ãValidate your webhook endpointããšæžãããéšåã§ãã2022/10/23 以éã«äœæããã Webhook ã¯ãããªããŒã·ã§ã³ãå¿
é ããšæžãããŠããããã®å¯Ÿå¿ãäžè¶³ããŠããç¶æ³ã®ããã§ãã

å
¬åŒã®ãµã³ãã«ã«ãããããªã以äžã®ã¬ã¹ãã³ã¹ãè¿ãå¿
èŠãããããã§ãã

äžèšã®ãencryptedTokenããæ±ããå®è£
äŸãšããŠãNode.js ã䜿ã£ããã®ãæ²èŒãããŠããŸããã

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.js ã®ããã°ã©ã ãšåãåŠçãã§ããããã«ã以äžã®ãããŒãçµã¿ç«ãŠãŸãã

远å ããã®ã¯ä»¥äžã®éšåã«ãªããŸãã

ããããã3ã€ã®èšå®å
容ãåŠçé ã§æ²èŒããŸãã


â» SecretãKey 㯠Zoom ã®ã·ãŒã¯ã¬ããããŒã§ãæ¬æ¥ã¯ç°å¢å€æ°çµç±ã§å©çšããã®ãè¯ãã§ãããããã§ã¯ãšããããã®ã詊ããªã®ã§çŽæžãã§
ããã§ç¡äºã«ããªããŒã·ã§ã³ã OK ã«ãªããZoomåŽã®èšå®ãå®äºããŸããã

ZoomããŒãã£ã³ã°ãéããŠåäœç¢ºèª
ZoomããŒãã£ã³ã°ãéããŠåäœç¢ºèªãããŠã¿ãŸãã
enebular ã® http in ããŒãã®åºåããããã°ã«ã€ãªãããã®åŸã« ZoomããŒãã£ã³ã° ãéããŠãZoom ããåããšã£ã Webhook ãçŽæ¥åºåã§ããããã«ããäžã§ãZoomããŒãã£ã³ã°ãéããŸããã
ãã®çµæã以äžã®ããã«ããŒãã£ã³ã°éå§æã®ã€ãã³ããåããšãããšãã§ããŠããŸããã

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ã¢ããªã®ã¢ã«ãŠã³ãã§ãã°ã€ã³ããç¶æ
ã§ããã®ç¶æ
ã ãšç»é¢å³äžã®ã¡ãã¥ãŒãéããããã«ãªã£ãŠããŸããããã€ããŒãžããéžãã§ãã ããã

ãã®åŸã®ããŒãžã§ãäžã®ã»ãã«ãããŒã¯ã³ãçºè¡ããããšãããã¿ã³ãããã®ã§ããããæŒããŸãã

ããŒã¯ã³ã®åç§°ã¯åãããããå
容ã«èšå®ããŠãLINEéç¥ãéãããŒã¯ã«ãŒã ãéžæãããçºè¡ããããã¿ã³ãæŒããŸãã

ãããŠã以äžã®ç»é¢ã§ããŒã¯ã³ã衚瀺ãããã®ã§ã¡ã¢ããŠãããŸãã
1ã€æ³šæç¹ããããç»é¢äžã«æžããŠãããšããããŒã¯ã³ã¯ 2床ãšè¡šç€ºãããªããããããã§ã¡ã¢ãããã®ã¯èªåã§ä¿åããŠãããŠãã ããã

enebular ã§ LINE Notify ã䜿ã
enebular ã§ LINE Notify ã䜿ãèšå®ãè¡ããŸãã
ããã«ã€ããŠãéå»ã«æžãã以äžã®èšäºã§èª¬æãæžããããšãããã®ã§ããããå©çšããŸãã
âNode-RED ã§ functionããŒããå°çšããŒãã䜿ãã LINE Notify ãå©çšããïŒchangeããŒããå©çšãStickeréä¿¡ã詊ãïŒ - Qiita
ãhttps://qiita.com/youtoy/items/ad4651b6438040a353f6
LINEéç¥ã远å å®è£
ãããããŒã¯ã以äžã®éãã§ãã

ãããŒã§è¿œå ããéšåã«ã€ããŠãå°ãè£è¶³ããŸãã
ãããã°çšã®ããŒããé€ããšã远å ããéšåã¯ä»¥äžã®èµ€ç¢å°ã§ç€ºããéãã§ãã

ãswitchãããŒãã¯ãZoom Webhook ã§äœ¿ã£ãããªããŒã·ã§ã³ã®åŠçãšãLIENéç¥ã®åŠçãåãããã®ã§ãã

msg.payload.event ã®å€ãã endpoint.url_validation ã meeting.started ã«ãªããïŒïŒ ãã以å€ãïŒã§åå²ãããããã®ã§ãã
endpoint.url_validation ã®ã€ãã³ãã®å Žåã¯ãå
ã»ã©äœæããæµãã«ã€ãªããŸãã
ãããŠã meeting.started ã®å Žåã¯ãLINEéç¥ã®ããã®åŠçã§ãå®è£
ã®è©±ã¯ä»¥äžã«ç¶ããŸãã
åå²çŽåŸã®ãchangeãããŒãã§ã¯ãéå»ã®èšäºã«ãæžããŠãããLINEéç¥çšïŒLINE NotifyçšïŒã® HTTPãªã¯ãšã¹ãã®ãããã«å«ããæ
å ±ãèšå®ããŸãã

LINE Notify ã®ããŒã¯ã³ã¯ãæ¬æ¥ã¯ãç°å¢å€æ°çµç±ãªã©ã«ããã®ãè¯ãã§ãããã²ãšãŸãã詊ãã§ã®æé ç°¡ååã®ããã«ãçŽæžãã«ããŠããŸãã
åå²åŸ 2ã€ç®ã®ãchangeãããŒãã§ã¯ãLINEéç¥ã®æ¬æãäœæããŠããŸãã

msg.payload.message ãæ¬æã«ãªãã®ã§ãããã«ããZoomäŒè°åããšãäŒè°ãéå§ãããæšã®ããã¹ãããé£çµãããŠèšå®ããŸãã
Zoom ããåããšã£ã Webhook ã®ãããã¯ãenebularïŒNode-REDïŒã®äžã§ã¯ msg.payload.payload.object.topic ã«äŒè°åãå
¥ã£ãŠããŸããããã§ããJSONataãã䜿ã£ãŠ msg.payload.payload.object.topic & "ã®äŒè°ãéå§ãããŸãã" ãšããå
容ã§ãpayload äžã®æååãšèªåãçšæããæååã®é£çµãè¡ããŸãã
æåŸã«ãHTTPãªã¯ãšã¹ãã®åŠçã®éšåã§ãã

ããã¯ãéå»ã®èšäºã§ãæžããããã«ã以äžãèšå®ããŸãã
- ã¡ãœããïŒ POST
- URLïŒ https://notify-api.line.me/api/notify
ããã§ããããŒãä¿åããŸãããã
åäœç¢ºèª
æåŸã«åäœç¢ºèªã§ãã
Zoom Webhook ãæå¹ã«ããã¢ã«ãŠã³ãã§ãZoomäŒè°ãäœæããŠããã®äŒè°ãéå§ãããŸãããã
äŒè°éå§ã¯ãæè»œã«éå¬ã§ããã以äžã®ã¡ãã¥ãŒãã宿œããŠã¿ãŸããã

äžèšãçšããå ŽåãäŒè°åã¯ãã¢ã«ãŠã³ãã®ååãå«ããYosuke Toyotaã®ZoomããŒãã£ã³ã°ãã«ãªããŸãã
äŒè°ãéå§ããæãã¹ããã® 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
