初めまして。株式会社Jinouの三輪です。人材紹介の業界に携わって3年目になります。現在は、グループ会社の人材紹介事業会社と連携しながら、人材紹介に特化した業務効率化ツールの開発やマーケティングに携わっております。
弊社はかなりAIに力を入れております。しかしながら、人材業界ではまだまだ正しいAIの活用が進んでいない印象があります。そこで、グループ会社でも使っている、人材紹介に特化したAIの業務効率化術を発信していきたいと思い、この記事を書くに至りました。
この記事に興味を持ってくれた方は、おそらく人材業界の方だと思います。少しでも良い価値提供ができれば嬉しいです。
ただ、今回は通常の記事とは違う構成で執筆します。それは何か? "人間用"と"AI用"の記事に分けて執筆します。
「どういうことだ?」と思いましたよね。はい、僕自身もそう思います。
僕が目指しているのは"AI初心者でもAIの活用がしっかりとできる記事"です。そのため、全部をあなたが理解するのではなく、あなたの使っているAIが理解できればいいんじゃないかと考えました。
もちろん、あなた自身が理解するのも大事です。理想を言えば、あなたが理解するに越したことはありません。しかし、2026年3月頃からAIの進化速度は爆発的に加速した印象があり、AIは複雑なうえに進化のスピードも速く、一から勉強するのはなかなか大変だと思います。
そこで、人間用の記事では【大まかな料理の完成図】を、AIには【詳しい料理のレシピ】をお渡しするイメージで、人間用とAI用に分けて執筆しました。
まずは人間用の記事を読んでいただき、活用できそうだなと感じたら、記事後半の「AI用ガイド」をあなたのAIに読ませて実践してください。AI用ガイドを読ませれば、AIが記事の内容や構成を理解し、活用方法を具体的に教えてくれると思います。
これからの時代、もしかするとこのような記事構成が一般的になるかもしれません。まずは人間用の記事で、ざっくりとした流れをつかんでみてください。
あなたの仕事の効率化に、少しでもお役に立てれば幸いです。それでは、次の章から読み進めてみてください。
【AI初心者向けの簡単解説!!】面談後の記録やメモを完全自動化する方法!!
まだ面談を手動でメモをしたり、記録をつけていませんか?
面談が終わるたびに、話した内容をまとめて、顧客管理に入力する。この作業、意外と時間がかかりますよね。
「メモは後でまとめよう」と思っているうちに、次の面談や別の対応が入ってしまう。気づけば夕方になっていて、溜まった面談メモを思い出しながら、まとめて打ち込む。
そして次にその方と話すときには、「この方、どんな話をしていたっけ?」と思い出すところから始まる。
何を隠そう、僕にもそんな経験がありました(笑)。

今回紹介するのは、面談の内容をAIに整理してもらい、求職者ごとの記録として残す仕組みです。
面談が終わったら、あとは待つだけ。少し経つと、顧客管理の中に面談の記録ができあがっています。一からメモを書いて転記する手間をなくし、その時間を求職者への提案やフォローに使えるようにしていきます。
手入力でメモを取る必要はなくなります
たとえば、面談で話したことを、こんな形で残します。
- 今どんな状況なのか:どんな仕事をしていて、なぜ転職を考えているのか。
- 今回、何を話したのか:相談した内容や、面談で決まったこと。
- 次に何をするのか:担当者と求職者が、それぞれ準備すること。
実際にできあがる記録は、こんなイメージです。

ただ議事録を作るのではありません。次の面談前に読めば、前回の話をすぐ思い出せる記録を作るということです。
普通の議事録だと、必要のない内容まで残ったり、逆に大事な部分が省略されたりすることがあります。今回の方法なら、まとめてほしいフォーマットを自分でカスタムすることもできます。
僕も以前は、こうした記録を、当時使っていた顧客管理システムに手入力でまとめていました。
ただ、面談中にメモを取り損ねたり、面談後に大事なポイントをまとめるのを忘れてしまったり。次に同じ方と面談するときに、「前回、何を話したっけ?」「この方、どんな状況だったっけ?」となることが、ちょこちょこあったんですよね。
それに、当時から思っていましたが、記録をつけるのはめんどくさかったんですよね(笑)。やっている方は共感してもらえると思うのですが、意外と時間がかかるんですよ。
それが、面談記録を自動で整理して残せるようになってからは、面談後に記録をつけ忘れることがなくなりました。前回の内容も、見ればすぐに理解できるようにまとまっているので、面談の質も上がったと感じています。
さらに、一番大きかった効果は、対応できる人数(キャパ)が圧倒的に増えたことです。人材紹介は抱えられる求職者の人数に限界があると思うのですが、面談記録を自動化してメモや記録の手間を省けたことで余裕ができ、対応数が1.5倍〜2倍くらいに増えました。対応人数が増えれば、売り上げにも影響します。実際に、自動化後のほうが売り上げは上がっています。
つまり、この自動化は売り上げの向上にもつながり、仕事も楽になる。一石二鳥というわけです。
ちなみに僕は、以前からGAS・Claude API・Notionを組み合わせて、この仕組みを実際に使っていました。現在は、自作のCRMの中で要約から保存までを行っています。
劇的に楽になる4つの活用方法
記録が勝手に残るようになると、「メモが楽になる」だけでは終わりません。実際に使ってみて、便利だと感じた場面を紹介します。

① 次の面談の前に、前回の内容をさっと思い出せる
面談の直前に記録を開けば、前回どんな話をして、何を宿題にしていたのかがすぐ分かります。「前回お話しされていた〇〇の件、その後いかがですか?」と、こちらから話を切り出せるようになります。求職者からしても、「ちゃんと覚えてくれている」という安心感につながります。
② 担当CAが替わっても、引き継ぎがスムーズ
あまりない状況かもしれませんが、担当の交代や、休みの日の代理対応。そんなときも、これまでの面談記録がそろっていれば、新しい担当者が読むだけで状況をつかめます。「前の担当者に聞かないと分からない」がなくなり、求職者に同じ話を何度もしてもらう必要もありません。
③ マネージャーが面談の中身を見て、フィードバックできる
これは結構大きいなと思いました。実際にマネジメントをしている方もいると思いますが、人材紹介は面談がブラックボックスになりやすく、面談の指導がしにくいという課題があると思います。
今回の方法では面談の内容が記録として残るので、マネージャーは同席しなくても、どんな面談だったのかを確認できます。「ここはもう一歩深く聞けたね」「この提案は良かったね」と、具体的な記録をもとにアドバイスできるようになります。
④ 「次にやること」が残るので、求人紹介やフォローを忘れない
面談の最後に「〇〇の求人を探しておきますね」「来週までに職務経歴書を見直しておいてください」と約束したこと。忙しいと、こうした約束はつい抜け落ちてしまいます。記録に「次にやること」として残るので、担当者側の宿題も、求職者側の準備も、忘れずに追いかけられます。
仕組みを図で解説

まず、録音した面談の会話を、文字起こしサービスが文章にします。その文章をClaudeが読み、話したことや次にやることを整理。そして、サービス同士をつなぐ役のGAS(Google Apps Script:Googleが無料で提供している自動化の仕組み)が、整理した内容を顧客管理へ保存します。
つまり、「面談の会話を文字にする → AIがまとめる → 自社で使っている顧客管理システムに記録する」という流れです。
最初にサービス同士をつなぐ設定は必要ですが、今の段階で難しい用語を覚える必要はありません。まずは「面談後にメモをしたり記録を作る作業がなくなるんだ!めちゃくちゃ楽じゃないか!!」くらいに思ってもらえれば大丈夫です。
今回は、文字起こしに「tl;dv」、整理に「Claude」、保存先に「Notion」を使う例を取り上げます。別のサービスに置き換えられる場合もありますが、つなぎ方はそれぞれ異なります。利用するサービスによっては費用もかかります。
GASが定期的に新しい文字起こしを取りに行くので、面談が終わった直後ではなく、文字起こしの完成後、少し待つと記録がまとまるイメージです。今回は15分ごとに確認する設定を目指します。
やってみたい方へ|AIと一緒に進める読み方
「これをやってみたい。でも、AIに全然詳しくないからわからない」という方もいますよね。冒頭でもお伝えしたとおり、この記事は、そんなAI初心者の方でもしっかり自分で自動化ができるように工夫しています。
この先は、AIに渡して相談しながら設定を進めるための、詳しい説明です。AI用ガイドをコピペして、あなたの使っているChatGPT・Claude Code・Geminiなどに貼り付け、自分の環境に合う設定を一つずつ確認してみてください。配布セットのZIPも一緒に渡すと、より正確に案内してもらえます。
仕組みを自分で理解したい方も、AI用ガイドを自分が使っているAIにコピペして理解させてから、AIと会話しながら仕組みを解説してもらってください。細かいところまで解説してもらえますし、会話しながら理解したほうが覚えも早いと思います。
初心者向けの簡単解説はここまでです。 この後は、後半の「AIに渡す詳細資料」へ進みます。
AIに渡す詳細資料|AI用ガイド
ここから先は、AIに読ませるためのガイドです。 人が読んで分かりやすいことよりも、AIが仕組みと手順を正確に理解できることを優先して書いています。
使い方はかんたんです。下のガイドを「コピー」ボタンでまるごとコピーして、普段使っているChatGPT・Claude・Geminiなどに貼り付けてください。そのあとに「自分の環境で何をすればいいか、一つずつ教えて」と送れば、AIが順番に案内してくれます。使っているツールがtl;dvやNotionと違っても大丈夫です。AIが、どこを置き換えればいいかを一緒に考えてくれます。
# AI用ガイド:面談の文字起こしをClaudeで整理し、顧客管理へ自動保存する
このガイドは、利用者がChatGPT・Claude・GeminiなどのAIに貼り付けて使うためのものです。読んでいるAIは、この内容をもとに利用者を案内してください。配布セット(AI_GUIDE.md=このガイド・MeetingAutomation.gs・MeetingAutomation.txt・README.txt・targets.example.json・tests.cjs)も一緒に渡されている場合は、あわせて参照してください。MeetingAutomation.txt は MeetingAutomation.gs とまったく同じ内容のテキスト版で、.gs を開けるアプリがない人のためのもの。targets.example.json は複数行の見本で、名前は架空の例です。スクリプトプロパティには第3章 A8 の形(1行)で入れます。
- 版:キャリアド記事 配布版 1.0(ガイド更新 2026-10-14)
- 実機で確認済みの構成:tl;dv(文字起こし)→ Google Apps Script(GAS)→ Claude API → Notion(保存先)
- 実機確認の範囲:接続確認/文字起こし取得/Claude分析とNotion新規保存・読み直し照合/同じ面談の再実行でスキップ/15分トリガー/MODE=live で未保存の面談を一覧から検出して保存(2026-10-03)
- 目印方式(予定名の `[CA-xxxx]` が tl;dv の録画名に引き継がれ、対応表と一致させる方式):筆者は本番でこの方式を使って運用している(2026-10-14 筆者確認)。ただし、予定名が録画名に引き継がれるかは利用者の会議ツールやカレンダーの設定で変わるので、利用者の環境で A13 の「目印方式も試す」を必ず行う。
---
## 0. AIへの指示(最初に必ず読む)
1. 利用者はAIやプログラミングに慣れていない前提で、**一度に1ステップだけ**案内する。各ステップの最後に「画面に何が表示されたか」を聞いてから次へ進む。
2. APIキー・トークン・シークレットの**値をチャットに貼らせない**。値は利用者が自分でGASのスクリプトプロパティに入力する。利用者が貼ってしまったら、そのキーを削除して作り直すよう伝える。
3. 本番の顧客データは使わない。**テスト用のデータベースと架空の面談1件**で最後まで通してから本番に切り替える。
4. ID・モデル名など、利用者の環境にしかない値を**推測やサンプル値で埋めない**。取得方法を案内する。
5. ログインや権限の許可、キーの作成・削除、料金が発生する操作は、利用者本人に操作してもらう。
6. 画面の表記はサービス側の更新で変わることがある。このガイドの表記と違う場合は、利用者に画面の表示をそのまま教えてもらい、近い項目を探す。
7. 利用サービスを**最初に**確認する。「tl;dv+Notion」以外なら、第2章で道Bを選び、第5章を使う。配布コードをそのまま貼らせない。道Bでは設定値を変えるだけでは動かず、サービスに合わせて認証・一覧取得・文字起こし取得・保存先の照会と保存のコードを作り替える必要がある。
8. 手順は一度に一つずつ案内する。複数の操作(例:ZIPを展開→ファイルを開く→コピー→貼り付け→保存)を一度に並べて実行させない。
---
## 1. 何を作るか
面談が終わると、文字起こしが自動で取り込まれ、Claudeが決まった見出しでまとめ、顧客管理の「その求職者の面談記録」として1件保存される状態を作る。
仕組みは次の部品でできている。どのツールの組み合わせでも、この形は同じ。
| 部品 | 役割 | 配布版での実装 |
|---|---|---|
| ① 面談一覧を取る | 新しい面談を見つける | tl;dv API の面談一覧 |
| ② 文字起こしを取る | 面談1件の全文を取得する | tl;dv API の transcript |
| ③ Claudeでまとめる | 決まった見出しで要約する | Claude API(Messages API) |
| ④ 保存済みか確かめる | 同じ面談を二重に保存しない | Notion を面談IDで検索 |
| ⑤ 保存する | 求職者にひも付けて1件追加する | Notion にページを新規作成 |
| 受け皿 | ①〜⑤を15分ごとに動かす | GAS の時間主導型トリガー |
大事な設計ルール(どの組み合わせでも守る):
- **誰の面談かをAIに推測させない。** 対応表(`TARGETS_JSON`)で「面談の識別情報」と「求職者」を結ぶ。対応表にない面談は分析も保存もしない。
- **同じ面談を二重に保存しない。** 保存前に面談IDで検索し、あればスキップする。既存の記録は上書きしない。
- **保存結果が分からないときは止まる。** 通信が途切れて保存できたか不明な場合、再送せずに人が確認する(`MA_PENDING_`)。
- **途中で切れた要約は保存しない。** 生成が最後まで終わったか、見出しがそろっているかを確認してから保存する。
Claudeがまとめる見出し(配布版の指示文):
- 【候補者の状況】【面談のおさらい】【面談の質】【次回までにやること】【失注リスクスコア】
- 面談のおさらいは話題ごとに「■」の小見出し。次回までにやることは CA側・求職者側・日程 に分ける。
- 失注リスクスコアは**配布版では採点しない**(「採点基準未設定のため未採点」と書かれ、数値欄は空欄)。
- 出力は Markdown ではなく、【】と■を使ったプレーンテキスト。900〜1400字程度。
- 指示文の場所:MeetingAutomation.gs の `maProcess_` 内の `prompt`。まとめ方を変えたいときはここを編集する。
---
## 2. 最初に利用者へ聞くこと → 道を選ぶ
次の6点を聞く。
1. 面談の文字起こしに使っているサービス(tl;dv/Zoom/Google Meet/その他)と契約プラン。そのサービスのAPIを使えるか。
- tl;dv の場合、記事の筆者は Pro プランで API を使っている。
2. 求職者を管理している場所(Notion/Googleスプレッドシート/その他のCRM)。そこに外部から書き込める権限があるか。
3. Claude Console(console.anthropic.com)のアカウントがあるか、支払い設定(クレジット)が済んでいるか。**アカウントや支払い設定が済んでいると推測しない**。答えに応じて下の「Claude Console の準備」に進む。
4. GASを動かすGoogleアカウント(会社のGoogle Workspaceか個人か)。
5. 本番とは別に、テスト用の保存先と架空の求職者1人分を作れるか。
6. 架空の面談を1件録画できるか(同僚と5分ほど、架空の人物として話せば十分)。
### Claude Console の準備(未登録・未設定の場合)
利用者の答えで分ける。
- **アカウントがない**:Console を開くところから、アカウント登録、ログインまでを一度に一ステップずつ案内する。各ステップのあと、利用者が実際に見ている画面の表示を聞いてから次へ進む。
- **アカウントはあるが支払い設定がない**:支払い設定だけを案内する。
- **両方済んでいる**:A4(APIキーの作成)へ進む。
支払い設定の前に必ず伝えること:
- Claude API は、Claude のチャット(Pro など)の有料契約とは**別の従量課金**。チャットに課金していても、API は別に支払いが要る。
- 料金は使うモデルと文字数で決まる。金額を伝えるときは、Anthropic の公式料金ページで確認した値か、仮定を置いた概算かを区別して伝える。実際の利用額はテスト後に Console の利用状況で確認できる。
- 有料で使うことを理解して進めるか、利用者に**確認してから**支払い設定を案内する。
本人に操作してもらうこと:アカウント登録、ログイン、支払い情報の入力、購入の確定。**パスワード・認証コード・カード情報・APIキーの値はチャットに貼らせない**。
### 社内の取り扱いの確認
あわせて、求職者の会話を外部のAI(Claude API)へ送ることについて、社内の取り扱い(録音・文字起こしの告知や同意を含む)を確認してもらう。
道の選び方:
- **道A**:文字起こしが tl;dv、保存先が Notion → 第3章へ。配布コードをそのまま使える。
- **道B**:それ以外の組み合わせ(Google Meet・Zoom・スプレッドシート・他のCRMなど)→ 第5章へ。配布コードをそのまま貼らせない。利用者には「このガイドと配布セット一式をAIに渡し、自分の環境に合わせたコードの修正と手順の案内を頼む」流れであることを伝える。配布コードの①②④⑤に加え、設定の読み込み・接続確認・通信処理も作り替える(コードの半分以上)。③Claudeでまとめる部分と設計ルールはそのまま使える。作り替えた部分は筆者の検証対象外なので、架空の面談1件で一つずつ確かめながら進める。
- 道Bで文字起こしを選び直せる場合の目安:Google Workspace を使っているなら、Google Meet の文字起こし(ドライブにドキュメントで保存される)は外部の連携アプリが不要で、Zoom よりかなり作りやすい。Zoom は連携アプリの作成に管理者権限が要ることが多い。
---
## 3. 道A:tl;dv+Notion の手順
各ステップは「場所/操作/入れる値/成功の目安/失敗したとき」で書く。
### A1. テスト用の求職者台帳と、架空の求職者を作る
- 場所:Notion
- 操作:新しいデータベース「求職者台帳(テスト)」を作り、架空の求職者のページを1件作る(例:「山田テスト(架空)」)。本番の台帳は使わない。
- 控える値:**求職者ページID**。そのページを**全画面で開いた**ときのURLの、末尾の32桁の英数字(`-` の後ろ、`?` より前)。ハイフンはあってもなくてもよい。
- 注意:データベースの一覧から横に開く表示(サイドピーク)のURLは `?p=` などが付く。必ず「全画面で開く」にしてからURLをコピーする。ページの中に埋め込まれたデータベース(インライン)は、データベース名の右の「…」→「全画面表示で開く」などで単独で開いてからURLを取る。
### A2. 面談記録のデータベースを9列で作る
- 場所:Notion
- 操作:新しいデータベース「面談記録(テスト)」を作り、次の9列を**列名・種類とも一字一句そのまま**そろえる。表にない列が他にあっても動く。
| 列名 | 種類 | 補足 |
|---|---|---|
| タイトル | タイトル | 最初からある「名前」列の名前を「タイトル」に変える |
| Claude分析結果 | テキスト | 要約の全文が入る |
| TLDV_meetingId | テキスト | 重複防止に使う面談ID |
| 候補者 | リレーション | 接続先は A1 の求職者台帳 |
| 失注リスクスコア | 数値 | 配布版では空欄 |
| 担当CA | セレクト | 担当者名を選択肢に登録する(対応表の `ca` と同じ文字) |
| 面談回数 | 数値 | 対応表の `count`(分からなければ空欄) |
| 面談日 | 日付 | 録画日時から自動で入る |
| 面談種別 | セレクト | 選択肢「通常面談」「面接対策」を登録する(この2つだけに対応) |
- 成功の目安:9列がそろい、セレクトの選択肢が登録されている。
- 注意:リレーションを作ると、求職者台帳の側にも列が1つ増えることがある。だからテスト用の台帳を使う。
### A3. 架空の面談を1件録画する
- 場所:tl;dv
- 操作:tl;dv をいつもどおり使って、架空の人物として5分ほどの面談を1件録画する。録画後、tl;dv で文字起こしが表示されるまで待つ。
- 控える値:**テスト録画のID**(`TEST_MEETING_ID`)。その録画のページを開いたURLの末尾の英数字。`?` 以降や末尾の `/` は含めない。使える文字は英数字・`_`・`-` だけ。
- 注意:APIで取れるのは、そのAPIキーの持ち主がアクセスできる録画。画面で見える録画でもAPIで取れるとは限らない。
- 録画した日時を控えておく。あとで `POLL_FROM` をこれより前の日時にする(A13 で一覧に出すため)。
### A4. ClaudeのAPIキーとモデルを用意する
- 場所:Claude Console(console.anthropic.com)→ 設定 →「API Keys」
- 操作:キーを作成する。名前はテスト用と分かるもの(例:「記事テスト」)。範囲は**デフォルトのワークスペース**でよい(組織全体にする必要はない)。期限はテストなら短めでよい。
- 控える値:キー(作成直後に一度だけ表示される。チャットには貼らない)。
- モデル:`CLAUDE_MODEL` に入れるAPI ID。2026年10月の検証では `claude-sonnet-5-5`。最新の一覧は https://platform.claude.com/docs/en/about-claude/models/overview で確認する。値が正しいかは A9 の `checkConnections` で分かる。
- 注意:期限付きのキーは、切れると定期実行が「Claude HTTP 401」で止まる。本番用のキーは期限を確認し、切れる前に差し替える。支払い設定(クレジット)がないと分析は動かない。
### A5. Notionの接続を作り、アクセスを許可する
- 場所:notion.so/profile/integrations(Notionの「インテグレーション」「コネクト」「接続」はすべて同じもの)
- 操作:
1. 新しい接続を作る。種類は「内部」、ワークスペースは使うもの。名前はテスト用と分かるもの。
2. 機能(Capabilities):**コンテンツを読み取る=オン、コンテンツを挿入する=オン**。コンテンツを更新する・コメント=オフ。ユーザー情報=なし。
3. 「Content access」(アクセス)で、A1 の求職者台帳と A2 の面談記録の**2つ**を選んで保存する。データベースがページの中にある場合、一覧に出なければ親ページを選ぶ。
- 控える値:シークレット(トークン)= `NOTION_TOKEN`。
- 注意:会社のワークスペースでは、接続を作れるのがワークスペースのオーナーだけの場合がある。作れなければ管理者に依頼する。
### A6. tl;dvのAPIキーを用意する
- 場所:tl;dv の設定 →「連携/API」→「API」
- 操作:キーを作成する。業務で使っている既存のキーは消さない。
- 控える値:キー= `TLDV_API_KEY`。
### A7. GASのプロジェクトを作り、名前を変えてから、コードを貼る
ここは**一ステップずつ**案内する。各ステップのあとに画面の様子を聞いてから次へ進む。
**A7-1. プロジェクトを作る**
- 場所:script.google.com →「新しいプロジェクト」
- 先に、画面右上のアカウントが使いたいGoogleアカウントか確認する(複数ログインしていると別アカウントで作られることがある)。
- 成功の目安:「無題のプロジェクト」が開き、「コード.gs」に短い初期コード(`function myFunction() {` など)が入っている。
**A7-2. プロジェクトの名前を変える(コードを貼る前に必ず行う)**
- 左上の「無題のプロジェクト」をクリックし、テスト用と分かる名前(例:「面談自動化テスト」)に変えて「名前を変更」を押す。
- 成功の目安:左上の名前が変わっている。確認してから次へ進む。
**A7-3. 配布セットを展開し、テキスト版のコードを開く**
- ダウンロードしたZIP(meeting-automation.zip)をダブルクリックなどで展開する。
- 展開したフォルダの中の **MeetingAutomation.txt** を、テキストエディタ(Macは「テキストエディット」、Windowsは「メモ帳」など)で開く。
- MeetingAutomation.gs と MeetingAutomation.txt は中身がまったく同じ。.gs が開けない場合でも .txt なら開ける。
**A7-4. コードをコピーする**
- コピーするのは**ファイル名やフォルダではなく、ファイルの中に書かれたコード全部**。
- 開いたファイルの本文をクリックしてから、Mac は Command+A で全選択 → Command+C でコピー。Windows は Ctrl+A → Ctrl+C。
- 配布セットの5つのファイルを全部貼るのではない。貼るのはコード本体(MeetingAutomation.txt)1つの中身だけ。
**A7-5. GASに貼り付けて保存する**
- GAS の「コード.gs」のコード欄をクリックし、Mac は Command+A、Windows は Ctrl+A で初期コードを全選択する。
- そのまま Mac は Command+V、Windows は Ctrl+V で貼り付け、保存(💾、または Command+S/Ctrl+S)する。ファイルは「コード.gs」1つだけでよい。
- 成功の目安:保存でき、エディタ上部の関数の選択欄に `checkConnections` などが出る。
**キーはコードに書かない。** APIキーなどは、このあとの A8 で「プロジェクトの設定」の**スクリプトプロパティ**に利用者本人が入力し、「スクリプト プロパティを保存」を押す。コード本文には何も書き足さない。
### A8. スクリプトプロパティに10項目を入れる
- 場所:GAS 左の歯車「プロジェクトの設定」→ 一番下「スクリプト プロパティ」→「スクリプト プロパティを追加」(2回目以降は「編集」)→ 入力 →「スクリプト プロパティを保存」
- **保存ボタンを押すまで反映されない。** 押すと編集画面が閉じる。
| プロパティ | 値 | 形式のルール |
|---|---|---|
| `TLDV_API_KEY` | A6 のキー | 秘密 |
| `ANTHROPIC_API_KEY` | A4 のキー | 秘密 |
| `NOTION_TOKEN` | A5 のシークレット | 秘密 |
| `NOTION_DATA_SOURCE_ID` | 面談記録のデータソースID | A8-2 で取得。データベースのURLのIDとは別 |
| `CANDIDATE_DATA_SOURCE_ID` | 求職者台帳のデータソースID | A8-2 で取得 |
| `CLAUDE_MODEL` | 例:`claude-sonnet-5-5` | A4 で確認したAPI ID |
| `TEST_MEETING_ID` | A3 のテスト録画ID | 英数字・`_`・`-` のみ。本番でも設定は必須(形式チェックのため)。`checkConnections` はこの録画を取りに行くので、録画を消すと `checkConnections` だけ失敗する |
| `POLL_FROM` | 例:`2026-09-29T00:00:00+09:00` | **過去の日時**、タイムゾーン付き。未来だとエラー。テスト中は**テスト録画の日時より前**にする |
| `MODE` | `test` | 最初は `test`。本番で `live` |
| `TARGETS_JSON` | 対応表(下記) | 1行のJSON。1〜20件 |
データソースIDの2項目は、先に A8-2 で調べてから入れる(`NOTION_TOKEN` だけ先に保存しておく)。
`TARGETS_JSON` の書き方(テスト時。値は自分のものに置き換える):
```json
[{"meetingId":"テスト録画のID","candidatePageId":"求職者ページIDの32桁","name":"山田テスト(架空)","ca":"担当CAの選択肢と同じ文字","kind":"通常面談","count":1}]
```
| キー | 必須 | 内容 |
|---|---|---|
| `meetingId` | `marker` とどちらか | 録画ID。テストではこれを使う |
| `marker` | `meetingId` とどちらか | 予定名に入れる目印。形式は `[CA-英数字]`(例:`[CA-0001]`)。本番で使う(第4章)。1行に `meetingId` と `marker` の両方があると `meetingId` だけが使われる |
| `candidatePageId` | 必須 | 求職者ページID(32桁) |
| `name` | 必須 | 記録のタイトルと要約に使う表示名 |
| `ca` | 必須 | Notionの「担当CA」の選択肢と同じ文字 |
| `kind` | 必須 | 「通常面談」か「面接対策」 |
| `count` | 任意 | 何回目の面談か(正の整数)。分からなければ `null` |
注意:引用符は**半角の `"`**。日本語入力のまま打つと全角の「”」や全角スペースが混ざり、「TARGETS_JSON のJSON形式を確認してください」で止まる。
### A8-2. データソースIDを2つ調べる
方法1(Notionの画面):データベースの設定メニュー →「データソースを管理」→ 対象の「…」→「データソースIDをコピー」。
方法2(GAS):先に `NOTION_TOKEN` だけ保存しておき、次の関数を一時的にコードの末尾へ貼って、関数の選択欄で `showDataSourceIds` を選んで実行する。`dbId` には、データベースを**全画面で開いた**URLの32桁(`?v=` の後ろではない)を入れる。面談記録と求職者台帳で1回ずつ実行する。終わったら関数は消してよい。
```javascript
function showDataSourceIds() {
const token = PropertiesService.getScriptProperties().getProperty('NOTION_TOKEN');
const dbId = 'ここにデータベースのURLの32桁を入れる';
const res = UrlFetchApp.fetch('https://api.notion.com/v1/databases/' + dbId, {
headers: { 'Authorization': 'Bearer ' + token, 'Notion-Version': '2025-09-03' },
muteHttpExceptions: true
});
const body = JSON.parse(res.getContentText());
if (res.getResponseCode() !== 200) { console.log('エラー ' + res.getResponseCode() + ':IDか、接続のContent accessを確認'); return; }
body.data_sources.forEach(function (d) { console.log(d.name + ' : ' + d.id); });
}
```
この関数は Notion API の仕様に沿った短い補助関数で、筆者の検証環境では実行していない(IDは別の方法で取得した)。
成功の目安:実行ログに「データソース名 : ID」が出る。`:` の右側がデータソースID。
失敗したとき:404 は「IDが違う」か「接続にそのデータベースへのアクセスが許可されていない」。
### ログの見方(A9以降で使う)
- 手動で実行したとき:エディタ下部の「実行ログ」に出る。成功・SKIP・WAIT は通常の行、エラーは赤い行(例外)で出る。
- トリガーで動いたとき:左の「実行数」で該当行をクリックするとログが見られる。失敗するとGoogleから通知メールが届く(既定は毎日まとめて)。
- ログには本文やキーは出ない作りになっている。
### A9. 接続を確認する(checkConnections)
- 場所:GAS エディタ上部の関数の選択欄 → `checkConnections` → 「実行」
- 初回:「承認が必要です」が出る。利用者本人が「権限を確認」→ アカウントを選ぶ →「このアプリはGoogleで確認されていません」が出たら「詳細」→「(プロジェクト名)に移動」→「許可」。自分で作ったスクリプトなので表示されるもの。
- 成功の目安:実行ログに `PASS: モデル・Notion列・テスト面談へのアクセス`
- 失敗したとき:第7章の表を見る。書き込みはしないので、何度実行してもよい。
### A10. 文字起こしを取れるか確認する(readTestTranscript)
- 成功の目安:`PASS: 文字起こし取得 912文字(本文は非表示)` のように文字数が出る。
- `WAIT: 文字起こし準備中` なら、tl;dv で文字起こしが完成するまで待って再実行する。
- Claudeへの送信・Notionへの保存はしない。
### A11. 分析と保存を1件試す(runTestMeeting)
- **Claude API の料金が1件分かかる。**
- 成功の目安:`PASS: 取得 → Claude分析 → Notion新規保存・照合`
- Notionで確認すること:面談記録に1件増えた/本文に5つの見出しがある/「候補者」が架空の求職者/担当CA・面談種別・面談日が入っている/失注リスクスコアが空欄。
- 内容を変えたいとき:`maProcess_` の `prompt` を編集して、テスト用の記録を消してから再実行する。分析だけを試す関数はない。
### A12. もう一度実行して、二重保存されないことを確認する
- `runTestMeeting` を再実行する。
- 成功の目安:`SKIP: 保存済み。再分析・上書きなし`。記録は増えない。料金もかからない。
### A13. 本番モードを、テスト用の保存先で試す(推奨)
本番に切り替える前に、本番と同じ動き(一覧から未保存の面談を見つけて保存)をテスト用で確かめる。
1. テスト用の面談記録から、A11 で保存した1件をゴミ箱に移す(ゴミ箱に移すだけでよい。ゴミ箱を空にする・完全に削除する必要はない。ゴミ箱のページは検索対象にならないことを2026-10-03に確認)。この時点でトリガーは設定しないでおく(設定済みなら一時的に削除する)。途中でトリガーが動くと結果がずれる。
2. スクリプトプロパティの `MODE` を `live` にして保存する。
3. `runArticlePolling` を手動で実行する。
4. 成功の目安:`PASS: 取得 → Claude分析 → Notion新規保存・照合` と `完了: 定期取得の確認(新規処理対象 1件)`。
5. もう一度実行して `新規処理対象 0件` になれば、本番でも二重保存されない。
6. `新規処理対象 0件` が最初から出る場合:`POLL_FROM` がテスト録画の日時より後になっていないか、記録をゴミ箱に移したか、対応表の `meetingId` が合っているかを確認する。
7. 確認が終わったら `MODE` を `test` に戻して保存する(本番の切り替えは第4章でまとめて行う)。
目印方式も試す場合:tl;dv で録画する会議の予定名に `[CA-TEST1]` を入れて、架空の面談をもう1件録画する。tl;dv の録画名に `[CA-TEST1]` が残っているか確認する。対応表に `{"marker":"[CA-TEST1]","candidatePageId":"…","name":"…","ca":"…","kind":"通常面談","count":null}` を追加して `runArticlePolling` を実行し、新しい1件が保存されるか見る。録画名に目印が残らない場合、目印方式は使えない(第4章)。担当CAが複数いて tl;dv のアカウントが分かれている場合は、APIキーの持ち主から他のCAの録画が見えるかも、ここで確かめる(見えなければCAごとにGASを分けるなどの設計が必要)。
### A14. 15分ごとの自動実行を設定する
- 場所:GAS 左の時計「トリガー」→「トリガーを追加」
- 設定:実行する関数=`runArticlePolling`/デプロイ=Head/イベントのソース=時間主導型/種類=分ベースのタイマー/間隔=15分おき → 保存
- 成功の目安:左の「実行数」に種類「時間主導型」の実行が「完了」で並ぶ。保存済みの面談は毎回スキップされる(`MODE=test` なら `SKIP: 保存済み…`、`live` なら `新規処理対象 0件`)。
- 止めたいとき:このトリガーを削除する。
---
## 4. 本番に切り替える
### 手順
0. **トリガーを一時的に削除する。** 切り替えの途中で定期実行が動くと、設定が半分だけ変わった状態でエラー通知が届く。スクリプトプロパティの変更は、最後に1回の編集でまとめて保存する。
1. **保存先**:本番用の面談記録データベースを**新しく作るのがおすすめ**。既存のデータベースに A2 の9列を足すこともできるが、タイトル列の名前を「タイトル」に変える必要があり、そのデータベースを使っている他の仕組み(フィルタ・数式・連携)に影響することがある。既存の列に同じ名前で別の種類の列があれば、新しいデータベースにする。
2. **求職者台帳**:新しい面談記録の「候補者」列を、本番の求職者台帳へのリレーションとして作る(台帳側に列が増える場合がある。台帳の管理者に事前に伝える)。
3. **本番用の接続とキー**:テストで使った接続・キーは使い回さない。Notion で**本番用の接続を新しく作り**(A5 と同じ機能設定)、Content access に本番の面談記録と求職者台帳を追加する。Claude・tl;dv のキーも本番用に作り直す。名前は用途が分かるもの(例:「面談自動記録 本番」)、期限は社内ルールに合わせ、切れる日を控える。
4. **ID**:本番のデータソースIDを2つ調べる(A8-2)。
5. **対応表**:本番用の対応表を作る(下の「本番の対応表の作り方」)。**テスト用の行(テスト録画の `meetingId`、`[CA-TEST1]` など)はすべて外す**。残すと架空の面談が本番に保存されたり、テスト用の求職者を指してエラーが出続けたりする。
6. **スクリプトプロパティをまとめて更新して保存**:`TLDV_API_KEY`・`ANTHROPIC_API_KEY`・`NOTION_TOKEN`(本番用)、`NOTION_DATA_SOURCE_ID`・`CANDIDATE_DATA_SOURCE_ID`(本番)、`TARGETS_JSON`(本番)、`POLL_FROM`(取り込みを始めたい**過去の**日時。例:切り替える日の0時)、`MODE`=`live`。
7. **`checkConnections` を実行**して PASS を確認する(`TEST_MEETING_ID` のテスト録画を読むので、テスト用の tl;dv 録画は残しておく)。
8. **トリガーを再設定する**(A14)。
9. **最初の1件を確認**:「実行数」とNotionで、正しい求職者に保存されたか確認する。
10. **後片付け**:テスト用の Notion 接続・Claude と tl;dv のテスト用キーを削除する。本番が動いていることを確認してから行う。
### 本番の対応表の作り方
本番の面談は、終わるまで録画IDが存在しない。そのため本番では **目印(marker)方式**を使う。
- 求職者ごとに目印を決める(例:`[CA-0001]`)。
- 面談のカレンダー予定名に目印を入れる(例:`[CA-0001] 山田さん 初回面談`)。tl;dv の録画名に引き継がれることが前提。
- 対応表に `{"marker":"[CA-0001]","candidatePageId":"…","name":"山田さん","ca":"担当者名","kind":"通常面談","count":null}` を追加する。
- 同じ求職者で面談種別や担当CAが変わる場合は、別の目印を作る(例:面接対策用に `[CA-0001-M]`)。目印の形式は `[CA-英数字・_・-]`。
- 同じ目印を何度も使う場合、`count`(面談回数)は `null` にする(自動では数えない)。
- 予定名はカレンダーの招待で求職者にも見える場合がある。目印は求職者に見えても差し支えない文字にする(例:番号だけ)。
- 1つの録画名に2つ以上の目印が一致すると、その面談はエラーになり、毎回の実行が「一部の面談が保留です」で失敗扱いになる(通知メールも届く)。対応表か予定名を直すまで止まり続けるので、目印が他の目印を含まないようにする(例:`[CA-1]` と `[CA-10]` は別物として扱われるが、予定名に両方書かない)。
### 配布版でできること・できないこと
| 項目 | 配布版 |
|---|---|
| 面談後に要約が自動で保存される | できる(15分ごとに確認。文字起こし完成後の次の実行で保存) |
| 二重保存の防止・途中で切れた要約を保存しない | できる |
| 対応表の件数 | **最大20件**。21人目以降は、面談が終わった求職者の行を外して入れ替える(外した求職者の未処理の録画は処理されなくなる) |
| 新しい求職者の登録 | 対応表(スクリプトプロパティのJSON)を手で書き換える |
| 予定名への目印付け | CAが毎回手で入れる。付け忘れた面談は保存されない |
| 面談回数の自動カウント | できない(`count` は固定値か空欄) |
| 失注リスクスコアの採点 | できない(採点基準を自分で定義し、コードに追加が必要) |
| 1回の実行で処理する件数 | 最大3件・約3分。残りは次の実行に持ち越す |
| 長い面談 | 文字起こしが6万字を超えると止まる(切り捨てない) |
| 文字起こしが永久に空の録画(求職者が来なかった、無言など) | ずっと準備待ち(WAIT)になり、処理枠を使い続ける。`meetingId` 方式ならその行を外す。目印方式なら、tl;dv 側で録画名から目印を消すか録画を削除する(tl;dv の画面で可能か利用者に確認) |
| 処理が進まない面談 | 1回の実行で扱うのは3件まで。この3件には「準備待ち(WAIT)」と「失敗」も数えられる。準備待ちや失敗のままの面談が3件たまると、その後ろの面談に毎回たどり着けなくなる。ログで該当の面談を見つけ、原因を直すか対応表から一時的に外す |
| 大人数・多件数の運用 | 向いていない。予約台帳から対応を読み込む仕組みへの拡張が必要 |
配布版は「小規模で試すための入門版」。件数が多い場合や手作業を減らしたい場合は、予約台帳との連携など仕組みの拡張を検討する。
運用の決めごと(本番前に利用者と決めておく):
- 新しい求職者の行を対応表に足すのは誰か、いつか(例:初回面談の予定を入れたCAが、その日のうちに)。
- 予定名に目印を入れるのを誰が確認するか。
- 行を外すときは、その求職者の録画がすべて保存済みか(Notionに記録があるか)を確かめてから外す。
- 失敗の通知メールを誰が見るか。
---
## 5. 道B:別のツールに作り替える
進め方:利用者は、このガイドと配布セット一式(コードを含む)を自分のAIに渡し、環境に合わせたコードの修正と手順の案内を頼む。読んでいるAIは、以下に沿って作り替えたコードを示し、一ステップずつ案内する。
配布コードのうち、①面談一覧・②文字起こし・④保存済み確認・⑤保存 と、それに関わる設定を作り替える。③Claudeでまとめる部分と設計ルールはそのまま使う。**作り替えた部分は配布版の検証の対象外**なので、第5章の最後の確認を必ず行う。
### 作り替える関数と、守る約束
| 関数 | 役割 | 作り替え後に守ること |
|---|---|---|
| `maConfig_` | 設定の読み込みと検証 | 不要になったプロパティ(`TLDV_API_KEY`・`NOTION_TOKEN`・`NOTION_DATA_SOURCE_ID`・`CANDIDATE_DATA_SOURCE_ID`)をすべて外し、新しいサービスの設定に置き換える。`source`・`candidateSource` のUUID形式チェック(`maUuid_` を使う行)と、対応表の `candidatePageId` のUUIDチェックは、保存先のIDの形式に合わせて書き換える。`TEST_MEETING_ID` の正規表現も新しいIDの形式に合わせる |
| `runArticlePolling` の一覧取得 | ① 面談一覧 | `POLL_FROM` 以降の面談を、全ページ取得する。各面談を `{id, name, happenedAt}` の形にそろえて返す(`id`=一意の面談ID、`name`=予定名・会議名、`happenedAt`=開始日時のISO文字列) |
| `maMeeting_` | 面談1件の情報 | 上と同じ `{id, name, happenedAt}` を返す |
| `maTranscript_` | ② 文字起こし | 全文を「話者: 発言」の改行区切りの文字列で返す。まだ準備できていなければ空文字 `''` を返す(WAIT扱い) |
| `maExisting_` | ④ 保存済み確認 | 面談IDで保存先を検索し、あればその記録、なければ `null`。2件以上あればエラーで止める |
| `maSchema_` | 保存先の列確認 | 保存先の列(見出し)がそろっているか確認する |
| `maProcess_` の求職者確認 | 求職者の存在確認 | 対応表の求職者IDが保存先の求職者台帳に実在するか確認する |
| `maProcess_` の保存と照合 | ⑤ 保存 | 1件追加し、読み直して要約全文と求職者IDが一致するか確認する。`MA_PENDING_` の仕組みは残す |
| `maRequest_` | 通信 | 配布版は①応答を必ずJSONとして読む、②転送(リダイレクト)に従わない(`followRedirects:false`)、③送信は常にJSON、④202/404 を「準備中」とみなす、⑤エラー時のサービス名を notion/anthropic 以外すべて「tl;dv」と表示する。文字起こしファイル(VTTなどのテキスト)のダウンロード、転送されるダウンロードURL、フォーム形式のトークン取得には合わないので、テキスト用の取得関数とトークン取得関数を別に作る。404 が「まだない」か「存在しない」かはサービスごとに意味が違うので、永久に待ち続けないよう扱いを決める |
| `checkConnections` | 接続確認 | 新しい `maSchema_` と面談取得を呼ぶように直す |
| `tests.cjs` | 動作テスト | tl;dv と Notion の応答を前提にしているので、作り替えた部分には使えない。必要なら同じ考え方で作り直す |
面談IDは、配布版では英数字・`_`・`-` だけを許可している(`maConfig_` の `TEST_MEETING_ID` チェック、`maMeeting_`、`maExisting_` の3か所に同じ正規表現 `/^[A-Za-z0-9_-]+$/` がある)。新しいサービスのIDに `/`・`+`・`=` などが含まれる場合は、3か所とも直すか、IDを安全な形(例:SHA-256 などで変換した文字列)にそろえて使う。`MA_PENDING_`+面談ID はスクリプトプロパティの名前になるので、変換した形を使うと安全。
名前の付け替え:`MA_FIELDS`(保存先の列定義)と、重複確認に使う列名 `TLDV_meetingId` は、新しい保存先に合わせて変える。`readTestTranscript`・`runTestMeeting` も新しい取得関数を呼ぶように直す。
そのまま使う部分:`maProcess_` 内の `prompt` と Claude API の呼び出し(`maClaude_`、`/v1/messages`)、生成結果の確認(`stop_reason`・文字数・見出し)、`maGuard_` の同時実行防止、`MA_PENDING_`、`maMatch_` の対応表照合。
### よくある組み合わせの注意(使う前に各サービスの公式ドキュメントで確認する)
**Zoom(クラウド録画の文字起こし)**
- APIを使うには、Zoom Marketplace でアプリ(一般に Server-to-Server OAuth)を作る必要があり、**Zoomの管理者権限が要ることが多い**。
- 認証はAPIキー1つではなく、アカウントID・クライアントID・シークレットからアクセストークンを取得する方式。
- 録画一覧はユーザー単位で、1回に指定できる期間に上限がある。ページ送りの方式も tl;dv と異なる。「固定開始日から毎回すべて見直す」配布版の設計は、そのままでは使えない。
- 文字起こしは録画ファイルの一つ(VTT形式など)としてダウンロードする。タイムスタンプを除いて「話者: 発言」の形に整える。
- 会議名は `topic`、開始日時は `start_time`、IDは `uuid` などの項目を `{id, name, happenedAt}` に読み替える。
- 文字起こしは会議終了からしばらくして生成される。生成前は `''` を返して次の実行に回す。
- 一覧の取り方の作り替え例:毎回「直近の一定期間(例:過去7日。上限の範囲内)」だけを見る。このとき `POLL_FROM` は「これより前の面談は取り込まない」下限として残し、実際の開始日は「`POLL_FROM` と 7日前の遅いほう」にする。保存済みは面談IDでスキップされるので、期間を重ねても二重保存にはならない。CAが複数いる場合は、ユーザー一覧を取ってユーザーごとに繰り返す。
- 会議の `uuid` は `/` で始まる・`//` を含む場合、URLに入れるとき二重にエンコードが必要とされる。必ず公式ドキュメントで確認する。
- 目印方式を使う場合、目印は Zoom の会議名(`topic`)に入れる。カレンダーから会議を作る場合に予定名が会議名になるかは、利用者の環境で確認する。
- Zoom のクラウド録画は、自動削除の設定で消えることがある。`TEST_MEETING_ID` を必須にしたままにするなら、テスト録画が消えないよう設定を確認するか、必須チェックを外す。
**Google Meet(Meetの文字起こし機能)**
- 文字起こしは、主催者のGoogleドライブに Googleドキュメントとして保存される(Workspaceのエディションと管理設定による)。
- GAS の `DriveApp`/`DocumentApp` で、指定フォルダの新しいドキュメントを一覧・読み取りできる。外部APIキーは不要。
- 面談IDはドキュメントのファイルID、会議名はファイル名、日時は作成日時などで代用する。
**Googleスプレッドシート(保存先)**
- GAS 標準の `SpreadsheetApp` で書ける。外部APIキーは不要。
- 本番の求職者管理シートとは別のシート(またはファイル)を面談記録用にする。
- 対応表は、スクリプトプロパティのJSONではなく、スプレッドシートの「対応表」シート(目印・求職者ID・表示名・担当CA・面談種別)から読む形に変えると、件数の上限がなくなり、編集もしやすい。
- **求職者を一意に特定するID列が必要**。行番号は並べ替えで変わるので使えない。求職者シートに「求職者ID」列(例:`C0001`)がなければ、まず足す。対応表の `candidatePageId` は、この求職者IDに置き換える(名前も `candidateId` などに変えてよい)。求職者の存在確認は、このID列の検索で行う。
- 列の例:面談ID/求職者ID/表示名/面談日/担当CA/面談種別/面談回数/Claude分析結果/作成日時。
- 重複確認は「面談ID」列の検索。保存は `appendRow`、照合は追加した行を読み直す。
- `=`・`+`・`-` で始まる値は数式として解釈されることがある。面談IDなどの列は書式を「書式なしテキスト」にするか、値の先頭に `'` を付けて文字列として書き込む。
- Sheets への書き込みは GAS 内で完結するので、通信途切れで保存結果が不明になることはほぼない。それでも `MA_PENDING_` の仕組みは残しておいてよい。
- 担当CA・面談種別の選択肢チェック(配布版の `maSchema_` の一部)は、シートの入力規則で代用するか、対応表側の値チェックだけにする。
- 1セルの上限(5万文字)があるが、要約は最大2800字なので収まる。
**その他のCRM(保存先)**
- 外部から記録を追加できるAPIがあるか、求職者IDで正しい記録にひも付けられるか、APIキーの発行権限があるかを確認する。なければこの仕組みは使えない。
**受け皿を GAS 以外(Zapier・Make など)にする場合**
- 画面上で連携を組む。Webhook受信やClaude連携は有料プランの対象になることが多い。
- 設計ルール(対応表でひも付け、二重保存防止、途中で切れた要約を保存しない)は自分で組み込む必要がある。
### 作り替えたら確認すること
道Aと同じ順で、架空の面談1件で確認する:
1. 接続確認(保存先の列・求職者台帳・Claudeのモデル・面談の取得)
2. 文字起こしの取得(文字数だけをログに出す)
3. 分析と保存1件(保存後に読み直して一致すること)
4. 同じ面談の再実行でスキップされること
5. 一覧からの自動取得(本番モード相当)で、未保存の面談だけが処理されること
6. 定期実行
---
## 6. 料金とデータの扱い
- Claude API:処理する文字数とモデルで変わる。面談1件の要約にかかる額は小さい。テスト後に Claude Console の利用状況の画面で実額を確認し、月の面談件数から見積もる。生成後に保存で失敗すると、再実行で再び料金がかかることがある。
- tl;dv:APIが使える契約が必要(記事の筆者は Pro プラン)。
- GAS:無料枠の実行時間・通信回数の上限がある。
- データ:面談の会話は Claude API に送られる。録音・文字起こし・外部AIへの送信について、社内規程と求職者への説明を確認する。キーはコードやスクリーンショットに含めない。ログには本文やキーを出さない作りになっている。
---
## 7. 困ったとき(ログの文言 → 原因 → 直し方)
| ログの文言 | 原因 | 直し方 |
|---|---|---|
| `〇〇 が未設定です` | スクリプトプロパティが足りない | 名前の綴りと値を確認し、保存ボタンを押したか確認 |
| `保存先またはテスト面談IDの形式を確認してください` | データソースIDの形式、またはテスト録画IDに使えない文字 | A8-2 のIDか確認。録画IDは `?` 以降を除く |
| `POLL_FROM は過去の日時をタイムゾーン付きで設定してください` | 未来の日時、または `+09:00` がない | 例:`2026-09-29T00:00:00+09:00` |
| `TARGETS_JSON のJSON形式を確認してください` | 全角の引用符・カンマ、括弧の閉じ忘れ | 半角で打ち直す |
| `対応表の求職者・担当CA・面談種別・識別情報を確認してください` | ページIDが32桁でない、`kind` が2種類以外、`meetingId` も `marker` もない | 第3章 A8 の表どおりに直す |
| `Notionの列名・種類が一致しません: 〇〇` | 列名か種類が違う | A2 の表に合わせる(「名前」→「タイトル」の変更忘れが多い) |
| `候補者リレーションの接続先が一致しません` | リレーション先と `CANDIDATE_DATA_SOURCE_ID` が別の台帳 | リレーション先かIDを合わせる |
| `担当CA の選択肢を先にNotionで作成してください` | セレクトに選択肢がない/文字が違う | Notionで選択肢を追加し、対応表の `ca` と同じ文字にする |
| `Notion HTTP 401` / `404` | トークン違い、またはContent access未許可 | A5 をやり直す。求職者台帳へのアクセスがない場合もこの表示になる |
| `Notion HTTP 400`(保存時) | 保存内容がNotionに受け付けられなかった | 列・選択肢を確認。このとき `MA_PENDING_〇〇` が残るので、Notionに記録がないことを確かめてから削除して再実行(再分析の料金がかかる) |
| `Claude HTTP 401` / `404` | キー違い・期限切れ、モデルIDが違う | A4 を確認 |
| `Claude HTTP 400` | 支払い設定・クレジット不足のことが多い | Claude Console の請求設定を確認 |
| `tl;dv HTTP 401` / `403` / `404` | キー違い、契約でAPIが使えない、録画にアクセスできない | A6・A3 を確認 |
| `HTTP 429` / `5xx` | 利用制限・一時的な障害 | 次の実行を待つ。連打しない |
| `WAIT: 文字起こし準備中。次回取得` | 文字起こしが未完成 | 待つ。長く続くなら録画IDとアクセス権を確認 |
| `SKIP: 保存済み。再分析・上書きなし` | 正常(保存済み) | 何もしない |
| `SKIP: 対応表にない面談` | 対応表に一致しない | 対象にしたいなら対応表に追加 |
| `求職者ページの所属台帳または状態が不正` | 対応表の求職者ページIDが違う、別の台帳のページ、ゴミ箱のページ | A1 の手順でページIDを取り直す。`CANDIDATE_DATA_SOURCE_ID` の台帳のページか確認 |
| `求職者台帳へのアクセスを確認してください` | 接続に求職者台帳へのアクセスがない | A5 の Content access に求職者台帳を追加 |
| `面談種別 の選択肢を先にNotionで作成してください` | 「面談種別」に「通常面談」「面接対策」の選択肢がない | Notionで選択肢を追加 |
| `対応表は1〜20件で設定してください` | 対応表が空、または21件以上 | 件数を1〜20にする |
| `面談回数は正の整数、または null` | `count` が0・小数・文字列 | `1` などの整数か `null` にする |
| `MODE は test または live` | `MODE` の綴り違い・全角 | 半角小文字で `test` か `live` |
| `一つの面談が複数の対応情報に一致しています` | 対応表の2行以上が同じ面談に一致 | 重複した `meetingId`・含み合う `marker` を直す |
| `面談日時を確認できません` | tl;dv の面談情報に日時がない | 録画が正常に終わっているか確認。続くなら対応表から外す |
| `文字起こしの応答形式が未対応です` / `文字起こしの面談IDが一致しません` / `tl;dv一覧の応答形式を確認してください` / `応答形式を確認できません` / `Notion照会形式が不正` | サービス側の応答の形が想定と違う(API変更・障害) | 時間をおいて再実行。続くならAPIの仕様変更を疑う |
| `面談IDの形式不正` / `面談IDが不正です` | IDに使えない文字が入っている | `TEST_MEETING_ID`・`meetingId` から `?` 以降や記号を除く |
| `一覧がAPIの取得上限です…` / `一覧上限に達しました…` | `POLL_FROM` 以降の録画が多すぎる | `POLL_FROM` を最近の日時に変える |
| `通信に失敗。保存中ならNotionの作成有無を確認してください` | 通信が途切れた | 次の実行を待つ。保存中だった場合は次の行(MA_PENDING_)を参照 |
| `保存結果不明。Notionを確認してください` / `保存後の照合不一致。追加作成せずNotionを確認` | 保存の途中・直後で問題が起きた | Notionで `TLDV_meetingId` を検索し、記録の中身を確認。おかしければその記録をゴミ箱に移し、`MA_PENDING_〇〇` があれば削除して再実行 |
| `前回の保存結果が不明…MA_PENDING_…` | 前回の保存中に通信が途切れた | Notionで `TLDV_meetingId` を検索。記録がなければ、スクリプトプロパティの `MA_PENDING_〇〇` を削除して再実行。あれば削除だけでよい |
| `同じ面談IDが重複しています。自動処理を停止` | 同じ面談IDの記録が2件以上ある | Notionで重複を1件にする |
| `生成の長さ・見出し・完了状態を確認できず保存停止` | 要約が途中で切れた、見出しが欠けた | 再実行。続くなら `prompt` を確認 |
| `文字起こしが6万字を超えています` | 長すぎる面談 | 配布版では処理できない(分割の仕組みが必要) |
| `一部の面談が保留です。実行ログを確認してください` | 本番モードで一部の面談が失敗 | 同じログの `ERROR:` 行を見て、上の表で直す |
| `処理停止。設定とアクセス権を確認してください` | 想定外のエラー | プロパティの値 → Notionの列と選択肢 → 接続のアクセス許可 の順に確認 |
| `SKIP: 実行中` | 前の実行がまだ動いている | 待つ |
---
## 8. 参照
- tl;dv API:https://doc.tldv.io/index.html
- Notion API(データベース取得・データソース):https://developers.notion.com/reference/retrieve-a-database / https://developers.notion.com/reference/query-a-data-source (Notion-Version: 2025-09-03)
- Claude API(Messages):https://platform.claude.com/docs/en/api/messages
- Claude のモデル一覧:https://platform.claude.com/docs/en/about-claude/models/overview
- GAS のトリガー:https://developers.google.com/apps-script/guides/triggers/installable
- Claudeのチャット契約とAPI料金が別であることの説明:https://support.claude.com/en/articles/9876003-i-have-a-paid-claude-subscription-pro-max-team-or-enterprise-plans-why-do-i-have-to-pay-separately-to-use-the-claude-api-and-console
AIに渡す詳細資料はここまでです。
この記事のまとめ
最後に、この記事の内容を振り返っておきます。
この記事で紹介したのは、面談後の記録やメモを自動で残す仕組みです。 面談の会話を文字にして、AIがまとめて、自社で使っている顧客管理システムに記録する。この流れを一度つくっておけば、面談が終わるたびに一からメモを書いて転記する作業がなくなります。
記録がたまっていくと、次の面談の前に前回の内容をさっと思い出せたり、担当が替わってもスムーズに引き継げたりと、メモが楽になる以上の使い方ができるようになります。
やってみたいと思った方は、次の順番で進めてみてください。
- 人間用の記事を読んで、全体の流れをつかむ。 細かい用語や設定は、この段階で覚えなくて大丈夫です。
- AI用ガイドをコピーして、普段使っているAIに貼り付ける。 「自分の環境で何をすればいいか、一つずつ教えて」と聞けば、AIが順番に案内してくれます。
- まずは架空の面談1件で試す。 いきなり本番の求職者データで動かさず、テスト用の面談で最後まで動くことを確かめてから、本番に切り替えましょう。
使っているツールがtl;dvやNotionと違っても、仕組みの考え方は同じです。どこを置き換えればいいかは、AIと相談しながら決めていけます。
面談後のメモ書きにかけていた時間を、求職者への提案やフォローに使う。そんな働き方に近づくための第一歩として、ぜひ試してみてください!
設定や運用を、自分たちだけで進めるのが大変そうだと感じた方へ
ここまで読んで、「仕組みは分かったけど、自分で設定したり、動かなくなったときに対応したりするのは大変そう」と感じた方もいると思います。
そんな方は、弊社で開発している「キャリアドCRM」も選択肢に入れてみてください。利用には費用がかかりますが、導入時の設定や、運用中に困ったときの対応についてもご相談いただけます。
自社で仕組みを作るか、サポートを受けながら導入するか。社内の体制に合わせて検討してもらえたらと思います。