見出し画像

専属秘書を作ろう! - #13 予定を作成する④ - カレンダーに登録する

前回は、LIFFアプリを LINE上で動作させ、フォームからの入力データを受信できるところまで実施しました。

さあ、いよいよカレンダーへ登録していきます。

予定登録の最終回、頑張っていきましょう!

⬇️ 過去の note をまだご覧になっていない方はこちら ⬇️



受信データに対応する

前回、ちゃんとデータが受信できていることが確認できましたので、実際に受信したデータに対応していきましょう。

URIアクションによって返ってくるデータは、以下です。

{
  "destination":"U7b74f9ba63d6d056e55577a2fxxxx",
  "events":[{
    "type":"message",
    "message":{
      "type":"text",
      "id":"496185794973xxxxx",
      "quoteToken":"dPHuGFT65Tp5pJDryxxxxxxx",
      "text":"サンプル予定\n2029-02-29T14:30\n2024-02-29T16:30\nこれはサンプル予定です。\n検証用です。"
    },
    "webhookEventId":"01HQ7NWQVMWQ01TED7xxxxx",
    "deliveryContext":{
      "isRedelivery":false
    },
    "timestamp":1708581084535,
    "source":{
      "type":"user",
      "userId":"Udfcd513ce7719a39fbxxxxx"
    },
    "replyToken":"82e3b91268c34825bbxxxxxx",
    "mode":"active"}
  ]}
}

message:text が必要なデータとなります。
この内容を見てみると、

サンプル予定
2024-02-29T14:30
2024-02-29T16:30
これはサンプル予定です。
検証用です。

データがそのまま送られてますね。

しかし、このままでは、どこからどこまでが何のデータなのかわからなくなる恐れがありますので、少し修正しましょう。

LIFF アプリの修正

設定の前に、プリフィックスをつけて何のデータか分かるようにします。

・予定名:sr-title##xxx##
・開始日時:sr-begin##xxx##
・終了日時:sr-end##xxx##
・予定詳細:sr-detail##xxx##

改行で判断しても良いのですが、まあ汎用性も考えて、このようにしましょう。

受信内容をリスト化する

今回はプリフィックスとして "##" を使うことにしましたので、それで必要な文字列を抽出します。
※KINDMESSAGE_KEYWORD が ## です。

まずは、文字抽出のための事前準備として位置情報を抽出します。

let listPos=[0];
let pos = text.indexOf(KINDMESSAGE_KEYWORD);

while(pos!==-1){
  listPos.push(pos);
  listPos.push(pos+KINDMESSAGE_KEYWORD.length);
  pos = text.indexOf(KINDMESSAGE_KEYWORD,pos+1);
}

listPos.push(text.length-1);

その後、この位置情報から、"キーバリューリスト" として抽出します。

for( let i=0; i<listPos.length; i+=4 ){
  if(listPos[i]<listPos[i+1]){
    const name = text.slice(listPos[i],listPos[i+1]);
    const str = text.slice(listPos[i+2],listPos[i+3]);
    list[name] = str;
  }
}

その結果が以下です。

{
  sr-title:"サンプル予定"
  sr-begin:"2024-02-29T14:00"
  sr-end:"2024-02-29T16:00"
  sr-detail:"これはサンプル予定です。\n検証用です。"
}

カレンダーに登録する

上記の "キーバリューリスト" を使って、カレンダーに登録します。

  let event = CalendarApp.getDefaultCalendar().createEvent(
    list[SCHEDULE_REGIST_TITLE],
    new Date(list[SCHEDULE_REGIST_BEGIN]),
    new Date(list[SCHEDULE_REGIST_END]),
    {description:list[SCHEDULE_REGIST_DETAIL]}
  );

うわ、簡単😅

今まで、Firebase 使ってフォーム作成して、LIFFアプリとして登録して、リッチメニューから呼び出して、メッセージを受信して・・・といろいろと準備してきましたが、最後がコレ。

見やすさのために複数行にしていますが、関数1個呼び出すだけなので1行で済みます。

ユーザーインタフェースを作るのって全部そうなんですよね。

必要な処理よりも、それを準備するための処理や、その他の異常が起きないようにするための処理を作る方が大変なのです。

ソフトウェア開発あるある、ですね💦

動作確認

では、実際に起動から登録するところまで流れで見てみましょう。

リッチメニューをタップ。

LIFFアプリ (入力フォーム) が起動するので、必要な情報を入力。

入力データが、メッセージとして送られる。

Googleカレンダーに予定が登録される。

このような流れで、予定が登録されます。

今回は、カレンダーを指定するようには作っていませんので、デフォルトスケジュール (=Googleアカウントのデフォルトカレンダー) に登録されます。

この点は覚えておいてくださいね。

まとめ

今回でようやく "予定登録" が完了しました。

いかがでしたでしょうか。

Firebase の Hosting、LIFFアプリなど盛りだくさんでしたね。
お腹いっぱいになりましたか?

難しいところもあったかと思いますので、内容を理解したい方は是非何度も見直してみてください。

最後に、動きも見たい!というお声もあると思いましたので、動画も置いておきます。
ぜひご覧ください。

もしわからないことがありましたら、お気軽に LINE公式アカウント でご質問ください。

今回のご提供ファイルのキーワードは【専属秘書みどりこV9】です。

LINE公式アカウントにご登録の上、キーワードを送信してくださいね。

⬇️LINE公式アカウントに登録してご連絡ください⬇️

ビジネスが加速するよ~

もし「サポートしたい!」という方がいらっしゃいましたら、ぜひぜひサポートをお願いいたします! 開発費や外注費などクリエイター活動の一部として使用させて頂きます✨