Claudeでコールセンターの応対記録を要約する — 通話文字起こしと個人情報の前処理
通話の文字起こしから、用件・対応内容・次アクションを記録欄の形で出す手順です。顧客名や電話番号を伏せる前処理スクリプト、指示文、要約で崩れやすい箇所の突き合わせまでを示します。
通話が終わったあとに残す応対記録(後処理)は、オペレーターの時間を意外なほど食います。通話の文字起こしが手元にあるなら、記録欄の下書きまではClaudeに任せられます。
ただし通話ログは、顧客の名前・電話番号・住所・カード番号が会話の中に散らばった状態で届きます。議事録のように「そのまま貼って要約」とはいきません。この手順は三つの原則で組みます。個人を特定する情報は渡す前に外す。出力は記録欄の形に固定する。要約は元の通話と突き合わせてから記録に転記する。
応対記録の要約は、会議の議事録と何が違うか
応対記録は、次に同じ顧客へ対応する人が読むための文書です。会議の議事録が「何が決まったか」を残すのに対し、応対記録は「顧客が何に困り、こちらが何を約束したか」を残します。
そのため記録欄は、議事録の「決定事項」より細かくなります。
| 記録欄 | 入れる内容 | 議事録との違い |
|---|---|---|
| 用件 | 入れる内容顧客が連絡してきた理由 | 議事録との違い議題に当たるが、顧客の言葉に近いまま残す |
| 事実関係 | 入れる内容発生日・商品・症状など | 議事録との違い議事録にはない欄 |
| 対応内容 | 入れる内容案内した手順・実施した処理 | 議事録との違い発言者は常にオペレーター |
| 約束事項 | 入れる内容期限つきで顧客に伝えた内容 | 議事録との違い決定事項より、顧客への約束かどうかが重要 |
| 次アクション | 入れる内容誰がいつ何をするか | 議事録との違い担当者が社内に限らず、顧客側の作業も入る |
| 未解決・要確認 | 入れる内容回答できなかった点 | 議事録との違い持ち越し論点に近い |
会議の文字起こしを要約する一般的な型はClaude議事録の実践プロンプトにまとめています。ここでは、通話ログ特有の前処理と記録欄の組み方に絞ります。
作業の流れ
通話ログから応対記録までの6段階
- 1
文字起こしをテキストで用意する
通話システムや文字起こしツールの出力を、話者ラベルつきの
.txtにします。 - 2
個人情報を置き換える
氏名・電話・メール・住所・カード番号を記号に変えます。対応表は手元に残します。
- 3
指示文をProjectに固定する
記録欄と禁止事項を保存し、通話ごとに貼る手間をなくします。
- 4
記号化した文字起こしを渡して要約させる
1通話を1回のやり取りにします。
- 5
オペレーターが元の通話と突き合わせる
数字・期限・約束事項を見比べます。
- 6
記録システムへ転記し、記号を戻す
名前を戻す作業はClaudeの外で行います。
渡す前に伏せる情報と、置き換えのスクリプト
通話ログに入りやすい個人情報は、名前だけではありません。次の表は、置き換えの対象と見落としやすい点の目安です。
| 対象 | 置き換えの例 | 見落としやすい点 |
|---|---|---|
| 顧客名 | 置き換えの例[顧客名1] | 見落としやすい点「山田様」「山田さん」など呼びかけの形で何度も出る |
| 電話番号 | 置き換えの例[電話1] | 見落としやすい点復唱の途中で数字を区切って読み上げた箇所 |
| メールアドレス | 置き換えの例[メール1] | 見落としやすい点文字起こしでは全角や空白が混ざる |
| 住所・郵便番号 | 置き換えの例[住所1] | 見落としやすい点番地まで言わなくても、マンション名で絞られる |
| カード番号・口座番号 | 置き換えの例[カード1] | 見落としやすい点通話中に読み上げさせない運用が先 |
| 注文番号・会員番号 | 置き換えの例そのまま残すか判断 | 見落としやすい点社内システムでしか意味を持たない番号は、残しても個人は特定されにくい |
置き換えは人の目だけに頼ると漏れます。形が決まっている情報は、スクリプトで機械的に処理するのが確実です。次のスクリプトは、電話・メール・郵便番号・カード番号を正規表現で、顧客名を名前リストで置き換え、元の値との対応表を別ファイルに書き出します。
import json
import re
import sys
from pathlib import Path
# 上から順に適用する。桁の長いものを先に置く
PATTERNS = [
("カード", re.compile(r"(?<!\d)(?:\d{4}[- ]?){3}\d{4}(?!\d)")),
("メール", re.compile(r"[A-Za-z0-9._+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+")),
("電話", re.compile(r"(?<!\d)0\d{1,4}-\d{1,4}-\d{4}(?!\d)|(?<!\d)0\d{9,10}(?!\d)")),
("郵便", re.compile(r"(?<![\d-])〒?\d{3}-\d{4}(?![\d-])")),
]
def mask(text, names):
table = {}
def apply(kind, pattern, src):
def repl(m):
key = m.group(0)
if key not in table:
n = sum(v.startswith(f"[{kind}") for v in table.values()) + 1
table[key] = f"[{kind}{n}]"
return table[key]
return pattern.sub(repl, src)
for kind, pattern in PATTERNS:
text = apply(kind, pattern, text)
for name in sorted(names, key=len, reverse=True):
text = apply("顧客名", re.compile(re.escape(name)), text)
return text, table
if __name__ == "__main__":
src, names_file = Path(sys.argv[1]), Path(sys.argv[2])
names = [n for n in names_file.read_text("utf-8").splitlines() if n]
masked, table = mask(src.read_text("utf-8"), names)
src.with_suffix(".masked.txt").write_text(masked, "utf-8")
src.with_suffix(".table.json").write_text(
json.dumps(table, ensure_ascii=False, indent=2), "utf-8")
print(f"置換 {len(table)} 種")名前リスト(names.txt)には、その通話の顧客名を1行ずつ書きます。姓だけの呼びかけも拾えるよう、「山田太郎」と「山田」を両方入れます。長い名前から先に置き換えるので、順序は気にしなくて構いません。
python3 mask_transcript.py call001.txt names.txt実行すると call001.masked.txt(Claudeに渡す側)と call001.table.json(対応表)ができます。架空の通話で試すと、次のように置き換わります。
(元)顧客: 山田太郎ですが、連絡先は090-1234-5678です。
(後)顧客: [顧客名1]ですが、連絡先は[電話1]です。対応表はClaudeに渡しません。記号を実名に戻すときだけ使います。
スクリプトで拾えないもの
このスクリプトは、形が決まっている情報と、リストに書いた名前しか置き換えません。次は残ります。
- 名前リストに入れ忘れた人名(家族の名前、別部署の担当者名)
- 「うちは渋谷駅の近くで」のような言葉による場所の説明
- 病名・事故の経緯など、内容そのものが個人につながる記述
- 先頭が0で始まる10〜11桁の数字は、注文番号でも電話番号として置き換わる
置き換え後のファイルは、必ず一度読み返します。「この記述の組み合わせで誰か分かるか」を見るのは、人の仕事です。
要配慮個人情報にあたる内容(病歴など)が通話に含まれる業種では、そもそも入力してよいかの判断が先です。考え方は要配慮個人情報をClaudeに入力してよいかで扱っています。
文字起こしの渡し方と、ファイルの上限
文字起こしはチャットに貼り付けても、ファイルで渡してもかまいません。サポート記事が挙げる対応形式には、TXT・CSV・DOCX・JSONなどの文書が入っています。音声ファイルは一覧にありません。通話の録音そのものではなく、テキスト化したものを渡します。
ファイルで渡すときの上限は、使う場所で変わります。
| 渡す場所 | ファイルサイズ | 数の上限 | 補足 |
|---|---|---|---|
| チャット | ファイルサイズ1ファイル500MB | 数の上限1チャットに20ファイル | 補足 |
| Projectのファイル | ファイルサイズ1ファイル30MB | 数の上限数の制限なし。ただし内容全体がコンテキストウィンドウに収まる範囲 | 補足テキスト抽出のみ(マルチモーダルPDFを除く) |
上限より先に決めたいのは、1回に何通話を渡すかです。
通話どうしの内容が記録欄に混ざらないよう、1通話ずつ別のチャットにする運用が扱いやすくなります。複数の通話を同じチャットに続けて渡すと、前の顧客の事実が次の記録に紛れていないか、毎回確かめる手間が増えます。
なお、非PDFの文書は、Claudeがテキストだけを抽出します。画像が埋め込まれたDOCXの図や、スクリーンショットで貼られた注文画面は読み取られません。顧客が画面を見ながら説明した内容は、文字起こしの文面にあるものが全てです。
記録欄の形に固定する指示文
出力の欄を毎回指定すると、書き忘れや表記ゆれが起きます。次の指示文は、前の表の記録欄をそのまま出力の見出しにしたものです。
あなたは、コールセンターの応対記録の下書きを作る補助です。
渡す文字起こしは個人情報を記号に置き換え済みで、
顧客は「顧客」、担当者は「オペレーター」と表記されています。
出力は次の6欄に分けます。
【用件】顧客が連絡してきた理由を1〜2文で
【事実関係】発生日・商品・症状など、通話で述べられた事実
【対応内容】オペレーターが案内・実施したこと
【約束事項】顧客に伝えた期限・回答時期。通話中の表現のまま
【次アクション】誰が・いつまでに・何をするか
【未解決・要確認】回答できなかった点、通話の中で食い違った点
守ること:
- 通話にないことを足さない。推測で補わない
- 金額・日付・数量・型番は、通話の表記のまま写す
- 記号([顧客名1]など)は、そのまま残す
- 該当する内容がない欄は「記載なし」と書く
- 顧客の感情の評価(怒っていた等)は書かず、発言の事実だけを書く最後の一文は、記録を後から読む人への配慮です。「怒っていた」という評価は、記録の読み手によって受け取り方が変わります。言葉をそのまま残すほうが、次の担当者が状況を自分で判断できます。顧客対応記録で事実と主張を欄で分ける考え方は、カスハラ対応記録をClaudeで整理する手順にも出てきます。
Projectに指示文を固定する
毎回この指示文を貼るのは手間で、貼り忘れも起きます。ClaudeのProjectsは、専用の指示とファイルを持てる作業スペースです。サポート記事によると、「Set project instructions」を押して指示を入れ、「Save instructions」で保存すれば、その指示はプロジェクト内のすべてのチャットで使われます。
この用途に関係するProjectsの仕様は次のとおりです。
- 無料アカウントを含む全ユーザーが使える。無料アカウントのProjectsは最大5つ
- Projectのナレッジが長くなると、有料プラン(Pro・Max・Team・Enterprise)ではコンテキストの上限に近づいた時点で自動的にRAGモードに切り替わり、容量が最大10倍に広がる
- Projectの中でも、チャットどうしで内容は共有されない。共有したい情報はナレッジに入れる
- TeamとEnterpriseのプランでは、Projectを組織内で共有できる。権限は「Can view」と「Can edit」
最後の共有の仕様は、窓口の記録様式をそろえる場面で効きます。指示文を管理者が1つ作り、オペレーターには「Can view」を渡せば、全員が同じ欄立てで下書きを出せます。「Can edit」を持つ人は指示を書き換えられるため、様式を守りたいなら編集権限は管理者に絞るほうが崩れません。
Projectにナレッジとして過去の記録を大量に入れる使い方もできますが、顧客の情報を含む記録を置く範囲は、Projectの共有範囲と一致します。共有先の人数を先に確かめます。
出力の形と、記録に転記する前の手直し
ここまでを通すと、出力は次のような形になります。以下は架空の通話にもとづく、指示文どおりに動いた場合の形の目安です。
【用件】先週届いた商品が壊れていた。交換を希望している
【事実関係】受取日は先週。商品は破損した状態で届いた。型番の言及なし
【対応内容】オペレーターが謝罪し、交換の手続きを案内した
【約束事項】交換品の発送は「3営業日以内」と伝えた
【次アクション】オペレーターが交換手配を行う。顧客側は破損品の写真を送る
【未解決・要確認】破損品の返送方法について、通話内で案内がなかったこのまま記録システムに貼ってはいけません。応対記録は、顧客に何を約束したかの証拠になる文書です。下書きは「記録の叩き台」で、確定させるのはオペレーターです。
要約で壊れやすい箇所と、突き合わせの順番
要約は情報を減らす作業で、減らす過程で記録に必要な箇所が落ちたり、変わったりします。
落とし穴
期限の数え方と数字が、要約で変わる
通話中に「来週の水曜までに」と言っていても、要約が「3営業日以内」と書き換えると、顧客との約束が記録上は別のものになります。数字と期限は、元の表現のまま写すよう指示文に入れておきます。それでも、約束事項欄は必ず通話と見比べます。
ほかにも、要約で崩れやすい箇所があります。
- 話者の取り違え。文字起こしの話者ラベルが誤っていると、顧客の発言がオペレーターの対応として記録される
- 聞き取りの誤り。商品名・型番・地名の誤変換は、要約の過程で整合した別の言葉に直されることがある
- 保留や転送。保留中の無音や転送後の会話が文字起こしから抜けていると、対応の経過が途切れる
突き合わせの順番は次のとおりです。
- 約束事項の期限・金額・数量が通話どおりか
- 次アクションの担当が、通話で決まった側になっているか
- 事実関係の欄に、オペレーターの推測が混ざっていないか
- 「未解決・要確認」の指摘に、オペレーターが答えを補う必要があるか
Claudeに「要約に含めなかった発言」を一覧で出させる方法もあります。次の1行を指示文に足します。
要約に含めなかった発言を、文字起こしの行番号つきで最後に列挙する一覧は、見落としを探す手がかりになります。完全な保証にはならないので、記録の確認を省く理由にはなりません。
使えない場面と、先に決めておくこと
次のような場面では、この手順の前に社内の決めごとが要ります。
- 通話の文字起こしを外部のAIサービスに入力してよいか、会社の方針が決まっていない
- 通話の相手に、記録や分析に使う旨を伝える運用になっていない
- 顧客の病歴・信用情報など、内容そのものが機微な通話が中心である
方針が決まっていない間は、実在の通話でなく、架空のやり取りで指示文を練習するところで止めます。
文字起こしの記録欄づくりと個人情報の伏せ字は、この記事で扱いました。応対の質そのものを採点する運用は、Claudeで応対品質を採点するにあります。申し送りのように、事実と所見を欄で分けて残す手順は、介護記録の日次メモを要約する手順と型が近いので、欄の設計の参考になります。