ボーっと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
1Zoomアカウントへサインイン
step
2「JWT」タイプのアプリを作成
step
3ZoomのuserIdを取得
step
4Google 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」を選択します。
初めてアクセスすると、ライセンスと利用規約について表示されるので、「Agree」を押して同意します。
続いて、「JWT」の「Create」ボタンをクリックします。
※参考:JWT With Zoom
基本情報の入力を求められるので、
- App Name(アプリ名)
- Company Name(会社名)
- Name(開発者名)
- Email Address(メールアドレス)
を入力して、次に進みます。
そうすると、「App Credentials」にアクセスできるようになります。
そのページにある、「API Key」と「API Secret」を控えておきましょう。
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つの情報を取得して、コードを実行すれば可能です。
調査やコード作成には結構な時間を使いましたが、今後の手間とヒューマンエラーの可能性が無くなったので、十分に元が取れそうです。
まだまだ理解が不十分なため、もし間違いがありましたら、コメントで教えていただけると助かります。