LoginSignup
6
5

More than 3 years have passed since last update.

Zoom LINE GoogleカレンダーAPI BOT

Last updated at Posted at 2020-06-28

はじめに

昨今のコロナウイルスの影響で外出すること減り、オンラインで会議や飲み会、キャバクラまで行われています。

そんな中でよく使われているのが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編)

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5