見出し画像

専属秘書を作ろう! - #15 予定通知を設定する② - 通知時間を設定する

前回は、設定時間の確認と変更の確認を一気に行う手段として、"テンプレートメッセージの確認" を使用する。

その回答によって、動きを変える、というところまで作成しました。

今回は、この続きを作成していきます。

これでスケジュール関連は終了となりますので、最終回楽しんでいきましょう✨

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



まず始めに

今一度、流れを説明しておきます。

1.通知設定 or 変更の確認ダイアログを表示する
2.「はい」の場合、時間を指定して、通知設定を行う。
3.「いいえ」の場合、キャンセルした旨メッセージする。

1 までは前回終わっていますので、今回は 2 と 3 を作成します。

といいつつ、1 を少し修正しなければなりませんので、そちらも併せてご説明します。

処理を追加/修正する

設定/確認ダイアログを変更する

前回は、簡単に動作を確認するために「はい」を表す "sr-yes##" と、「いいえ」を表す "sr-no##" をメッセージを送りました。

しかし、実際には「はい」の場合は、時間を設定しなければなりません。

そこで、ここでも【timepicker】の出番です。

"timepicker" とは、日付や時刻を設定するダイアログのことで、LINE にあらかじめ備えられている機能です。

今回は、時刻 (といっても時間だけが必要) を設定する必要がありますので、時刻だけ設定するダイアログに変更します。

このダイアログを表示するために、前回設定した内容を変更します。

⬇️ 前回の設定 ⬇️

"replyToken": rtoken,
"messages": [
{
  "type": "template",
  "altText": "通知設定確認",
  "template": {
    "type": "confirm",
    "text": str,
    "actions": [
    {
      "type": "message",
      "label": "はい",
      "text": "sr-yes##"
    },
    {
      "type": "message",
      "label": "いいえ",
      "text": "sr-no##"
    }
  ]
}

⬇️ 修正した設定 ⬇️

"replyToken": rtoken,
"messages": [
{
  "type": "template",
  "altText": "通知設定確認",
  "template": {
    "type": "confirm",
    "text": str,
    "actions": [
    {
      "type": "datetimepicker",
      "label": "はい",
      "data": "sr-set",
      "mode": "time"
    },
    {
      "type": "message",
      "label": "いいえ",
      "text": "sr-no##"
    }
  ]
}

修正内容は以下の通りです。

・type = datetimepicker
・label = はい
・data = sr-set
・mode = time

mode = time とすることで、時刻だけを設定するダイアログを表示できます。

また、data = sr-set で受信したデータがスケジュール通知の設定用のデータであることを認識するようにしています。

ここまでが前回との差分です。

「はい」の時の処理

"はい" をタップすると、時刻設定ウィンドウが起動します。
※"設定/確認ダイアログを変更する" で修正したもの

そこで時刻を選ぶと、postbackデータとしてデータが送られます。

これが実際に受信したデータです。

・data = sr-set
・params.time = 14:34

data = sr-set を受信した場合に、スケジュール通知設定を行う関数を実行します。

case SCHEDULE_REMINDAR_REGISTER:
  setScheduleRemindar(ev.replyToken,ev.postback.params.time,ev.source.userId);

ここでは、返信を行う為の replyToken、設定時間を表す time、LINE のユーザーを指定するための userId を渡しています。

では、関数内の処理を見ていきましょう。

まず、すでに登録されている "スケジュール通知設定" がある場合、その設定を削除します。

また、スプレッドシートに記載している「時刻」と「ユーザーID」を一緒に削除しています。

const triggers = ScriptApp.getProjectTriggers();

for( let i=0; i<triggers.length; i++ ){
  if( triggers[i].getHandlerFunction()===TRIGGER_CALENDAR_FUNC ){
    ScriptApp.deleteTrigger(triggers[i]);
    range.clear();
    rangeUser.clear();
  }
}

前回、注意点として触れましたが、
「設定したトリガーを取得しても、設定時刻が取得できない」
という問題があるため、自分で保持しておかなければなりません。

そのため、スプレッドシートのカレンダータブに保持するための場所を作っています。

・設定開始時間:通知設定を開始する時間
・ユーザーID:通知するユーザーID

次に、通知設定 (トリガー設定) と設定開始時間、ユーザーIDの保存を行います。

const hour = time.substring(0,time.indexOf(":"))
ScriptApp.newTrigger(TRIGGER_CALENDAR_FUNC).
  timeBased().atHour(hour).everyDays(1).create();
range.setValue(hour);
rangeUser.setValue(user);

"毎日同時刻に通知設定をする" ための設定となっています。

・timeBased().everyDays(1) ⇒ 時間主導型で毎日
・atHour(hour) ⇒ 指定時刻

また、削除時の逆の処理 (設定開始時間とユーザーIDの保存) を行っています。

ここまでで、スケジュール通知設定に関するところは終了ですが、その後設定データをユーザーに通知する処理を入れています。

反応が無いとちゃんと動いているか不安になりますからね💦

ユーザー (といっても自分ですが) に設定内容を教えてあげましょう。

「いいえ」の時の処理

"いいえ" をタップすると、"sr-no##" メッセージが送られます。

いいえの場合は、特に何も処理をする必要はありませんが、何も表示しないのもユーザーの不安を煽ってしまうので、現在の設定内容を返すようにしましょう。

※何度も言うようですが、ユーザーは自分です😅
 しかし、せっかくですので、ちゃんとしたアプリにしておきましょう。

let str="スケジュール通知設定の設定/変更はキャンセルされました。\n\n";

if(hour===""){
  str += "スケジュール通知は設定されていません。";
}
else{
  str += "現在の通知設定は\n\n設定時間: "+hour+"時~"+(Number(hour)+1)+"時\n\nです。";
}

すでに通知設定がされている場合は、設定時刻を返し、設定が無い場合は無いことを返します。

⬇️ は、キャンセルしたが、すでに設定がある場合の返信例です。

動作確認

"通知を設定する" エリアをタップする。

"通知設定##" が自動で送られる。

設定済の通知設定情報を取り込んで、ダイアログを表示する。

"いいえ" をタップすると、"sr-no##" を送信し、GAS はキャンセルした旨のメッセージを返信する。

"はい" をタップすると、時刻設定ダイアログを表示する。

設定後、データが送られる。

GASが、正常に設定が完了したことを返信する。

バッチリですね👍
ちゃんと出来ました。

まとめ

これで、スケジュール関連は終了です。
お楽しみ様でした~🎉🎉🎉

まだスケジュール関連の機能しか組み込んでいないとはいえ、もういっぱしの【秘書】ですね✨

指定した日付の予定を教えてくれ、
指定した時間の空き時間を教えてくれ、
予定を登録し、
通知も設定/確認してくれます。

2ヵ月でここまで来ましたね。

さあ、次は何を実現していきましょうか。

もし、

こんな機能が欲しい!
こんなことやってみたい!

といったご要望がありましたら、コメント欄にお知らせください。

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

※右サイドは、スプレッドシートの画面です。

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

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

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

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

ビジネスが加速するよ~

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