メインコンテンツにスキップ
株式会社ゼットリンカー - Next.js システム開発専門
AI開発

受信メールをAIで分類し振り分けるNext.js設計|情シスの内製構成

Conclusion

受信メールのAI分類・振り分けは、Next.js + AI SDKの構成で数週間規模から内製できます。確信度が低い判定は人の確認に回すのが要点です。

結論、受信メールの一次仕分けはNext.js + AI SDKの generateObject で数週間規模から内製できます。代表メールアドレスの振り分けに時間を取られている情シス担当者向けに、自動返信より先に分類から着手すべき理由と設計パターン、費用感を整理しました。

暗いオフィスでノートPCの画面を見ながら受信メールの振り分け画面を確認する担当者の写真
10分で読めます
Next.jsNext.jsAI駆動開発中小企業業務効率化AIエージェント

受信メールをAIで分類し、担当部署に自動で振り分けるしくみは、Next.js + AI SDKのgenerateObjectとメール受信Webhookを組み合わせれば、数週間規模の最小構成から内製できます。「AIで全部返信する」のではなく、まず仕分けだけを自動化する設計が、現場で使われやすく効果も出やすい進め方です。

こんな状況ではありませんか?

  • 問い合わせ用の代表メールアドレスに届いたメールを、担当者が開封して都度どの部署に転送するか判断している
  • 繁忙期は振り分けが後回しになり、経理宛のメールに気づくのが翌日になることがある
  • 「AIで自動返信」まで一気に作ろうとして、要件が膨らんで着手できずにいる

この記事で分かること

  • メール分類が「返信の自動化」より先に着手すべき理由
  • Next.js 16 + AI SDK + メール受信Webhookでの最小構成の作り方
  • 分類結果をZodスキーマで固定し、誤判定を後工程に持ち越さない設計
  • 費用感・導入期間・運用でつまずきやすい失敗パターン

情シス担当者の方へ——代表メールアドレスの一次仕分けを、担当者の勘と経験に頼っている状況を想定し、Next.jsで内製する場合の設計を整理します。

なぜ「自動返信」より先に「分類」から着手すべきか?

分類だけなら誤判定の被害が振り分けミス1件で済みますが、自動返信は誤った内容を相手に送ってしまうリスクを伴うためです。

受信メールのAI活用というと「AIが内容を読んで自動で返信する」という完成形を思い浮かべがちです。しかし、いきなり自動返信まで作ろうとすると、次の2つの課題が同時に降りかかります。

  • 送信文面の正確性を担保する仕組み(根拠のない回答を送ってしまうリスクの制御)
  • 送信タイミング・宛先の制御(誤送信は取り返しがつかない)

一方、分類・振り分けだけに絞ると、AIが判断を誤っても「本来の担当者に届くのが少し遅れる」程度の被害で済みます。人間が最終確認する工程を残したまま自動化を始められるため、社内の心理的な導入ハードルも下がります。まずは分類の精度を実運用で確認し、そのあとで問い合わせ対応の一次返信をNext.js × AIで自動化する設計のような返信支援に進むのが、失敗の少ない順序だと考えています。

典型的な振り分けパターンをどう分解するか?

「営業・引き合い」「サポート・クレーム」「請求・経理」「採用」の4カテゴリで大半のメールが分類できるのが一般的な傾向です。

分類ロジックを設計する前に、代表メールアドレスに実際にどんな種類のメールが届いているかを棚卸しする必要があります。過去1〜2週間分のメールを見返すと、次のようなカテゴリに整理できることが多いです。

  • 営業・引き合い系:サービスへの問い合わせ、見積依頼、資料請求
  • サポート・クレーム系:既存顧客からの不具合報告、使い方の質問
  • 請求・経理系:請求書送付、支払い確認、契約書のやり取り
  • 採用系:応募メール、選考に関する問い合わせ
  • その他・スパム系:営業メール、明らかな迷惑メール

最初から全カテゴリを高精度で分類しようとすると検証負荷が跳ね上がります。件数が多く振り分けミスの影響が大きいカテゴリ(サポート・クレーム系など)から対象を絞り、精度を確認しながら広げるのが現実的です。

この判断から次に進む

課題が整理できていなくても相談できます

困っている業務と、変えたいことだけでも大丈夫です。初回相談・モック・見積もりは無料です。

カジュアルに相談する

Next.jsでどう設計するか?最小構成と拡張ステップ

メール受信Webhook・AIによる分類・担当者への通知の3層構成にすれば、Next.jsの最小構成で完結します。

構成は次の3層に分けて考えます。

受信メールが分類システムに届き、AIが件名と本文からカテゴリと緊急度を判定し、担当部署へ自動振り分けされたのち、確信度が低い場合は人による確認に回る流れを示す図

  1. 受信層:代表メールアドレス宛のメールを受け取り、Next.jsのRoute Handlerに転送する
  2. 分類層:件名・本文をもとにAIがカテゴリ・緊急度を判定する
  3. 振り分け層:判定結果に応じて担当部署へ通知し、確信度が低い場合は人による確認に回す

メールをNext.jsアプリに取り込む部分は、SendGridのInbound Parse Webhookのような、受信メールをmultipart/form-dataでPOSTしてくれるサービスを使うのが定番の構成です(出典: SendGrid Inbound Parse Webhook ドキュメント)。自社でメールサーバーを立てる必要はなく、DNSのMXレコードを向けるだけでNext.js側のエンドポイントにメール内容が届きます。

分類部分はAI SDKのgenerateObjectを使い、出力をZodスキーマで固定するのが実務上の要点です。分類結果が自由記述の文章だと、後続の振り分けロジックでの分岐が不安定になります。

コード例(Route Handlerの骨子、30行程度):

// app/api/email-triage/route.ts
import { generateObject } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
import { z } from 'zod';
import { notifyDepartment } from '@/lib/notify';

const TriageSchema = z.object({
  category: z.enum(['sales', 'support', 'billing', 'recruiting', 'other']),
  urgency: z.enum(['high', 'normal', 'low']),
  confidence: z.number().min(0).max(1),
  summary: z.string().max(120),
});

export async function POST(req: Request) {
  const form = await req.formData();
  const subject = String(form.get('subject') ?? '');
  const text = String(form.get('text') ?? '');

  const { object } = await generateObject({
    model: anthropic('claude-sonnet-4-5'),
    schema: TriageSchema,
    prompt: `件名: ${subject}\n本文: ${text}\n上記メールを分類してください。`,
  });

  // 確信度が低い場合は「未分類」として人の確認に回す
  const targetDepartment = object.confidence >= 0.7 ? object.category : 'unclassified';
  await notifyDepartment(targetDepartment, { subject, summary: object.summary, urgency: object.urgency });

  return new Response('OK', { status: 200 });
}

generateObjectはZodスキーマに一致する出力を保証する設計になっているため、分類・データ抽出・フォーム入力補助のような、後続処理が決まったデータ形式を前提にするパイプラインに向いています(出典: Vercel AI SDK 公式ドキュメント)。確信度(confidence)をスキーマに含めて閾値で「未分類」に落とすフォールバックを入れておくと、誤判定をそのまま担当外の部署に送ってしまう事故を防げます。

すでに社内規定を参照して回答するチャットボットのようなAI SDKベースの実装を持っている場合、モデル呼び出しの部分は共通化しやすく、分類用のプロンプトとスキーマを追加する形で拡張できます。

いくらで作れるか?費用感の目安

当社の開発費用は1時間11,000円(税込)が基準です。ヒアリング後、ご依頼に応じて、要件定義・現状調査、相談内容のすり合わせ・仕様合意、開発・移行・公開準備、テスト・受入確認、不確実な作業へのバッファを当社で見積もり、概算をご案内します。お客様が開発工数を推測する必要はありません。

内訳の考え方は次のとおりです。

項目内容目安
初期開発Webhook受信・分類ロジック・通知連携の実装数週間の開発サイクル
LLM APIコストメール1通あたりの分類推論コスト従量課金、月間受信件数に比例
メール受信サービスSendGrid等のInbound Parse機能小規模なら無料枠〜月数千円
保守カテゴリ追加・分類精度の調整都度数十分〜1時間程度

問い合わせ管理SaaSの自動振り分け機能を使う選択肢もありますが、代表メールアドレス1つに絞った軽量な仕組みなら内製のほうが月額コストを抑えられる場合があります。ただし開発の初期投資とランニングコストのトレードオフでもあり、受信件数が少ない組織では手動振り分けのままのほうが総コストで有利なこともあります。

失敗しやすいパターンと回避策

実装を進める中でつまずきやすいのが次のようなケースです。

  • 確信度の閾値を設けずに全件自動振り分けする:誤判定がそのまま担当外の部署に届いてしまう。確信度が低いメールは「未分類」として人の目を通す運用を最初から組み込む
  • 添付ファイルやHTMLメールの処理を後回しにする:本文がHTMLタグだらけのまま分類プロンプトに渡すと精度が落ちる。テキスト抽出の前処理を分類の前段に必ず入れる
  • カテゴリを最初から細かく設計しすぎる:カテゴリ数が多いほど誤判定も増える。まずは3〜5カテゴリ程度に絞り、実際の分布を見てから細分化を検討する
  • 通知の重複や取りこぼしを検証しない:Webhookの再送仕様(SendGridは2xx以外を返すと再送される)を考慮しないと、同じメールが二重通知されることがある。冪等性の確保はServer Actions のセキュリティを Data Access Layer で守るの「外部入力を信用しない」設計と同じ考え方で対応できる

AI駆動開発で何が変わるか?

分類スキーマの設計とテストケースの棚卸しさえ人間が固めれば、Route Handlerの実装自体はAIに下書きさせやすい領域です。

Claude Codeでこの構成を組む場合、Webhookの受信処理やZodスキーマの型定義といった定型的な部分は、AIに任せて素早く形にできます。一方で「どのカテゴリに分けるか」「確信度の閾値をいくつにするか」といった業務判断は、実際のメール分布を見ている人間側で決める必要があります。ここを曖昧にしたまま任せきりにすると、業務フローに合わないカテゴリ分けのまま運用が始まってしまいます。

ゼットリンカーでの進め方

私たちが受託で関わった小規模プロジェクトの範囲では、まず振り分けミスの影響が大きい1〜2カテゴリに絞ってMVPを作り、数週間の短いサイクルで分類精度を確認しながら対象カテゴリを広げていくことが多いです。全カテゴリを一度に対象にするより、小さく動かして精度を確認してから拡張するほうが手戻りが少ないと考えています。

分類結果を確信度つきで扱い、低確信度は人の確認に回すという設計は、見積書・請求書の自動作成をAIで内製する方法のような、金額を扱うため誤りの許容度が低い業務にも応用できる考え方です。

まとめ

受信メールのAI活用は、自動返信より先に分類・振り分けから着手するほうが、誤判定の被害を抑えながら導入できます。確信度が低い判定は人の確認に回すフォールバックを最初から組み込み、カテゴリは3〜5個程度の少数から始めるのが、手戻りの少ない進め方です。代表メールアドレスの一次仕分けに時間を取られている情シス担当者の方は、まず過去1〜2週間分のメールの分布を棚卸しすることから始めてみてください。

自社のメール分布を整理してから相談したいという方には、15分のカジュアル相談(事例・要件未定でもOK/営業はしません)をご用意しています。要件が固まっている方は、ゼットリンカーの無料相談フォームからご相談ください。

よくある質問

分類だけでなく自動返信まで一気に作った方が効率的ではないですか?

自動返信は誤った内容を相手に送ってしまうリスクを伴うため、まず分類・振り分けから着手し、精度を実運用で確認してから返信支援に進む方が失敗が少ないと考えています。分類の誤判定は振り分けが遅れる程度の被害で済みます。

自社のメールサーバーを別途用意する必要がありますか?

SendGridのInbound Parse Webhookのような受信メールをWebhookで転送してくれるサービスを使えば、自社でメールサーバーを構築する必要はありません。DNSのMXレコードを向けるだけでNext.js側のエンドポイントにメール内容が届きます。

AIの分類精度はどの程度信頼できますか?

分類結果に確信度(confidence)を持たせ、閾値を下回った場合は「未分類」として人が確認する運用にすることで、誤判定がそのまま担当外の部署に届くリスクを抑えられます。最初から全カテゴリを高精度で分類しようとせず、件数の多いカテゴリから始めるのが現実的です。

既存の問い合わせ管理SaaSの自動振り分け機能との違いは何ですか?

SaaSの振り分け機能は汎用的な設計であるのに対し、内製であれば自社のカテゴリ分類や通知先のロジックに合わせて調整できます。ただし受信件数が少ない組織では、開発コストに見合わず既製SaaSや手動運用の方が総コストで有利な場合もあります。

技術仕様・対象バージョンは本文と参照先をご確認ください。

最終更新:2026年9月15日

Share this article

課題が整理できていなくても相談できます

困っている業務と、変えたいことだけでも大丈夫です。初回相談・モック・見積もりは無料です。

カジュアルに相談する

先に整理したい方は発注前の検討シート・AI相談プロンプトをご利用ください。未確認の項目は空欄のままご相談いただけます。

次に読む記事

ALL ARTICLES →

プライバシーポリシー

株式会社ゼットリンカー(以下、「当社」といいます。)は、お客様の個人情報の重要性を認識し、 その保護の徹底を図るため、以下のプライバシーポリシー(以下、「本ポリシー」といいます。)を定めます。

1. 個人情報の定義

本ポリシーにおいて「個人情報」とは、生存する個人に関する情報であって、 当該情報に含まれる氏名、生年月日その他の記述等により特定の個人を識別することができるもの、 及び他の情報と容易に照合することができ、それにより特定の個人を識別することができることとなるものを指します。

2. 個人情報の収集

当社は、お客様が当社のサービスをご利用になる際、お客様の個人情報を収集することがあります。収集する個人情報は以下の通りです:

  • 氏名
  • メールアドレス
  • 電話番号
  • 会社名・組織名
  • 住所
  • その他当社が定める入力フォームにお客様が入力する情報

3. 個人情報の利用目的

当社は、お客様からご提供いただいた個人情報を、以下の目的で利用します:

  • お客様への連絡やサービスの提供
  • お客様からのお問い合わせへの対応
  • 当社サービスの改善や新サービスの開発
  • メールマガジンの配信(お客様の同意がある場合)
  • 契約や法令等に基づく権利の行使や義務の履行
  • その他、上記利用目的に付随する目的

4. 個人情報の第三者提供

当社は、以下の場合を除き、お客様の同意なく個人情報を第三者に提供することはありません:

  • 法令に基づく場合
  • 人の生命、身体または財産の保護のために必要がある場合であって、本人の同意を得ることが困難である場合
  • 公衆衛生の向上または児童の健全な育成の推進のために特に必要がある場合
  • 国の機関もしくは地方公共団体またはその委託を受けた者が法令の定める事務を遂行することに対して協力する必要がある場合

5. 個人情報の管理

当社は、お客様の個人情報を正確かつ最新の状態に保ち、個人情報への不正アクセス、 個人情報の紛失、破損、改ざん及び漏洩などを防止するため、 セキュリティシステムの維持・管理体制の整備等の必要な措置を講じ、安全対策を実施し個人情報の厳重な管理を行います。

6. 個人情報の開示・訂正・削除

お客様は、当社に対してご自身の個人情報の開示を求めることができます。 また、開示の結果、個人情報の内容が事実でないことが判明した場合には、 速やかに訂正または削除に応じます。

7. 導入事例の公開について

当社は、お客様から依頼いただいたプロジェクトを導入事例として記事にさせていただく場合があります。導入事例として公開する場合は、以下の点に配慮いたします:

  • 機密情報や個人情報は公開いたしません
  • 社名を公開する場合は、公開内容について事前にお客様に確認いただきます
  • 社名を非公開とする場合でも、お客様のご要望に応じて公開内容を確認いただくことが可能です

8. Cookie(クッキー)の使用について

当社のウェブサイトでは、お客様により良いサービスを提供するため、Cookie を使用することがあります。 Cookie により個人を識別できる情報を収集することはありません。 お客様はブラウザの設定により Cookie の受信を拒否することができます。

9. SSL(Secure Socket Layer)について

当社のウェブサイトはSSLに対応しており、ウェブブラウザとウェブサーバーとの通信を暗号化しています。 お客様が入力する個人情報は自動的に暗号化されて送受信されるため、 万が一、第三者が傍受した場合でも内容を解読することは困難です。

10. プライバシーポリシーの変更

当社は、必要に応じて、本ポリシーの内容を変更することがあります。 変更後のプライバシーポリシーについては、当社ウェブサイトに掲載したときから効力を生じるものとします。

11. お問い合わせ

本ポリシーに関するお問い合わせは、以下の窓口までお願いいたします。

株式会社ゼットリンカー

〒160-0023

東京都新宿区西新宿3丁目3番13号西新宿水間ビル2F

代表取締役: 金原隆利

お問い合わせ先: info@zetlinker.com

制定日:2024年1月1日

最終改訂日:2026/9/15

利用規約

この利用規約(以下、「本規約」といいます。)は、株式会社ゼットリンカー(以下、「当社」といいます。)が 提供するウェブサイトおよびサービス(以下、「本サービス」といいます。)の利用条件を定めるものです。 お客様は、本規約に同意した上で、本サービスをご利用ください。

第1条(適用)

1. 本規約は、お客様と当社との間の本サービスの利用に関わる一切の関係に適用されるものとします。

2. 当社は本サービスに関し、本規約のほか、ご利用にあたってのルール等、各種の定め(以下、「個別規定」といいます。)を することがあります。これら個別規定はその名称のいかんに関わらず、本規約の一部を構成するものとします。

3. 本規約の規定と個別規定の規定が異なる場合は、個別規定において特段の定めなき限り、個別規定の規定が優先されるものとします。

第2条(定義)

本規約において使用する以下の用語は、各々以下に定める意味を有するものとします。

  • 「利用契約」とは、本規約を契約条件として当社とお客様との間で締結される、本サービスの利用契約
  • 「知的財産権」とは、著作権、特許権、実用新案権、意匠権、商標権その他の知的財産権(それらの権利を取得し、またはそれらの権利につき登録等を出願する権利を含みます。)
  • 「投稿データ」とは、お客様が本サービスを利用して投稿その他送信するコンテンツ(文章、画像、動画その他のデータを含みますがこれらに限りません。)

第3条(本サービスの提供)

1. お客様は、本規約に同意の上、当社の定める方法によって利用登録を申請し、当社がこれを承認することによって、本サービスを利用することができるようになります。

2. 当社は、お客様に以下のいずれかの事由があると判断した場合、利用登録の申請を承認しないことがあり、その理由については一切の開示義務を負わないものとします。

  • 利用登録の申請に際して虚偽の事項を届け出た場合
  • 本規約に違反したことがある者からの申請である場合
  • その他、当社が利用登録を相当でないと判断した場合

第4条(ユーザーIDおよびパスワードの管理)

1. お客様は、自己の責任において、本サービスのユーザーIDおよびパスワードを適切に管理するものとします。

2. お客様は、いかなる場合にも、ユーザーIDおよびパスワードを第三者に譲渡または貸与し、もしくは第三者と共用することはできません。

3. 当社は、ユーザーIDとパスワードの組み合わせが登録情報と一致してログインされた場合には、そのユーザーIDを登録しているお客様自身による利用とみなします。

第5条(禁止事項)

お客様は、本サービスの利用にあたり、以下の行為をしてはなりません。

  • 法令または公序良俗に違反する行為
  • 犯罪行為に関連する行為
  • 本サービスの内容等、本サービスに含まれる著作権、商標権ほか知的財産権を侵害する行為
  • 当社、ほかのお客様、またはその他第三者のサーバーまたはネットワークの機能を破壊したり、妨害したりする行為
  • 本サービスによって得られた情報を商業的に利用する行為
  • 当社のサービスの運営を妨害するおそれのある行為
  • 不正アクセスをし、またはこれを試みる行為
  • 他のお客様に関する個人情報等を収集または蓄積する行為
  • 不正な目的を持って本サービスを利用する行為
  • 本サービスの他のお客様またはその他の第三者に不利益、損害、不快感を与える行為
  • 他のお客様に成りすます行為
  • 当社が許諾しない本サービス上での宣伝、広告、勧誘、または営業行為
  • 面識のない異性との出会いを目的とした行為
  • 当社のサービスに関連して、反社会的勢力に対して直接または間接に利益を供与する行為
  • その他、当社が不適切と判断する行為

制定日:2024年1月1日

最終改訂日:2026/9/15