はじめに
昨今のコロナウイルスの影響で外出すること減り、オンラインで会議や飲み会、キャバクラまで行われています。
そんな中でよく使われているのがZoomだと思います。
僕も友達とよく使いますし認知度としてはかなり高いものだと思います。
Zoomでミーティングを予約する時ZoomでURLを発行して、その予定をGoogleカレンダーに行って予定を入れてURLを貼り付けるという作業をしていたのですが、面倒だなと思ってました。
こういう無駄な工数を勉強しているプログラミングで解決できるんだということで、
生活の中で身近なLINEを使って予約するLINEbotを作ってみました。
この記事はあくまで参考にした記事をまとめたもので、参考記事を見ることで形にできると思います。
個人的に躓いたポイントを記述しています。
概要
LINEで「会議」と送ることで日時選択が可能となり、Zommを予約したい時間を指定する。
時間を指定すると、Zoomがその時間に予約され、同時にGoogle カレンダーにも予定を追加する。
日時指定後、ZoomのミーティングURLとGoogleカレンダーのURLをメッセージとして返す。
予定を確認する際は、「予定」と送ることで直近5件のスケジュールを返す。
録画動画:https://youtu.be/_YBavI3peLw
Zoom API
zoomのAPIキーとシークレットキーを使ってzoomのミーティングを作成する際のJWT(json web token)を生成する。
PHP-JWT
というライブラリを使ってJWTを生成する。
use \Firebase\JWT\JWT;
これを記述することでPHP-JWT
を利用することができ、JWT::encode()
でtokenを生成してくれる。
生成したJWTをHeaderに記述する。
※content-typeはapplication/json
を指定する
POSTFIELDS
にミーティングの詳細を記述する。
topic
type
start_time
timezone
settings
etc.
今回はミーティングURLを返したかったため、join_url
をreturn
参考記事
公式ドキュメントCreate a Meeting
Help with api create meeting with php
JWT With Zoom
PHP & JWT - Basic instructions
firebase/php-jwt
What’s the difference between join_url and start_url
LINE Messaging API
条件分岐によってミーティングを作成するのか取得するのかを分ける。
メッセージテンプレレートで日時を指定するか選択する
日時指定を選択すると日時選択アクションによって日時を選択する。
指定あれた日時がポストバックイベントとして返ってくるのでその日時をzoomの開始日時に入れる。
※zoomのstart_time
のフォーマットは決まっているためその形にして渡す必要がある
YYYY-mm-ddTHH:ii:ss
今回はdate
関数で下記のようにした。
$post_time = date('Y-m-d\TH:i:s', strtotime(datetime);
// '\'を入れることで本来[JST]と返ってくるものを[T]だけにできる
参考記事
日時選択アクション
ポストバックイベント
LINE Messaging APIをPHPで使ってみる
PHP×LINE Messaging APIで作るチャットボット
Googleカレンダー API
Googleカレンダーで色々と設定する必要がある。
※参考記事【Google Calendar API と PHP で 予定の取得と追加をしてみるよ(準備編)】参照
【作成】
LINEから送られてきた日時をGoogle_Service_Calendar_Event
の引数の開始時間に渡す。
今回終了時間については開始から1時間とした。
※date
関数とstrtotime
関数によって開始時間から1時間足した時間を渡す
descriptionにzoomのURLを記述することでカレンダーからでもzoomに飛ぶことができる。
予定を追加する時はGoogle_Service_Calendar::CALENDAR_EVENTS
【取得】
LINEから予定と送られた時にそのときの日時から直近の予定を返す。
$optParamsに件数などを指定する。
foreachで回して返ってきた結果をLINEからに返す。
予定を取得する時はGoogle_Service_Calendar::CALENDAR_READONLY
参考記事
Create Events
Events: insert
Events: get
Google Calendar API と PHP で 予定の取得と追加をしてみるよ(準備編)
Google Calendar API と PHP で 予定の取得と追加をしてみるよ(PHP編)