【GAS】「当日の退社時の予定をLINEから入力してグーグルカレンダーに登録する」くん作った
ちょっとした予定というのは、ちょっとしているだけにすぐ忘れるので作った。
Google App Scriptと、LINEのmessaginAPIというやつでなるべく簡単に。
雨の日に傘忘れないでくんの紹介はしたが、本当に作りたかったのはこっち。ということでさっさと作る。
先人たちのおかげで大して詰まることはなかった。ありがたい~。
要件
LINEに
「買い物
トイレットペーパー
と送ると、Googleカレンダーに「買い物」というタイトルで説明のところに「トイレットペーパー、サランラップ」という予定が退社時間(18時)に追加されるようにする。
できれば、退社時(18時)と帰宅時(19時)どちらの予定にするか選びたい。「買い物」は退社時、「洗濯」は帰宅時に通知してほしいから。
可能な限り楽に作りたい。可能な限り楽に予定登録をしたい。
コードを書く
というわけでまずコードを書く。
カレンダーに予定を追加する方法は「傘忘れないでねくん」で覚えたので、LINEとの連携についてちょっと調べる。
要はLINEからメッセージを受け取って、その内容を読み取る必要があるのだ。
はい、以下がとても参考になりました。ありがとうございます。
以下、コード。
己の楽さを追求した結果散漫なコードになりますた。最適化するのも面倒だったんで。
何回Utilities.formatDate( today, 'Asia/Tokyo', 'yyyy/MM/dd')を書くんだ。ファンキーだな。
上のメソッドはLINEからメッセージを受け取ったら動くもの。特に中身を変える必要はない。
カスタマイズするなら下のメソッド。
退社時(18時)と帰宅時(19時)で分けたかったので以下の条件をつける。
if(message.split(/\r\n|\n/)[0] == "いえ" || message.split(/\r\n|\n/)[0] == "家")
LINEに送るメッセージが
「いえ
洗濯」
であれば19時に予定をいれる。「家」でも可。ものぐさ人間なので律儀に「帰宅時」とか入れるのすらめんどくさい。「いえ」が限界。
もし最初の行が「いえ」もしくは「家」でなければ問答無用で18時に予定を入れる。このあたりはユーザー(私)がしっかりすればよい。
予定のタイトルは「いえ」の場合は2行目、そうじゃなければ1行目を入れている。
予定の説明については「いえ」の場合は3行目以降。そうじゃなければ問答無用でタイトル含めて全部入れている。めんどくさかったので。さすがに「いえ」の場合だと「いえ」とタイトルが説明に入ってきて邪魔なので除外するようにしたが(// 「いえ」とタイトル以外を説明文に追加のあとのfor文当たりの処理)。
もしもっと汎用性の高いものを作りたければ、
LINEにて
「20200205 12:30
買い物
トイレットペーパー
と送り、一行目を取得してそのままstartStrとかにぶっこめばいいと思う。終了時間はプラス一時間とかにして。そうすれば予定の日時もLINEで入力できる。
ただ私はものぐさ人間なので「20200205 12:30」と打ち込むのすら嫌。「かいもの」とだけ打って終わらせたい。のでこういう仕様に。
コードができあがったら、保存して上のメニューから「公開」「ウェブアプリケーションとして導入」を選ぶ。
「Execute the app as:」は「自分」、もしくは「me」。
「Who has access to the app:」は「全ユーザー(匿名も含む)」、もしくは「Anyone,even anonymous」。
承認を求められた際に警告が出たら、「詳細」からの「○○(安全ではないページに移動)」からの「許可」でいける。
そしたらできあがったURLをコピってどこかにはっつけとく。
ちなみに、コードを変更した場合は、ProjectVesionをnewにしないと反映されないので注意。
LINE DevelopersでmessagingAPIを取得
はい、次はLINEと連携できるようにします。
またまた下記を参照すればOK。ありがたい~~。
私のコードはLINEのメッセージをGASに送るだけのためページ中盤の「LINEからGoogleAppsScriptにメッセージを送る」の項目だけでOK。
ただ、私の場合はLINE Developersのページが完全に英語だった。それでも参考URLとほとんど変わらないので大丈夫なはず。結構な頻度で仕様が変わるっぽい。
注意点だけ書いときます(2020年1月時点)。
messaginAPIを登録する時に「プラン」を選ぶ項目がなかった。そのまま進めば勝手に「フリー」になっているため大丈夫。
設定時は「messagingAPI」項目の「Webhook settings」を編集。「Webhook URL」に先ほどコピったGASのURLをはっつけて更新。
近くのボタンが「Verify」となっているので押下してテスト。「Success」と出ればOK。200がどうたらとエラーが出たら「ウェブアプリケーションとして導入」の手順が違っている可能性がある。特に「Who has access to the app:」は「全ユーザー(匿名も含む)」、もしくは「Anyone,even anonymous」になっているかを確認。
「Use webhook」をONにする。
参照URLの
は「Allow bot to join group chats」のことだと思う。
「Edit」のページから
「チャット」「チャットへの参加」の項目を探し、
「グループ・複数人チャットへの参加を許可しない」から「グループ・複数人チャットへの参加を許可する」に変更する。
恐らく「Allow bot to join group chats」は「Disabed」のままだが、そのうち「Enabled」になると思うので気にしない。
はい、ここまでできたら、設定画面にあるQRコードを使って友達登録。
あとはグループラインを作って自分と追加したやつ(チャネルというらしい)を追加。
実際に使ってみる
LINEにさっそく、追加してみたい予定を送信!!
そしてGoogleカレンダーを見れば予定が追加されているはず!おめでとう!
「メッセージありがとう!~~~」みたいな長い文が毎回Botから送られてくるので、それが嫌な場合はGASからLINEを送るメソッドを書けばよい。
ものぐさなので私はやらないが。
追記:LINEDeveloperのMessagingAPIの設定から送るメッセージを変更できました。楽~。
う~ん、最高!
あとはカレンダーの通知設定が働いていればスマホにプッシュ通知が届く!これでもうちょっとした予定を忘れなくて済む!
今思えばGoogleカレンダーにいれるのではなく、LINEに送るようにすればよかったかな、と思う。
でもLINEを送る時間指定がめんどくさそうだし、GASなだけあってGoogle系は動かすのが楽なので後悔はしていない。
あとLINEに送ると読まない限り通知がたまるのでそれはよくないな……。
というものを作ったと知り合い(会社員兼ライター)に言ったら、LINEとスプレッドシートでタスク管理できるやつ作ってと言われた。
ので、今度作ります。多分そっちの方が色々便利になるはず。さらに、人に渡すものなのでもうちょっとちゃんと作ると思う。
自分用ならこんな感じで適当なもの作っちゃうんだけどね~。