専属秘書を作ろう! - #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##"
}
]
}
修正内容は以下の通りです。
mode = time とすることで、時刻だけを設定するダイアログを表示できます。
また、data = sr-set で受信したデータがスケジュール通知の設定用のデータであることを認識するようにしています。
ここまでが前回との差分です。
「はい」の時の処理
"はい" をタップすると、時刻設定ウィンドウが起動します。
※"設定/確認ダイアログを変更する" で修正したもの
そこで時刻を選ぶと、postbackデータとしてデータが送られます。
これが実際に受信したデータです。
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の保存を行います。
const hour = time.substring(0,time.indexOf(":"))
ScriptApp.newTrigger(TRIGGER_CALENDAR_FUNC).
timeBased().atHour(hour).everyDays(1).create();
range.setValue(hour);
rangeUser.setValue(user);
"毎日同時刻に通知設定をする" ための設定となっています。
また、削除時の逆の処理 (設定開始時間とユーザー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公式アカウントに登録してご連絡ください⬇️
もし「サポートしたい!」という方がいらっしゃいましたら、ぜひぜひサポートをお願いいたします! 開発費や外注費などクリエイター活動の一部として使用させて頂きます✨