賞味期限チェックアプリに通知設定をつけたい
こんにちは!読んでくれてありがとうございます!
先日Djangoで賞味期限チェックアプリを作ってみて実際に使ってみているのですが、通知機能があるとめっちゃいいよねってことになりました。そこで、どうにかして通知機能をつけてみることにしました!
↓↓作成した賞味期限チェックアプリです↓↓
通知機能のイメージ
賞味期限の近い在庫や商品があった場合それを通知で知らせてくれる機能をつけることを考えます。毎朝バイトが始まる前に通知が届き、賞味期限の過ぎている商品はないか、または近くて値下げをしなければならない商品はないか確認できればいいと思います。
やってみたこと1
Djangoのsend_mail機能でメールを送信する
Djangoにはとても便利な機能があり、その一つがsend_mail機能です。
from django.core.mail import send_mail
send_mail(
'Subject here',
'Here is the message.',
'from@example.com',
['to@example.com'],
fail_silently=False,
)
このように、件名、本文、送信者、送信元を指定してメールを送信することができます。参照Sending email Django documentation
この機能をアプリに付け加えれば通知メールを送信することができそうです。
しかし、これはあまりうまくいきませんでした。トリガーを作ることができなかったからです。(現時点での知識不足もあると思います。)
ほしい通知機能は、アプリを開いてなくても賞味期限が近い商品があればメールで教えてくれる機能です。ためしにこのsend_mail機能で通知機能を作ってみたところ、「賞味期限の近い商品をアプリを開くたびにメールで教えてくれるという機能」になってしまいました。アプリを開けば在庫のチェックができるのにそれをわざわざメールで教えてくれるという何とも意味のない機能が出来上がってしまいました。
やってみたこと2
GAS を使う
GAS(Google Apps Script)とはGoogleが提供するサーバーレスプログラミング環境です。Googleが提供するアプリケーション(Gmailなど)をクラウド上でスクリプトを実行することで操作できるサービスです。このGASを使ってできるGメール転送がとても使えそうです。
作製した転送機能はGmailフォルダにある最新のメールをほかの人に転送するという機能です。GASのソースコードは以下です。
function forward1Sample() {
// 最初の受信トレイスレッドの最初のメッセージを受信者1と受信者2に転送します。両方とも@ example.com
var firstThread = GmailApp.getInboxThreads(0,1)[0];
var message = firstThread.getMessages()[0];
message.forward("recipient1@example.com,recipient2@example.com");
}
参考【GAS】Gメールの転送機能まとめ【サンプルソース付】
トリガーも簡単に作ることができます。これで、毎朝7時にメールを送るといったことが可能になります。参考
完成した通知機能
完成した通知機能は「やってみたこと1」と「やってみたこと2」を組み合わせて作りました。完成した機能の概要はこんな感じです。
①まず、ユーザーがアプリを開きます。厳密にはアプリケーションの閲覧ページであるviewページを見ます。
②ユーザーがアプリを開いた時、加えた変更や現在の日にちなどを反映させたメールがDjangoのsend_mail機能を使って転送用Gmailに送信されます。
③次に、転送用GmailはGASによって作成された機能によりユーザーに転送されます。この時トリガーを毎朝7時などに設定しておけば通知がアプリを開いたら毎回届くという風にはなりません。加えて、この機能はトリガーの時間のときに最新のメールを転送してくれます。毎朝7時に転送するなら、朝7時の時点で最も新しい情報がユーザーに送信されるわけです。
送信されるメールはこのような感じです。左のように賞味期限の近い商品が何もなかった場合、「賞味期限の近い商品はありません」と通知が来ます。賞味期限の近い商品があった場合、項目別に賞味期限の近い商品の名前と賞味期限がメールで送られてきます。また、サイトのURLと更新、チェック用のURLも併せて送られます。ユーザーはそのURLからアプリケーションに移動してサイトを確認したり情報の更新をしたりすることができます。
感想
今回は少し回りくどいやり方で通知機能を付けました。もっとシンプルにできる方法があれば教えてほしいです。
この記事が気に入ったらサポートをしてみませんか?