Google Apps Script

Google Apps ScriptからZoomAPIを使ってミーティングを作成してみた【2021年2月時点】

Google Apps ScriptからZoomAPIを使ってミーティングを作成してみた【2021年2月時点】
ボーっとYouTubeの動画を眺めていたら、「プログラミングにおいてAPIについて知らないと損」という話を耳にしました。

「API」とは、「Application Programming Interface(アプリケーション プログラミング インタフェース)」のこと。
例えば、「LINE Messaging API」を使えば、公式LINEを自動で運用することができます。

そういえば最近、Zoomミーティングをスケジュールすることを自動化できないかなぁと感じていました。
UWSCで日付と時間以外は自動化できていたのですが、いよいよそれすら面倒に思えてきたのです。なんと欲深い人間でしょうか(笑)

なんとなく調べ始めたら、ZoomにもAPIがあり、Google Apps Scriptから叩けるとの事。
早速、いつも使っているシステムに組み込んでみたら、とても快適になったので、その方法をまとめてみました。

注意

本投稿で使用している「JWT」アプリタイプの認証は、2023年9月8日に終了となりました。


 

ZoomAPIをGoogle Apps Scriptで叩くのに必要なステップは?

step
1
Zoomアカウントへサインイン

step
2
「JWT」タイプのアプリを作成

step
3
ZoomのuserIdを取得

step
4
Google Apps ScriptでZoomミーティング作成のコードを記述

 

Zoomアカウントへサインイン

https://zoom.us/signin
GoogleやFacebookのアカウントがあれば、それらを使ってサインインできます。
サインインする手段がない場合、メールアドレスを使って先にZoomアカウントが取得してください。
https://zoom.us/signup

 

「JWT」タイプのアプリを作成

サインインできたら、ZoomAPIを使ってミーティングを作るのに必要な情報を集めていきます。
必要な情報は3つ。

  • API Key
  • API Secret
  • userId

 

「API Key」と「API Secret」を得るには?

まず、下記URLにアクセスします。
https://marketplace.zoom.us/

次に、右上にある「Develop」をクリックして「Build App」を選択します。
Google Apps ScriptからZoomAPIを使ってミーティングを作成してみた

初めてアクセスすると、ライセンスと利用規約について表示されるので、「Agree」を押して同意します。
Google Apps ScriptからZoomAPIを使ってミーティングを作成してみた

続いて、「JWT」の「Create」ボタンをクリックします。
Google Apps ScriptからZoomAPIを使ってミーティングを作成してみた

※参考:JWT With Zoom

基本情報の入力を求められるので、

  • App Name(アプリ名)
  • Company Name(会社名)
  • Name(開発者名)
  • Email Address(メールアドレス)

を入力して、次に進みます。

そうすると、「App Credentials」にアクセスできるようになります。
そのページにある、「API Key」と「API Secret」を控えておきましょう。
Google Apps ScriptからZoomAPIを使ってミーティングを作成してみた

 

userIdを得るには?

様々な方法があるらしく、うちはWindows10なので、「コマンドプロンプト」から「curlコマンド」を使って取得しました。
それには「JWT Token」が必要ですので、Zoomの「App Credentials」ページから、コピーしておきます。

参考:Windowsユーザー&ノンプログラマー向けcurlコマンドの使い方

 

コマンドプロンプトからcurlコマンドを実行する

「コマンドプロンプト」に次のコードを入力して実行します。
{{JWT Token}}は、先ほどコピーした「JWT Token」に置き換えます。

curl -H "Authorization: Bearer {{JWT Token}}" https://api.zoom.us/v2/users

ここで引っかかったのが、「'(シングルクォーテーション)」と「"(ダブルクォーテーション)」の違いについて。
Windowsでは「"(ダブルクォーテーション)」で囲わないと、「curl: (6) Could not resolve host: Bearer」とエラーメッセージが表示されます。
参考にしたサイトは「'(シングルクォーテーション)」だったので、おそらくMacのパソコンなのでしょう。

成功すると、次のような文字列が返ってきます。

{     "page_count":1,     "page_number":1,     "page_size":30,     "total_records":1,     "next_page_token":"",     "users":[         {             "id":"",             "first_name":"",             "last_name":"",             "email":"",             "type":1,             "pmi":,             "timezone":"Asia/Tokyo",             "verified":1,             "dept":"",             "created_at":"",             "last_login_time":"",             "last_client_version":"5.4.59784.1220(win)",             "language":"jp-JP",             "phone_number":"",             "status":"active",             "role_id":"0"           }     ] }

この中にある「"users":[」の「"id":」が、必要な「userId」です。

 

Google Apps ScriptでZoomミーティング作成のコードを記述

「API Key」と「API Secret」と「userId」が準備できたら、Google Apps Scriptのコードを書きます。

const APIKey = '{{取得したAPI Key}}'; const APISecret = '{{取得したAPI Secret}}'; const UserId = '{{取得したuserId}}';   // ◆JWTトークン取得 function GetToken() {     const Header = Utilities.base64Encode(JSON.stringify({       'alg':'HS256',       'typ':'JWT'     }));     const ClaimSet = JSON.stringify({       "iss": APIKey,       "exp": Date.now() + 3600     });     const EncodeText = Header + "." + Utilities.base64Encode(ClaimSet);     const Signature = Utilities.computeHmacSha256Signature(EncodeText, APISecret);     const JwtToken = EncodeText + "." + Utilities.base64Encode(Signature);     return JwtToken; }   // ◆ミーティング作成 function CreateMeeting(Token, UserId, Topic, StartTime) {     var Data = {       'topic': Topic,       'type': 2,       'start_time': StartTime,       'duration': 60,       'timezone': 'Asia/Tokyo',       'settings': {         'join_before_host': "true",       }     };     var Options = {       'method' : 'post',       'contentType': 'application/json',       'headers': {'Authorization' : 'Bearer ' + Token},       'payload' : JSON.stringify(Data)     };     const Response = JSON.parse(UrlFetchApp.fetch('https://api.zoom.us/v2/users/' + UserId + '/meetings', Options).getContentText('UTF-8'));       return Response; }   let MyToken = GetToken() let a = CreateMeeting(MyToken, UserId, 'TestMeeting', '2021-02-01T12:00:00'); console.log(a['topic']); console.log(a['start_time']);

個人的備忘記録を書くと、
・['topic']を['Topic']と大文字にすると、反映されない。
・start_timeの形式は「2021-02-01T12:00:00」と「T」を挟む。これがないと即時開始のミーティングになる。
・Moment.jsを使って時間指定する時は、GMT(グリニッジ標準時)で指定すると良い。

    let Start_time = '2021-02-01 12:00:00';     let a = CreateMeeting(MyToken, UserId, 'TestMeeting', new Date(Start_time.add(9,'h').format('YYYY-MM-DD H:mm:ss')));

参考:
Zoom APIでミーティングの作成をGASから行う
Create a meeting - Meetings - Zoom API - API Reference

 

まとめ

Google Apps ScriptからZoomAPIを使ってミーティングを作成するには、3つの情報を取得して、コードを実行すれば可能です。
調査やコード作成には結構な時間を使いましたが、今後の手間とヒューマンエラーの可能性が無くなったので、十分に元が取れそうです。
まだまだ理解が不十分なため、もし間違いがありましたら、コメントで教えていただけると助かります。

-Google Apps Script
-, , , , , , , , , , ,