見出し画像

専属秘書を作ろう! - #18 タスク一覧を取得する

今回より、新しい機能のシリーズが始まります。

それは・・・「タスク」です!

タスクとは・・・
"やるべき仕事""任された業務" のことをいいますが、
それを管理するのはたやすいものではありません。

やるべきことはわかっていても、

"いつ"
"どうするか"

まできちんと決められていることは少ないものです。

また、いろんなタスクがある中で、
覚えておくのも一苦労です。

そのタスク管理を LINE 上から実施するために、
みどりこちゃんに活躍してもらいましょう~✨

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



まず始めに

登録しても確認できなければ意味がありませんので、
まずは "タスク一覧" を確認することができるようにしましょう。

事前に Googleカレンダーで登録しておいた "タスク" を確認できるようにしておくことで、今後 "登録" などを行う際に機能として使えるようにします。

スプレッドシートを変更する

リッチメニューの画像を変更する

今回は新たな機能を追加するため、リッチメニューも更新します。

リッチメニュー切替のために、カレンダー機能の画像も変更する必要がありますので、ここで変更しておきます。

⬇️ リッチメニューA の画像変更

・リッチメニューA
 ・リッチメニューB の機能タイトル ⇒ タスク

⬇️ リッチメニューB の画像変更

・リッチメニューB
 ・機能タイトル ⇒ タスク
 ・FUNC1 ⇒ タスクを確認する (アイコンも適切なものに)

スプレッドシートの設定内容の変更

スプレッドシートの内容を以下のように変更します。

・リッチメニューA
 ・画像リンクの変更 ⇒ 新たに作成した画像A の URL
・リッチメニューB
 ・画像リンクの変更 ⇒ 新たに作成した画像B の URL
 ・FUNC1
  ・【メッセージ】FunctionB-1 ⇒ 【メッセージ】タスク確認##

すでにプログラムは作成していますので、内容を変更してメニューから設定すれば LINE に反映されます。

なぜか桜の花びらが舞ってますね🌸
季節柄でしょうか。

"タスクを確認する" をタップすると、

・type = message
・text = タスク確認##

上記のデータを受信していますので、問題無く設定されていますね👍

受信データに対応する

それでは、実際に受信したデータに対応していきましょう。

メッセージとして送信されるデータは、以下となります。

{
  "destination":"U7b74f9ba63d6d056e55577xxxxxxx",
  "events":[{
    "type":"message",
    "message":{
      "type":"text",
      "id":"5016000595875xxxxx",
      "quoteToken":"df3aQFnXvvWYGjGI0lQN5dAY6OoXEYc1KqL7sxxxxx",
      "text":"タスク確認##"
    },
    "webhookEventId":"01HT7VHM549FKAPDD4Dxxxxx",
    "deliveryContext":{
      "isRedelivery":false
    },
    "timestamp":1711808237715,
    "source":{
      "type":"user",
      "userId":"U922fa85f2c3047418d5aeca9xxxxx"
    },
    "replyToken":"e37f2190ef164c5da3c938045xxxx",
    "mode":"active"
  }]
}

今回は、メッセージを受信したかどうかを知るだけですので、

・events[0].message.text : タスク確認##

これが分かるだけでOKです。

今までの処理にテキストメッセージの解析処理を追加します。

  const data = JSON.parse(message);
  const ev = data.events[0];

  switch(ev.type){
    case EVTYPE_MESSAGE:
      switch(ev.message.type)
      {
        case EVTYPE_MESSAGE_TEXT:
          selectKindOfMessage(ev.replyToken,ev.message.text);
          break;
      }
      break;
  } 
function selectKindOfMessage(rtoken,text)
{
  const list = divideMessage(text);

  switch(list[KINDMESSAGE_BASE]){
    case KINDMESSAGE_TASK_CHECK:
      getAllTask(rtoken);
      break;
  }
}

getAllTask()関数では、タスクをすべて取得して、日付順にソートして返すようにしています。

function getAllTask(rtoken){
  const listTask = Tasks.Tasklists.list();
  let listAllTask=[];
  for( let i=0; i<listTask.items.length; i++ ){
    const tasks = Tasks.Tasks.list(listTask.items[i].id);
    for( let j=0; j<tasks.items.length; j++ ){
      listAllTask.push(tasks.items[j]);
    }
  }

  const sortedList = sortTimeAsc(listAllTask);

  let message = "タスク一覧をお知らせします。\n";
  sortedList.forEach((data)=>{
    message += "\n"+Utilities.formatDate(new Date(data.due),"JST","MM月dd日 : ")+data.title;
  });

  const reply = {
    "replyToken": rtoken,
    "messages": [
      {
        "type": "text",
        "text": message
      }
    ]
  }

  const resReplyMessage = fetchURL(createEndpoint(EPINDEX_REPLYMESSAGE,""),ENDPOINT[EPINDEX_REPLYMESSAGE][EP_METHOD],reply,MODE_JSON);
  const rcodeReplyMessage = resReplyMessage.getResponseCode();
}

これで一通り、完成しました。

動作確認

Googleカレンダーでは、以下のように設定しています。

テストのために
・すでに期限を過ぎているもの
・複数のタスクリスト
を入れてみています。

・Mr.Green のタスク
 ・note 投稿 (3/22)
  ・note 投稿用データ準備 (3/20)
  ・note 投稿用資料検索 (3/21)
 ・サンプル調査 (4/1)
 ・サンプル本文 (4/3)
・その他のタスク
 ・test (3/29)

この全タスクが正常に送られるか見てみましょう。

うまくいっていますね。
すべてのタスクを一覧としてお知らせしてくれました。

まとめ

今回は、新シリーズの "タスク" について、初めての機能を追加しました。

タスクは、いつまでに何をやらなければならないかを覚えておいてくれる素晴らしい機能ですので、ぜひタスクを使って "モレ" "抜け" "忘れ" を防いでくださいね。

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

何でも答えるよ~

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

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

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

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