🎯 はじめに:通知機能がどうしてもほしかった
私は現在、Flaskで開発した発音添削アプリを運営しています。このアプリでは、生徒が録音した音声に対し、講師がフィードバック音声を返すという仕組みです。
以前から、「フィードバックが完了したら生徒に自動で通知したい」という思いがあり、今回ようやくメール通知+LINE通知の実装に成功しました。
🔧 やりたいこと:FlaskからLINEで通知を飛ばす
今回の目標は以下の2つ:
- 📩 メールで「フィードバックが届きました」と通知
- 📲 LINEでも同じ通知を生徒に自動送信
とてもシンプルな要件に見えますが……。
実際にやってみると、とても時間がかかりました(なんと10時間)。
🌀 失敗1:Webhook URL が認識されない
LINE Messaging APIの「Webhook URL」を設定して、検証ボタンを押すと……
エラー。
原因は「LINE Developers」と「LINE Official Account Manager」の違いをちゃんと理解していなかったこと。そして、Webhook URLがPythonAnywhereに正しく届いていないことに気づくまでに時間がかかりました。
🔑 失敗2:チャネルシークレットとアクセストークンが読み込めない
.env ファイルに以下のように書きました:
LINE_CHANNEL_SECRET=xxxxxxxxxxxxxxxx LINE_CHANNEL_ACCESS_TOKEN=xxxxxxxxxxxxxxxx
Pythonファイルで os.getenv()
を使って読み込むも、Noneが返ってくる。
原因は WSGIファイルで .env を読み込んでいなかった こと。
これに気づくまで、何度もアプリを再起動したりprint文でデバッグしてました。
💡 成功の鍵:.env 読み込みとimport順序の整理
最終的に成功したのは、以下の2点を徹底したからです:
- 🧩 WSGIファイル内で
load_dotenv()
を明示的に実行 - 🧼 Flaskアプリ本体でも、
dotenv
を先頭で読み込み、環境変数取得を整理
📬 メール通知は比較的スムーズ
メール送信は Flask-Mail を使っており、比較的スムーズに動作しました。
すでに構築済みの仕組みに notify_feedback_uploaded()
関数を追加して対応。
📲 LINE通知:push_line_message関数の完成
LINE通知用の関数は以下のように定義しました:
def push_line_message(user_id, message): url = "https://api.line.me/v2/bot/message/push" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {LINE_CHANNEL_ACCESS_TOKEN}" } payload = { "to": user_id, "messages": [{"type": "text", "text": message}] } response = requests.post(url, headers=headers, json=payload)
この関数をフィードバック完了時に呼び出すことで、生徒のLINEに自動通知されるようになりました!
🎉 成功の瞬間:「🎧 フィードバックが届きました!」
試行錯誤の末、自分のLINEに「🎧 フィードバックが届きました!」という通知が届いた瞬間、思わず声が出ました。
「やっと……つながった……!」
💸 アフィリエイト:学び直しにおすすめの講座
私はPythonもFlaskも独学で学んでいますが、実際につまずくことも多いです。
もし、最短ルートでサポート付きで進みたいなら、以下のようなオンラインスクールがおすすめです。
👩🏫 マンツーマンで学びたい方向け
TechAcademyのPythonコース:マンツーマンのサポートつきで短期間にしっかり学びたい方向け
📺 動画で学ぶなら
Schoo(スクー):ライブ配信&動画見放題で気軽に学びたい方向け
📝 今日のまとめ:学びは「詰まったところ」にある
失敗のたびに調べて、やり直して、それでも動かず、またやり直して…。
今日の作業時間は10時間。
でも、ようやくLINE通知が届いた瞬間の達成感は、すべての努力を報いてくれました。
これからも「できるようになったこと」をブログに書き残していきたいと思います。