#####概要
最近自分のスケジュール管理を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カレンダーに予定をセットする確認になります。
フローはこのようにシンプルなものから試していってください。
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で日付を入力できるようなメッセージを送信します。
こちらのフローもこのようにシンプルなモノから確認していくと良いと思います。
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に送信すると、日時の入力が簡単にできるようになります。
このようにLINEの中で時間入力が簡単にできるようになります。
入力した日時をenebular側で受信できるようにします。
このようなフローを用意すれば簡単に受信確認ができます。
httpinノードに関しては、最初に設定した状態のまま使用します。
日時の受信確認まではできましたので、スイッチノードで場合分けをすることによって、LINEボット形式で必要情報を取得することができると考えられます。取得したデータをもとにGoogleカレンダーにスケジュール登録をすると、LINEからGoogleカレンダーにスケジュールを登録できるようになります。
#####考察と感想
今回実装を間に合わせることができませんでしたが、着想からすぐに検証を始めることができましたので、プロトタイプの際にはenebularはやはり便利だと感じました。
インフォモーションで可視化のチュートリアルも試してみたのですが、こちらも簡単に可視化することができました。
少し試してみたい時などにはenebularは非常に便利だと思います。
今回実装が間に合わなかった分については、大みそかハッカソンで実装しようと思います。
鉞、編集リクエスト等大歓迎ですので、よろしくお願いします。
#####参考情報
enebularでGoogleカレンダーの予定の時間がきたらフローを開始する
node-red-node-google
LINE公式ドキュメント