7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

enebularAdvent Calendar 2021

Day 21

enebularとLINE Messaging APIを使用してGoogleカレンダーにスケジュール登録しようとしてみた

Last updated at Posted at 2021-12-21

#####概要
最近自分のスケジュール管理をGoogleカレンダーで行っているのですが、スケジュールを登録する時に一回一回カレンダーを開くのが面倒です。そこでいつも使用しているLINEからスケジュールの登録ができるようになれば便利ではないかと考えて、LINEからGoogleカレンダーにスケジュールを登録する方法を試してみました。またLINEを使用する際にセキュアなサーバーを用意するのが面倒なので、enebularを使用して開発コストを下げることにしました。 

#####今回やってみること
今回はGoogleカレンダーのAPIをnode-redから叩くようにします。node-redはenebularから使用するようにします。
LINEからコマンドを送信するには、httpsサーバーが必要になりますので、enebularをhttpsサーバーとして使用します。

#####使用機材
汎用pc スマートホン 

#####方法
Googleカレンダーとenebularを連携する。
LINEとenebularを連携する。
LINEとbot方式でやり取りする
やり取りの中で取得したデータを利用してGoogleカレンダーにスケジュールとして登録する

#####実際の手順
まずはGoogleカレンダーを使用するためのノードをインストールします。
右側のハンバーガーメニューから、パレットの管理、ノードのインストールを選択します。
そこで、node-red-node-google をインストールします。

Googleカレンダーとenebularの連携についてはこちらのページがわかりやすかったので、こちらのページの手順通りにgoogleカレンダーとenebularの連携を行っていきます。
GoogleのAPIのkeyの発行が多少面倒に感じますが、こちらの手順通りに行ったら簡単に発行することができました。

次にenebularとLINEの連携をします。
http inノードを用意してメソッドはPOSTにします。
パスは任意につけてください。今回は/caltestにしました。

次にLINEのdeveloperサイトからプロバイダーを作成して、Mssaging APIで新規チャンネルを作成します。
チャネル名や業種などは適当に入力してください。

応答設定で、応答モードをBot、あいさつメッセージをオフ、応答メッセージもオフ、webhookをオンにします。
webhook設定でenebularのurlを設定します。enebularのurlに先ほど設定したパスを追加して設定します。
(例)https://ev2-example.herokuapp.com/caltest
のようになります。
これをセットして検証を行い、okが返ってきたら準備は完了です。

ここからいよいよLINEとGoogleカレンダーの連携の実装になるのですが、今回は実装が間に合わなかったので要素だけの検証になります。
Googleカレンダーに予定を登録するところ
入力する日付をLINEで受信するところの確認までになります。
興味がある方は組み合わせて実装してもらえるとうれしいです。

まずはGoogleカレンダーに予定をセットする確認になります。
フローはこのようにシンプルなものから試していってください。
enebularカレンダー.png
injectノードをトリガーにして、必要な情報をjsonとしてgoogleカレンダーのノードに渡します。

functionの中のコード例です。

let startDatetime
let endDatetime
let summary
let description
let colorId


startDatetime="2021-12-29T10:00:00+09:00"
endDatetime = "2021-12-29T11:00:00+09:00"
summary = "テスト入力"
description = "入力確認のためのテスト"
colorId = 2

msg.payload = {
    "start":{
        dateTime:startDatetime
    },
    "end":{
        dateTime:endDatetime
    },
    summary,
    description,
    colorId
}

return msg;

まずはapiが使用できるかのか、べた書きで確認から行っていくと良いと思います。

次にLINEで日付を入力できるようなメッセージを送信します。
こちらのフローもこのようにシンプルなモノから確認していくと良いと思います。
LINEのカレンダー入力.png
http requestノードのメソッドはPOST、送信先URLはhttps://api.line.me/v2/bot/message/push にする必要があります。

functionノードの中のコード例はこのようになります。

var post_request = {
  "headers": {
      "content-type": "application/json; charset=UTF-8",
      "Authorization": " Bearer " + "チャンネルアクセストークン"
  },
  "payload": {
      "to": " ユーザーID",
      "messages": [  
          {
              "type": "text",
              "text": "時間を入力してください",
              "quickReply": {
                  "items": [
                      {
                          "type": "action",
                          "action":
                            {
                              "type":"datetimepicker",
                              "label":"Select date",
                              "data":"storeId=12345",
                              "mode":"datetime",
                            //   "initial":"2017-12-25t00:00", //初期表示
                              "max":"2022-01-24t23:59",
                              "min":"2020-12-25t00:00"
                            }
                      }
                  ]
              }
          }
      ]
  }
}

return post_request

これを自分のLINEに送信すると、日時の入力が簡単にできるようになります。
image.png
このようにLINEの中で時間入力が簡単にできるようになります。

入力した日時をenebular側で受信できるようにします。
このようなフローを用意すれば簡単に受信確認ができます。
LINEのカレンダー入力.png
httpinノードに関しては、最初に設定した状態のまま使用します。

日時の受信確認まではできましたので、スイッチノードで場合分けをすることによって、LINEボット形式で必要情報を取得することができると考えられます。取得したデータをもとにGoogleカレンダーにスケジュール登録をすると、LINEからGoogleカレンダーにスケジュールを登録できるようになります。

#####考察と感想
今回実装を間に合わせることができませんでしたが、着想からすぐに検証を始めることができましたので、プロトタイプの際にはenebularはやはり便利だと感じました。
インフォモーションで可視化のチュートリアルも試してみたのですが、こちらも簡単に可視化することができました。
少し試してみたい時などにはenebularは非常に便利だと思います。

今回実装が間に合わなかった分については、大みそかハッカソンで実装しようと思います。

鉞、編集リクエスト等大歓迎ですので、よろしくお願いします。

#####参考情報
enebularでGoogleカレンダーの予定の時間がきたらフローを開始する
node-red-node-google
LINE公式ドキュメント

7
1
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
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?