Media > AI活用ユースケース > 人事 > 面接の日程調整メールを読み取って、面接官の空きと突き合わせた候補日と返信案を作る

面接の日程調整メールを読み取って、面接官の空きと突き合わせた候補日と返信案を作る

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

候補者から届いたメールの自由文から希望日時を読み取り、面接官のカレンダーの空きと突き合わせて、提示できる候補日と返信文の案を作ります。採用担当の作業は、メールを読んで複数のカレンダーを開いて突き合わせることから、できあがった案を確認して送ることに変わります。

サマリー
利用ツール
ChatGPT/Claude/Gemini/Make/n8n/Power Automate/Python
対象業界
IT・SaaS/人材/介護/小売
対象部門
人事/採用
対象業務
台帳・マスタ管理/問い合わせ対応
主な課題
人手が足りない/属人化している/期限・対応漏れが起きる
AIで行う処理
エージェント
主な効果
対応スピード向上/工数削減/機会損失防止
導入難易度
★★★☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
必須
現在工数
40h/月
AI導入後
10h/月
想定削減
75%
年間削減
360h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 候補者から「◯日の午後か、翌週の月曜以降なら可能です」といったメールが届く
  2. 採用担当が、その求人の面接官2名の予定をOutlookで開く
  3. 候補者の希望と、面接官2名の空きが重なる時間帯を探す
  4. 見つからなければ、面接官に「この時間を空けられないか」と個別に聞く
  5. 候補日を3つ選ぶ
  6. 返信文を書く(挨拶、候補日3つ、面接の形式、所要時間、接続方法)
  7. 送信する
  8. 候補者から返信が来たら、カレンダーに予定を入れ、面接官と候補者を招待する
  9. 採用管理システムのステータスを更新する
導入後(After)
  1. 候補者からメールが届く
  2. 自動採用専用のメールボックスの受信を検知する
  3. 自動採用管理システムから、その候補者の選考段階と担当面接官を特定する
  4. 自動メールの自由文から、希望日時、避けたい日時、制約(在職中で平日夜のみ、など)を読み取る
  5. 自動面接官のカレンダーに問い合わせ、希望の範囲内で全員が空いている時間帯を取得する
  6. 自動候補日を3つ選び、返信文の案を作る
  7. 採用担当が案を確認し、必要なら直して送信する
  8. 候補者の返信を受けて確定したら、予定を登録する
  9. 自動採用管理システムのステータスを更新する
各工程の詳しい説明を読む
  1. 候補者から「◯日の午後か、翌週の月曜以降なら可能です」といったメールが届く
  2. 採用担当が、その求人の面接官2名の予定をOutlookで開く
  3. 候補者の希望と、面接官2名の空きが重なる時間帯を探す
  4. 見つからなければ、面接官に「この時間を空けられないか」と個別に聞く
  5. 候補日を3つ選ぶ
  6. 返信文を書く(挨拶、候補日3つ、面接の形式、所要時間、接続方法)
  7. 送信する
  8. 候補者から返信が来たら、カレンダーに予定を入れ、面接官と候補者を招待する
  9. 採用管理システムのステータスを更新する

問題は4つあります。

(a)カレンダーを開いて突き合わせる作業が細切れに発生する。 1件6分でも、1日10件来れば1時間です。しかもメールが届くたびに発生するため、他の作業が中断されます。

(b)面接官の予定が埋まっている。 面接官は現場のマネージャーで、面接は本業ではありません。25名分の予定を見て、2名の空きが重なる枠を探すのは手間がかかります。「空いているように見えて、移動時間が取れない」といった事情もカレンダーからは読めません。

(c)返信が遅れると候補者が離れる。 中途採用では、候補者は複数社を並行して受けています。返信が2日遅れると、その間に他社の面接が決まります。この構成が防ごうとしている損失は、時間よりこちらです。

(d)調整の状況が担当者の頭の中にある。 「この候補者には候補日を送ったが返信待ち」「この人は面接官の都合待ち」といった状態が、メールボックスにしか存在しません。担当者が休むと止まります。

  1. 候補者からメールが届く
  2. 【自動】 採用専用のメールボックスの受信を検知する
  3. 【自動】 採用管理システムから、その候補者の選考段階と担当面接官を特定する
  4. 【自動】 メールの自由文から、希望日時、避けたい日時、制約(在職中で平日夜のみ、など)を読み取る
  5. 【自動】 面接官のカレンダーに問い合わせ、希望の範囲内で全員が空いている時間帯を取得する
  6. 【自動】 候補日を3つ選び、返信文の案を作る
  7. 【人】 採用担当が案を確認し、必要なら直して送信する
  8. 【人】 候補者の返信を受けて確定したら、予定を登録する
  9. 【自動】 採用管理システムのステータスを更新する

自動化されるのは「読む」「探す」「重ねる」「案を書く」の4つです。送信は人が行います。

候補日が見つからなかった場合も、そのことを結果として返させます。 「該当なし」の理由(面接官Aが該当週すべて埋まっている、など)が分かれば、採用担当は面接官に直接交渉できます。

02今回想定するシステム構成

構成図
候補者
   │ メール
   ▼
採用専用メールボックス(Microsoft 365)
   │
   ▼【トリガー】新着メールの検知(5分おきのポーリング)
Python(Microsoft Graph SDK)
   │
   ├──▶ 採用管理システム ── 候補者の選考段階 / 担当面接官
   │
   ├──▶ Claude API(構造化出力)
   │       ─ メール本文から希望日時・制約を抽出
   │       ─ 「不明」を推測で埋めない
   │
   ├──▶ Microsoft Graph /me/findMeetingTimes
   │       ─ 面接官全員の空き状況から候補時間を取得
   │       ─ confidence(出席可能性)付きで返る
   │
   ├──▶ Claude API ── 返信文の案を作る
   │
   ▼
採用担当の確認画面(メールの下書きとして保存)──【人が送信】
   │
   ▼
候補者の返信で確定 → 予定登録・招待【人が実行】
   │
   ▼
採用管理システムのステータス更新
役割想定する製品代替候補
実行環境PythonPower Automate、Make、n8n
生成AIClaude API(構造化出力)OpenAI API、Gemini API
カレンダー照会Microsoft Graph(findMeetingTimes)Google Calendar API の freebusy
メールMicrosoft 365(Outlook)Google Workspace(Gmail)
採用管理既存の採用管理システム各社のATS

空き時間の計算をAIにさせません。 Microsoft Graph には findMeetingTimes という専用のAPIがあり、出席者の予定表の空き状況を見て候補時間を返します。AIに複数人のカレンダーを渡して「空いている時間を探して」と頼むのは、確実に計算できることを不確実にする設計です。

AIが担うのは、カレンダーでは分からない部分、つまり候補者が自由文で書いた「来週の火曜か水曜の午後、ただし15時までに終わる必要があります」を構造化された条件に変えることと、返信文を書くことです。

日程調整ツール(候補者が枠を選ぶ形式)を先に検討してください。 導入できるなら、この構成は要りません。それでも残る用途は第1章に書いたとおりです。

03どうやって実装するのか

Step1

処理の起点を決める

採用専用メールボックスへの新着メールを起点にします。5分おきに未読メールを確認する形で十分です。

Webhook(Graph の変更通知)を使えば即時に処理できますが、日程調整では5分の遅れは問題になりません。 通知の受信エンドポイントを用意し、購読の有効期限を管理する手間に見合いません。

採用専用のメールアドレスを用意することが前提です。 採用担当個人のメールボックスを監視する構成にすると、個人宛の他のメールも処理対象に入ります。

Step2

入力データを集める

データ中身取得元
候補者のメール本文、件名、送信者、送信日時Outlook
過去のやり取り同じ候補者との直近のメール(スレッド)Outlook
候補者情報氏名、応募職種、選考段階採用管理システム
担当面接官その選考段階の面接官(1〜3名)採用管理システム
面接官の予定空き状況(予定の中身は不要)Microsoft Graph
面接の設定所要時間、形式(オンライン/対面)、場所選考段階ごとの設定
会社の営業日休業日、全社行事の日共有カレンダー
Step3

データの取得方法を決める

メール本文: Graph の /users/{id}/messages から取得します。スレッド全体を渡してください。 「前回お伝えした日程ですが」という返信は、1通だけでは意味が取れません。

候補者の特定: 送信元のメールアドレスで採用管理システムを引きます。一致しない場合は処理を止め、人に回します。 家族のアドレスから送られてくることや、転職後にアドレスが変わることがあります。

面接官の空き: Microsoft Graph の POST /me/findMeetingTimes を使います。出席者、会議の長さ(ISO 8601 の期間表記。1時間なら PT1H)、時間帯の制約、最大候補数、最低出席可能率を指定すると、候補時間が返ります。

このAPIの返す confidence は、全出席者が出席できる見込みを示す0〜100%の値です。各出席者について、指定した時間帯の状態が「空き」なら100%、「不明」なら49%、「予定あり」なら0%として、出席者全員の平均を取ります。minimumAttendeePercentage を指定すると、その値以上の候補だけが返ります。指定しない場合の既定は50%です。

必要な権限は、委任のアクセス許可 Calendars.Read.Shared です。アプリケーションのアクセス許可では利用できません。 つまり、サービスとしてバックグラウンドで動かす場合、誰かのユーザーアカウントとして動く必要があります。 採用担当の共有アカウントを用意する設計が現実的です。この点は設計に影響するため、先に確認してください。

候補が返らなかった場合は、emptySuggestionsReason に理由が入ります。これを読んで条件を変え、再度呼びます。

時間帯の指定: timeConstraintactivityDomainwork を指定すると、利用者の予定表の設定にある勤務時間の中から候補が返ります。既定の勤務時間は月曜から金曜の8時から17時です。「平日の18時以降」という候補者の希望に応えるには unrestricted を指定する必要があります。 ここを既定のままにすると、在職中の候補者の希望に一件も応えられません。

既定の応答はUTCで返ります。 Prefer: outlook.timezone ヘッダーで日本時間を指定してください。ここを忘れると9時間ずれた候補日を候補者に送ることになります。

Step4

AIへ渡す前に整形する

  1. スレッドの整形 … 引用部分(> で始まる行、「-----元のメッセージ-----」以降)を除きます。除かないと、前回送った候補日を今回の希望と読み違えます
  2. 署名の除去 … 候補者の署名に含まれる電話番号や住所は、日程の抽出に不要です
  3. 候補者の特定 … 送信元アドレスで採用管理システムを引きます。一致しなければ処理を止めます
  4. 選考段階の確認 … 一次面接か最終面接かで、面接官も所要時間も変わります
  5. すでに確定済みかの確認 … 同じ候補者について予定が確定している場合、日程調整の依頼ではなく別の連絡の可能性があります。人に回します
  6. 営業日の除外 … 会社の休業日を候補から除きます
Step5

AIに処理させる

AIの出番は2か所です。間にカレンダーの照会が入ります。

1回目:メールから条件を読み取る

処理内容
希望日時の抽出「来週の火曜か水曜の午後」を、日付の範囲と時間帯に変える
避けたい日時の抽出「◯日は終日不可」「午前は避けたい」
制約の抽出在職中で平日夜のみ、移動に1時間必要、オンライン希望など
依頼の種別判定日程調整の返信か、辞退か、質問か、別件か
緊急度「今週中に決めたい」といった記述

2回目:返信文を作る

処理内容
候補日の提示文カレンダー照会で得た候補を、読みやすい文にする
定型情報の挿入面接の形式、所要時間、接続方法、持ち物
候補が無い場合の文「いただいた日程では調整が難しく」の文面と、代替の依頼

1回目で「不明」を推測させないことが要点です。 「来週」が何月何日から何日までかは、メールの送信日から計算できます。しかし「都合のよいときに」としか書かれていない場合、AIが勝手に範囲を決めると、候補者が想定していない日程が提示されます。範囲が読み取れなければ unknown を返させ、人に回します。

Step6

指示内容を固定する

1回目(条件の抽出)

あなたは採用担当を支援する担当者です。
候補者からのメールを読み、面接の希望日時と制約を読み取ってください。

【厳守事項】
- メールに書かれていない日時を補わないでください。
  範囲が読み取れない場合は date_range を null にし、
  reason に「読み取れなかった理由」を書いてください。
- 相対的な表現(来週、再来週、月末)は、メールの送信日
  {mail_sent_date} を基準に日付へ変換してください。
  基準が曖昧な表現(そのうち、落ち着いたら)は変換しないでください。
- 「◯日以外なら」のような否定形は、excluded に入れてください。
  希望日時として解釈しないでください。
- 在職中であること、移動時間が必要なこと、オンライン希望などの
  制約は constraints にそのまま書き写してください。要約しないでください。
- メールが日程調整の返信でない場合(辞退、質問、別件)は
  message_type をそれぞれに設定し、日時の抽出を行わないでください。

【メール本文(引用部分は除去済み)】
{mail_body}

【このスレッドの過去のやり取り】
{thread_history}

2回目(返信文の作成)

候補日と面接の設定を渡します。候補者への返信文を作ってください。

【厳守事項】
- 渡された候補日時をそのまま書いてください。
  日時を言い換えたり、丸めたりしないでください。
- 選考の合否、次の段階の有無、給与や条件について
  一切書かないでください。
- 候補者の制約(在職中など)に触れて配慮を示す文を
  勝手に足さないでください。事実として書かれたことだけを扱います。
- 候補日が0件の場合は、日程が合わなかったことを伝え、
  別の日程を尋ねる文にしてください。理由の推測を書かないでください。

【候補日時】{suggestions}
【面接の設定】{interview_setting}
【候補者の氏名】{candidate_name}
【差出人】{recruiter_name}

「選考の合否について書かない」の指示が必要です。 生成AIは丁寧な文章を書こうとして、「ぜひお会いしたく」「次の段階に進んでいただくため」といった表現を入れることがあります。日程調整の連絡にこれが入ると、候補者は選考結果の示唆と受け取ります。

Step7

出力形式を固定する

1回目

{
  "message_type": "scheduling | decline | question | other",
  "date_range": { "from": "", "to": "" },
  "preferred_slots": [ { "date": "", "from": "", "to": "" } ],
  "excluded": [ { "date": "", "from": "", "to": "" } ],
  "constraints": [],
  "urgency": "high | normal",
  "reason": "",
  "confidence": "high | medium | low"
}

date_rangenull にできる形にしておくのが重要です。空文字で返させると、後段がそれを「指定なし」として処理し、任意の日程を提示します。

2回目

{
  "subject": "",
  "body": "",
  "suggested_slots_used": []
}

suggested_slots_used に、本文で実際に提示した日時を構造化して返させます。本文の文章と照合し、一致しなければ送信しないチェックを入れるためです。文章の中で日時が書き換わる事故を、ここで止めます。

Step8

システムへ連携する

返信の下書き: 作成した文面を、Graph でメールの下書きとして保存します。採用担当がOutlookで開き、確認して送信します。自動送信はしません。

下書きにする理由は、確認の手間が最も小さいためです。専用の確認画面を作ると、採用担当は新しい画面を覚えることになります。Outlookの下書きなら、いつもの操作のまま確認できます。

カレンダー登録: 候補者から返信が来て日程が確定した時点で、採用担当が予定を作ります。ここは自動化しません。確定の返信は「2番目でお願いします」のような短文で、誤読の危険があります。

採用管理システム: 候補日を送った時点と、確定した時点でステータスを更新します。この更新があることで、「誰が返信待ちか」が担当者の頭の外に出ます。

Step9

人が確認する

返信は全件、採用担当が確認して送信します。

確認すべき点を、下書きの冒頭にコメントとして入れておきます(送信前に削除する前提)。

  • 提示している日時が、suggested_slots_used と一致しているか
  • 候補者の制約(在職中、遠方など)に反していないか
  • 選考の合否を示唆する表現が入っていないか
  • 候補者の氏名の表記(旧字体、外国人名のカナ)が正しいか

confidence が low の件は、下書きを作らず、条件の抽出結果だけを担当者に見せます。 「メールから日程が読み取れませんでした」と正直に返すほうが、推測で作った下書きを直させるより早く終わります。

Step10

例外に対処する

起きること対応
送信元アドレスが採用管理システムに無い処理を止め、人に回す。推測で候補者を特定しない
メールが日程調整ではない(辞退・質問)message_type で分け、下書きを作らず担当へ通知する
希望日時が読み取れないdate_range を null で返し、下書きを作らない
候補日が0件emptySuggestionsReason を読み、条件(期間、最低出席可能率)を緩めて再度照会する。それでも0件なら、その旨と理由を担当へ伝える
面接官の予定が「不明」ばかりfindMeetingTimes の confidence は「不明」を49%として計算する。予定表が共有されていない面接官がいると、候補の確度が下がる。先に予定表の共有設定を確認する
候補者が「平日の18時以降」を希望activityDomainunrestricted にする。work のままだと勤務時間内の候補しか返らない
時差のある海外在住の候補者Prefer: outlook.timezone で日本時間を指定したうえで、候補者の時間帯も併記する。時差の計算を文章で書かせない
同じ候補者から連続でメールが来る直前の処理から10分以内の同一候補者のメールは、まとめて1回で処理する
すでに日程が確定している候補者からのメール日程変更の依頼の可能性がある。下書きを作らず担当へ通知する
AIが日時を言い換えたsuggested_slots_used と本文を照合し、不一致なら下書きを作らず担当へ通知する
Step11

記録を残す

  • 受信したメールと、引用除去後の本文
  • 1回目のAI出力(抽出した条件と confidence
  • findMeetingTimes に渡した条件と、返ってきた候補・confidenceemptySuggestionsReason
  • 2回目のAI出力(返信文の案)
  • 採用担当が下書きを修正した箇所
  • 実際に送信された文面と、確定した日程

「下書きを修正した箇所」が精度の実測値です。 日時の部分が修正されているなら抽出に問題があり、文面だけが修正されているなら定型文の設定に問題があります。分けて数えてください。

候補者とのやり取りは個人情報です。保存期間を採用管理の規程に合わせ、選考終了後の扱いを決めてください。

04実装レベルの3段階

最小構成:メールを生成AIに貼り付けて条件を抽出し、カレンダーは人が見る / 読み取りのみ
半自動化:新着メール → 条件抽出 → findMeetingTimes → 返信の下書き作成 / 読み取り・突合・文面作成
本格構成:上記+確定時のカレンダー登録と招待、採用管理システムの自動更新、リマインドの送信 / 確定後の処理まで

半自動化で効果の大半が出ます。 6分かかっていた空き確認が消えるためです。本格構成との差は、確定後の登録作業(1件1分)だけです。 本格構成でも返信の送信は自動化しません。 候補者との最初の接点が自動送信のメールである状態は、採用という業務の性質に合いません。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
2 名
月間件数
200 件
1件あたり現在時間
12 分
1件あたり導入後時間
3 分
現在  200件 × 12分 ÷ 60 = 40 時間/月
導入後 200件 × 3分 ÷ 60 = 10 時間/月
月間削減時間
30h
削減率
75%
年間削減時間
360h
年間金額換算(時間単価3,000円)
108万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 月80件以上の面接日程調整が発生し、面接官が10名以上いて各自の予定が埋まっていること。面接官の予定が Microsoft 365 または Google Workspace のカレンダーで管理され、空き時間が参照できること。候補者とのやり取りがメールで行われていること。
向いていない
  1. 月20件未満で、採用担当が面接官の予定を把握できている場合。すでに日程調整ツールを導入し、候補者が自分で枠を選べる状態になっている場合(先にそちらを検討する)。面接官の予定がカレンダーに入っておらず、口頭で確認している場合。

07最小構成で試す方法

  1. 過去1か月の日程調整メールを30件用意する(候補者の返信メールのみ)
  2. 生成AIに1件ずつ貼り付け、上の「1回目」のプロンプトで条件を抽出させる
  3. 抽出された希望日時が、メールの内容と合っているかを目で確認する
  4. 30件のうち、正しく抽出できた件数を数える
  5. あわせて、date_range が null になった件(読み取れなかった件)が何件かを数える

5番目が重要です。 読み取れない件が多いのは失敗ではありません。推測で埋めずに「読み取れない」と返すのが正しい動作です。 問題は、読み取れないと返すべき件で日付を返してしまうことです。

判断の目安は次のとおりです。

抽出の正確さ判断
正しい抽出が8割以上、誤った抽出が1件以下進めてよい
誤った抽出が3件以上プロンプトの禁止事項を強める。それでも減らなければ、日程調整ツールの導入を検討する
読み取れない件が5割以上候補者への依頼文を見直す。「◯月◯日〜◯月◯日の間でご都合をお知らせください」と範囲を示すだけで、返信の書き方が変わる

最後の行は、AIを入れずに効果が出る改善です。 候補者に日程を尋ねる文面が曖昧だから、返信も曖昧になります。まずここを直してください。

カレンダーの照会は、この段階では試せません。Graph API の権限設定が必要です。抽出の精度が出てから権限を取りに行ってください。

08実装時につまずきやすいポイント

問題対策
候補日が9時間ずれるPrefer: outlook.timezone ヘッダーで日本時間を指定する。既定はUTC
平日夜の候補が1件も返らないtimeConstraint.activityDomainunrestricted にする。既定の work は勤務時間内(既定は月〜金の8〜17時)のみ
候補が0件で理由が分からないemptySuggestionsReason を読む。期間か minimumAttendeePercentage を緩めて再度呼ぶ
面接官の空きが「不明」になる予定表の共有設定を確認する。findMeetingTimes は「不明」を49%として扱うため、確度が下がる
アプリケーション権限で動かせないfindMeetingTimes は委任のアクセス許可のみ。共有アカウントで動かす設計にする
引用部分を今回の希望と誤読する引用行と「元のメッセージ」以降を除去してからAIに渡す
AIが「都合のよいときに」から日付を作るdate_range を null にできる形にし、プロンプトで補完を禁止する
返信文に選考の示唆が入るプロンプトで禁止する。下書きの確認項目に入れる
提示した日時が文中で書き換わるsuggested_slots_used と本文を照合し、不一致なら下書きを作らない
同じ候補者に重複して候補日を送る直近の送信履歴を確認してから下書きを作る
結果がテスト環境で毎回変わるfindMeetingTimes の候補算出の仕組みは随時調整されるため、入力が同じでも結果が変わり得る。厳密な再現性を前提にしたテストを組まない

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 候補者の氏名、メールアドレス、応募職種、選考段階、在職中かどうか。採用に関する個人情報であり、本人の同意の範囲内でのみ扱えます。

  1. 外部AIへの入力可否 … 候補者のメール本文を外部サービスに渡します。採用時に取得する個人情報の利用目的と、第三者提供・委託の扱いを確認してください。 プライバシーポリシーと、応募時に同意を得た内容に照らして判断する事項です
  2. 氏名を渡す必要性 … 条件の抽出に氏名は不要です。返信文の作成にだけ必要です。1回目の呼び出しでは氏名を伏せる構成にできます。渡す情報を減らせるところは減らしてください
  3. 選考に関する情報を渡さない … 評価、面接官のコメント、他社の選考状況は、日程調整には不要です。採用管理システムから取るのは選考段階と担当面接官だけに限定してください
  4. 面接官のカレンダーの中身findMeetingTimes は空き状況を見ますが、予定の件名や参加者を取る必要はありません。予定の中身を取得する実装にしないでください
  5. 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
  6. 自動実行してよい範囲 … 読み取り、突合、下書きの作成までです。返信の送信、日程の確定、カレンダーへの招待は人が行います
  7. 保存期間 … 候補者とのやり取りのログは、採用管理の規程に合わせて保存期間を決め、不採用の場合の削除まで設計してください

誤りが起きた場合のリスクは、誤った日程を提示して候補者の予定を無駄にすること、選考の示唆と受け取られる表現を送ることです。どちらも、候補者から見れば会社の対応そのものです。

10まず何から始めるか

1週目:候補者への依頼文を直す

AIを入れる前にこれをしてください。 「ご都合をお知らせください」ではなく、「◯月◯日〜◯月◯日の平日で、9時〜19時の間からご都合のよい時間帯を3つほどお知らせください」と書きます。返信の書き方が変わり、読み取れない件が減ります。効果を測ってから次に進んでください。

2週目:抽出の精度を測る

過去1か月の返信メール30件で、条件の抽出を試します。正しく抽出できた件数と、誤って抽出した件数を数えます。誤りが3件以上あるなら、この構成は向きません。

3週目:Graph API の権限を確認する

Calendars.Read.Shared の委任のアクセス許可を取得できるか、情報システム部門に確認します。アプリケーションのアクセス許可に対応していないため、どのアカウントで動かすかを先に決める必要があります。 ここで止まるなら、実装に進めません。

あわせて、面接官25名の予定表の共有設定を確認します。空き状況が「不明」で返る面接官が多いと、候補の確度が下がります。

4週目〜2か月目:1つの求人で試す

全求人でいきなり動かさず、面接件数の多い求人を1つ選んで動かします。下書きの修正箇所を記録し、日時の修正と文面の修正を分けて数えます。

3か月目以降: 修正が減ってきたら対象求人を広げます。並行して、日程調整ツールで代替できないかを再検討してください。 この構成は「メールでやり取りする前提を変えない」ための仕組みであり、前提を変えられるなら、そちらのほうが簡単です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-09-15/最終更新:2026-09-15
確認した内容情報源確認日
Microsoft Graph の findMeetingTimesPOST /me/findMeetingTimes)が、出席者の予定表の空き状況から候補時間を返すこと。attendees meetingDuration(ISO 8601、例 PT1HtimeConstraint maxCandidates minimumAttendeePercentage を指定できる。confidence は「空き」100%・「不明」49%・「予定あり」0%の平均で算出され、既定の最低出席可能率は50%。候補が無い場合は emptySuggestionsReason に理由が入る。activityDomain の既定は work(既定の勤務時間は月〜金の8〜17時)で、時間帯を広げるには personal または unrestricted を指定する。既定の応答はUTCで、Prefer: outlook.timezone ヘッダーで時間帯を指定できる。必要な権限は委任の Calendars.Read.Shared(最小権限)で、アプリケーションのアクセス許可には対応していない。候補算出の仕組みは随時調整されるため、入力が同じでも結果が変わり得るMicrosoft Learn: user: findMeetingTimes2026-09-15
Claude API の構造化出力が、JSON Schema で指定した形式に沿った応答を保証すること。列挙値を定義でき、必須項目が必ず存在することが保証されるClaude Docs: Structured outputs2026-09-15

採用管理システムとの連携方式(API/CSV)は製品によって異なります。この部分は利用環境に応じた個別確認が必要です。 候補者の個人情報を外部サービスへ渡すことの可否は、自社のプライバシーポリシーと応募時の同意内容に照らして判断してください。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0069)についてのご相談はこちらから。

AI活用について相談する
目次