Todo管理を管理してほしい ~電話でTodo管理を自動化するサービス~
こんにちは。近藤です。普段はコミューンという会社でグローバルチームに所属し、グローバルマーケットの開発をしております。
今回はAI Agent Hackathon with Google Cloudへの提出用の記事であり、そのサービスの説明です。
はじめに
AIが電話によりタスクの作成と更新を行う新しいTodoアプリ「Voice routine」を開発しました。ユーザーは電話を通じてAIと会話するだけで、タスクの作成から進捗管理までをハンズフリーで完結できます。
従来のタスク管理システムは、ユーザー自身がTodoリストをチェックし、手動で更新するプル型のアクティビティでした。私のようなズボラな人間は「todoは書いたけど確認忘れた!」「気づけばtodoを書くことがなくなってしまった」などといった様に単純なtodoでさえも実行ができなくなるという課題を抱えています。そこで、電話というプッシュ型のコミュニケーションと最新の自然言語解析技術を組み合わせ、タスク管理を自動化するアプリを考えました。
本プロジェクトは、AI Agent Hackathon with Google Cloudの応募要件に沿い、Google Cloud のAIプロダクト(Vertex AI Gemini、Text-to-Speech)およびComputeプロダクト(Cloud Run)を活用して実装しています。また認証ではFirebase Authenticationを使用しています。
プロジェクト概要(利用フローと主な機能)
A. 初期設定と認証
1. Webアプリによる認証
ユーザーはスマートフォンやPCからWebアプリにアクセスし、Firebase Authenticationによる電話番号認証を行います。認証時に送信されるSMSコードを入力することで、セキュアな本人確認が完了します。この際、電話番号などの機密情報はFirebase Authentication側で一元管理され、アプリケーションのデータベースには保存されない設計となっています。
2. 通話時間の設定
認証後、ユーザーは朝と夕方の自動通話を受け取りたい時間帯を設定します。システムはCloud Schedulerにより15分間隔でバックエンドを呼び出し、通話希望時間のユーザーを検索します。設定時刻になると、該当する時間帯に指定したユーザーへ自動で電話が発信されます。
B. 朝の自動通話プロセス
タスク入力から登録までの流れ
設定した朝の時間にユーザーの携帯電話に、システムから自動発信されます。ユーザーが電話に出ると、Cloud TTSで生成された自然な音声で「おはようございます。今日の予定を教えてください」と問いかけます。
例えば、ユーザーが「今日は顧客ミーティング、午後からは報告書の作成、それと企画書の提出があります」と答えると、Vertex AI Geminiがこの発話を解析し、以下のようなタスクを自動抽出します:
- 顧客ミーティング
- 報告書作成
- 企画書提出
システムは抽出したタスクを音声で読み上げ、「これらのタスクでよろしいでしょうか?」と確認します。ユーザーが承認すると、タスクがCloud SQLに保存されます。
C. 夕方の進捗確認プロセス
進捗確認と更新の流れ
設定された夕方の時間になると、再度システムから自動発信されます。「お疲れ様です。本日のタスクの進捗を確認させていただきます」という音声の後、朝に登録したタスクがリマインドされます。
例えば、「顧客ミーティングとA社へのメール送信は完了しましたか?」という質問に対し、ユーザーが「はい、すべて完了しました」と答えると、システムは自動でタスクの状態を「完了」に更新します。
D. UIでの補助機能
Webアプリでのタスク管理
音声による自動通話の補完として、Webアプリからもタスクの管理が可能です。急な予定変更や追加タスクがある場合、ユーザーはWebアプリにログインし、タスクの追加・編集・削除を手動で行えます。
プロジェクトリンク
プロジェクトの詳細なソースコードやデモ動画は下記
YouTube デモ動画
GitHub リポジトリ
Service Link
各種課金をなるべく抑えたいので非公開
気になる方はtwitter等でDMを送るかyoutubeのデモ動画を凝視してサービスにアクセスしてください
システムアーキテクチャ
システム全体の構成と各コンポーネント間のアーキテクチャ図
アーキテクチャ補足
ユーザーデバイス (Client)
ユーザーはブラウザや電話からWebアプリにアクセスし、自動通話を受信します。
Next.js Frontend + Cloud Run (Apps 層)
Cloud Run 上にホストされたNext.jsアプリが、ユーザー向けのUI表示および認証管理(Firebase Auth を利用)を実施し、取得したIDトークンを付与したAPIリクエストをNestJSバックエンドに送信します。
NestJS Backend API + Cloud Run (Apps 層)
同じくCloud Run上で動作するNestJSバックエンドは、APIエンドポイントを提供し、ビジネスロジック処理と外部サービス(Twilio、Vertex AI Gemini、Text-to-Speech)との連携を担当します。内部では、Firebase Auth によるトークン検証を行い、Cloud SQL を通じたタスク・通話履歴管理も実施します。
Cloud SQL (Infra層)
タスクや通話履歴などの情報はCloud SQLで管理されますが、電話番号などの機密情報は保存しない設計です。都度認証IDでFirabaseに問い合わせて電話番号を復元します。
Cloud Scheduler (Infra層)
定期ジョブにより15分間隔でバックエンドのエンドポイントを呼び出し、自動通話発信をトリガーする仕組みが実装されています。
外部サービス (External層)
Firebase Auth が認証基盤として機能し、Twilio API が自動電話の発信および通話状態管理、Vertex AI Gemini が自然言語解析、Text-to-Speech が音声合成を担当します。
将来的な拡張と改善
現状、本システムは電話を利用したタスク管理自動化の基本機能を実現していますが、今後さらなる改善および拡張を図るために、以下の取り組みを検討しています。
-
レスポンス速度と解析精度の向上
ユーザーの発話解析において、多少の遅延やタスク数増加時の精度低下が見受けられます。キャッシュ機構の導入、バッチ処理の最適化、フィルタリング機能の追加などにより、解析速度および精度の向上を目指します。 -
電話発信機能のモジュール分離
現在は単一のサーバー(Cloud Run)上で全体を運用していますが、将来的には電話発信部分を別モジュールとして切り出すことを検討しています。具体的には、Twilio API を利用した通話制御を Cloud Functions や Pub/Sub と組み合わせたイベント駆動型の仕組みに移行することで、スケーラビリティや柔軟性を向上させ、電話関連の処理を個別に最適化することが可能になると考えています。 -
勤怠管理システムとしての応用
通話の開始・終了時刻や音声データを活用し、出退勤記録を自動で生成する仕組みを構築することで、従来の手入力による勤怠管理の負担を大幅に軽減できる可能性があります。 -
チーム単位の状態サマリー機能
個々のタスク情報を自動で集約し、管理者やチームリーダーがチーム全体の進捗状況をリアルタイムに把握できるダッシュボードの構築も検討中です。これにより、効率的なタスクの再配分や適切なフィードバックが実現できると期待しています。
まとめ
本プロジェクトは、電話を利用したタスク管理自動化という新たなアプローチを実現するために取り組んできました。Next.js と NestJS を Cloud Run 上で運用し、Firebase Auth によるセキュアな認証、Twilio API による自動通話、Vertex AI Gemini と Text-to-Speech による自然言語解析・音声合成を組み合わせることで、従来の「管理するための管理」からユーザーを解放し、効率的なタスク管理を目指しています。
このアプローチの着想は、私自身の経験に基づいています。以前利用していた英会話サービスでは、管理者が電話で直接「今日でる?」と確認してくれる仕組みがありました。一見シンプルな電話による対応でしたが、プッシュ通知以上に利用者の心に働きかけ、モチベーションを維持する効果があったように感じています。また、私は外回りの営業として働いていた背景があるのですが、その際には、外出先で「今日やるべきこと」を口頭で整理したいという場面が度々ありました。これらの経験から、電話というインターフェースには、ユーザーの行動を促す可能性があるのではないかと考えています。
電話発信機能のモジュール分離、さらには勤怠管理やチームサマリー機能などの拡張により、個人だけでなく組織全体の業務効率化にも寄与できるかもしれません。当初はハッカソンの題材として構想したプロジェクトですが、具体的なアプリケーションとしてリリースしてみるのも面白いかもしれないと考えています。
*5793文字(この文字含め)
Discussion