ZOOM APIを利用してミーティングのスケジュールを編集する (スケジュール操作編)

ZOOMのページにログインせずにスケジュールを編集する必要があったため調査内容をまとめておきます。
執筆時点(2021-11-23)ではこの内容で実現できました。
今回はZOOMのAPIからスケジュールの編集を行います。(準備する部分はこちら)

APIでスケジュールをいじる

スケジュールを作成する

スケジュールの作成もユーザ情報を取得した時と同じようにリクエストを投げてjsonのレスポンスを受けるだけです。
スケジュール作成はhttps://api.zoom.us/v2/users/ユーザのID文字列/meetingsに設定内容をPOSTします。
今回は以下のようなjsonにしましたが詳細に設定をいじれるので公式のリファレンスを参考にユースケースに合わせて調整できます。
2022年の1月15日 15:00を設定する例

公式:https://marketplace.zoom.us/docs/api-reference/introduction

{
    type: 2,    //ミーティングのタイプ(今回はスケジュールされたミーティング、繰り返す予定とかもある)
    start_time: "2022-01-15T15:00:00",  //設定する開催時間(2022-01-15T15:00:00ZにするとタイムゾーンがGMT固定で設定される)
    topic: "作成テスト", //表示されるミーティング名称
    timezone: "Asia/Tokyo", //start_timeの時間を割り当てるタイムゾーン
    password: "password", //参加するときに入力するパスコード
    setting:[
        host_video: true,   //ホストのビデオON
        participant_video: true, //参加者のビデオON
        join_before_host: true, //ホストが来る前に参加可能
        waiting_room: false //待機室なし
    ],
    duration: 60 //単位は分、予定として押さえる時間(カレンダーとか)
}

早速PHPでAPIを叩いてスケジュールを作成してみます、以下のような感じでできました。

use \Firebase\JWT\JWT;

$payload = array(
    "iss" => ZOOM_APIKEY,
    "exp" => time() + 30
);

$jwt = JWT::encode($payload, ZOOM_SECRET); //JWTの文字列

$curl = curl_init();

$setteing = [
 "host_video" => true,
 //とか
];

$create_request = [
    "type" => 2,
    "setting" => $setting,
    //とか
];
$post_json = json_encode($create_request);

curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/users/".$this->user."/meetings");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Authorization: Bearer ".$jwt
    "Content-type: application/json"
));
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_json );
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);

作成できた場合はレスポンスとしてミーティングの詳細がjson形式で得られます。

{
    //抜粋
    "id": 1234567,
    "host_id": "ホストの文字列",
    "topic": "作成テスト",
    "start_time": "2021-12-05T08:37:15Z",
    "start_url": "https://XXXXX",
    "join_url": "https://XXXXX?pwd=YYYYYYY",
    "password": "password",
    "settings": {
        "host_video": true,
        ...
    },
}

ここからjoin_urlpasswordあたりを抜き出せば関係者に共有してミーティングを行うことができます。
また、ミーティング自体を編集するなどでIDが必要になるのでidを記録しておきましょう。

作成できたミーティングはZOOMにログインすると確認できます。
cre.png

ミーティングを編集する

作成したスケジュールの編集も上記とほぼ同じです。異なるのは/meetings/ミーティングのIDにPATCHで送信することです。

//jwtは省略

$setteing = [
 "host_video" => true,
 //とか
];

$create_request = [
    "type" => 2,
    "start_time" => "2022-02-16T16:00:00", // 1/15 PM15の予定を  2/16 PM16にする例
    "setting" => $setting,
    //とか
];

$post_json = json_encode($create_request);
$meeting_id = "ミーティングのID";

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/meetings/".$meeting_id);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
  "Authorization: Bearer ".$jwt.";",
  "Content-type: application/json; charset=UTF-8;"
));
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_json );
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($curl);

curl_close($curl);

成功するとミーティングの予定や設定が変更されます。この時、レスポンスは204のステータスだけが返ります。

ミーティングの日時が変更されているのがわかります。
edit.png

ミーティングを削除する

削除するのも編集と同様にミーティングのIDを指定してリクエストするだけです。
削除はDELETEになり、特にパラメータなどの設定は必要ありません。

//jwtは省略

$meeting_id = "ミーティングのID";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/meetings/".$meeting_id);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Authorization: Bearer ".$jwt,
    "Content-type: application/json"
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

無事削除されました。こちらも成功するとステータス204が返ります。
del.png

まとめ

前回と合わせてZOOMのAPIを一通り利用できました。他にもミーティングの一覧を取得したりと色々な機能があるので
ZOOMを利用することになった場合はAPIを叩くようにしてしまうのもよいかもしれません。

参考文献

https://marketplace.zoom.us/
https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate
https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingupdate
https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingdelete