はじめに
スマートボイスレコーダー「Omi」を手に入れたものの、「ただ録音するだけ」になっていませんか? この記事では、Omiに話しかけた内容をAI(Gemini)が自動で分析し、Googleカレンダー(予定)、Google Tasks(タスク)、Googleドライブ(メモ)の3つへ自動的に振り分ける最強のシステムを構築する方法を解説します。
例えば「明日の15時に個別支援計画の会議予定を入れて。〇〇さんに電話するのをタスクに追加して」と歩きながらつぶやくだけで、システムが勝手に整理してくれます。
ノーコードツール「n8n」を使って、初心者でもコピペで構築できるように全手順を公開します!
まずは全体像をお伝えします。

この画像は、n8nで組むワークフローの全体図です。大きく分けると「Omiの音声を受け取ってスプレッドシートに貯める役」と、「貯まったテキストをAIが分類して、カレンダー/タスク/メモへ反映する役」の2工程で回っています。
読み方の目安は次の通りです。
- 左側(ルートA):`Webhook` でOmiから呼び出され、`Google Sheets` に「音声認識のテキスト」を `Append Row` で追記します(まずは“受け皿”にためる)。
- 中央〜右側(ルートB):`Schedule Trigger` で5分ごとに起動し、スプレッドシートを `Read Rows` → `Code` で合体 → `Gemini` へ投げて「予定/タスク/メモ」に分類します。
- 分岐後:`Switch` で `schedule` / `task` / `memo` に分かれ、`Googleカレンダー` はイベントを作成、`Google Tasks` はタスクを作成、`memo` は `Textからファイルを作成`(メモ用ファイル生成)に進みます
- 最後に:`Clear` でシートを掃除します。同じ内容が何度も反映されないようにするための“締め”です。
以降の前編・後編では、この図に沿ってノード設定を順番に作っていきます。
[前編]Omiの音声をスプレッドシートに蓄積する(ルートA)

まずは、Omiが聞き取った音声を一時的に保存する「バッファ(受け皿)」を作ります。
1. n8nでWebhookを受け取る

n8nのWebhookのノードを開いた画面で表示されているURLをコピーします。

omiのアプリ内の”開発者”ページから「会話イベント」のトグルボタンをONにして、コピーしたn8nのwebhookのURLを貼り付けます。
2. Google Sheetsへ書き込む(★初心者が陥る罠に注意!)

Webhookで送られてきた内容を一旦 Google Sheetsのスプレッドシートに保存していきます。
WebフックノードからGoogleスプレッドシートノードに繋げます。

Google スプレッドシートノードのシートに行を追加する 詳細設定は上記のようになっています。スプレッドシートの最終行にデータを追加(Append Row)する設定にします。
- Credential(資格証証明):ここで自身のGoogleアカウントと連携していきます。
- Document(書類): どのシートに保存するかというのをここで指定しています。
- text(文章):omiの会話イベントの内容を取得します。
- ID:omiの会話イベントの番号です。
- created_at(作成日時):会話イベントの発生した日時です。
[後編]AIで分析してGoogleの各サービスへ振り分ける(ルートB)

ここからが自動化の真骨頂です。5分に1回、先ほどシートに溜めたテキストをまとめてAIに読ませます。
- 一定時間ごとにシートの内容Googleシートの内容を取得
- もし文章があれば作業に実行、なければ破棄する
- 文章があった場合は、Gemini AIにメッセージを送って処理する。(シートのtextを参照し、タスクがあればGoogleタスクに追加・予定があればGoogleカレンダーに追加・メモがあれば、Googleドライブのメモに保存する)
- 最後にシートの中身を消去します。
1. 一定時間おきの定期実行とデータの合体
「Schedule Trigger」ノードで一定時間の間隔に設定します。
「Google Sheets」ノード(Read Rows)でデータを取得し、「Code」ノードで1つの長文に合体させます。
これは Gemini の API を節約する目的もありますが、APIは一定時間内にどのくらいの処理を行えるかが決まっています。
エラーが出たときに一気に過去のエラーの分まで処理されてその上限を超えてしまいさらにエラーを繰り返すことを防止する目的もあります。
2. Geminiでテキストを3つに分類する
今回のワークフローの中核になる部分になります。Google Geminiノードを追加し、以下のプロンプトを入力します。
Plaintext
あなたは優秀なアシスタントです。入力されたテキストは、過去30分間の音声認識データを箇条書きでまとめたものです。
現在の日時は {{ $now }} です。
【最重要ルール:トリガーワード】
テキストを分析する際、「ノートトゥセルフ」(または "note to self"、"ノート・トゥ・セルフ" など発音が類似する言葉)というキーワードが含まれている発言を探してください。
このキーワードが含まれている場合のみ、その後に続く発言の内容から「タスク」「メモ」「予定」の要素を抽出してください。
キーワードが含まれない発言や、単なる会話、ノイズは**絶対に無視(除外)**してください。
【分類ルールとJSONフォーマット】
上記のトリガーワードに続く内容を、以下のJSON配列(リスト)フォーマットのみで出力してください。
1. task: 行動の予定やタスク登録の指示(例:「〜をタスクに追加して」)
{"category": "task", "title": "タスク名", "content": "詳細事項"}
2. memo: 明確に情報として残しておきたい指示(例:「〜をメモして」)
{"category": "memo", "title": "メモの件名", "content": "メモの具体的な内容"}
3. schedule: カレンダーに登録すべき予定の指示(例:「明日の15時から会議」)
{"category": "schedule", "title": "予定の件名", "start_time": "YYYY-MM-DDTHH:mm:00+09:00", "end_time": "YYYY-MM-DDTHH:mm:00+09:00", "content": "場所や詳細など"}
【注意事項】
・出力は必ず上記のJSON配列形式( [ ] で囲まれた形式)のみとしてください。
・「予定」の start_time と end_time は、現在の日時を基準にして、必ずISO 8601形式(日本のタイムゾーン +09:00)で出力してください。終了時間が指定されていない場合は、開始時間の1時間後を設定してください。
・入力テキストの中に複数の指示が含まれている場合は、配列の中に複数のオブジェクトを作成してください。
・トリガーワードが見つからない場合、またはどれにも当てはまらないテキストしかない場合は、必ず空の配列 [] を出力してください。前置きや説明は一切不要です。
【入力テキスト】
{{ $json.combined_text }}
3. Switchノードでそれぞれのサービスへ分岐
Switchノードを使用して schedule(予定) task(タスク) memo(メモ) の3種類に振り分けていきます。
ここまでできたらほぼシステムとしては完成です。
4. カレンダー・タスク・ドライブへの連携
それぞれ分岐先にGoogleカレンダー、Google Tasks、Googleドライブのノードをつなげ連携させれば完成です。
5. 【最後の仕上げ】使い終わったシートを掃除する
画像ではちょうど中央の一番下にある Googleスプレッドシートのノードになります。データの振り分けが終わったら、スプレッドシートの過去のデータを消去(Clear)するノードを配置します。
これを忘れてしまうと、一定時間ごとに同じ予定が無限にカレンダーに登録されてしまう「雪だるま式ループ」に陥るので、絶対に設定するようにしてください。
API制限などでGeminiがうまく作動しないときにデータが消えないように、Geminiの直後(振り分け前)に直列で配置するのが最も安全になります。これによりGeminiが動作しない場合は、使い終わったシートを掃除する処理というのが行われないので、スプレッドシート内にどんどん積み上がっていくようになります。
まとめ
初期設定は少しハードルが高いかもしれませんが、一度このシステムを作ってしまえば、Omiが「最強の専属秘書」に化けます。日々の業務の認知負荷を減らし、目の前のやるべきことに集中できる環境をぜひ作ってみてください。
今回のワークフローの最大の強みは、ワードトリガーを入れて確実に抽出できる点と、そもそも自分でさえ意識していなかったつぶやきなどの中からタスクなどを拾ってくれる両方が実現していることです。
これによって無意識の中に抽出された予定やタスクを保持することができるので、スマホなどでGeminiを立ち上げて音声入力したりするのとはまた違った使用感を味わうことができます。