Workflow templates

解析ルールを使わずに、メール送信者の詳細情報をJSONおよびスプレッドシートの行として抽出する

Saiが受信メールを読み取り、送信者名、メールアドレス、会社名、ドメイン、件名、目的、および記載されている電話番号や予算を抽出します。その後、メール1通につき1行を追加し、最後の列にJSON形式のコピーを保存します。記録された実行結果では、119件のメッセージをスキャンし、111件を分類、そのうち条件に合致した23件をログに記録しました。

92
% success · 
320
 runs
No items found.
The template
Copy prompt
[Gmailラベル: Inbound]にある新しいメールを取得し、送信者名、メールアドレス、会社名、ドメイン、件名、目的、および記載されている電話番号や予算を構造化されたフィールドとして抽出してください。ラベルがなく、代わりにカテゴリを説明した場合は、件名や送信者のキーワード検索に頼らず、受信トレイの最近のメッセージをスキャンして各メッセージをカテゴリに照らして分類してください。スキャン数、分類数、条件合致数を報告してください。各フィールドにはメールに記載されている内容のみを抽出し、推測で埋めず、不明な場合は空欄にしてください。特に以下の点に注意してください。 - 会社名:人名からではなく、署名または送信元ドメインから取得すること - ドメイン:gmail.comやoutlook.comなどのフリーメールプロバイダーを除いた送信元ドメイン - 予算と電話番号:明示的に記載されている場合のみ抽出すること。範囲や通貨の変換は行わないこと - 目的:短い固定セットに分類し、実行ごとに同じラベルを使用すること。すでにログに記録されているものはスキップしてください。件名や送信者ではなく、GmailのメッセージIDに基づいて重複排除を行ってください(スレッドや同じ送信者からのメールで誤判定が発生するため)。メール1通につき1行を[このGoogleスプレッドシート]に追加し、最後の列にJSONコピーを保持してください。後続の処理で解析できるよう、すべての行で同じキーと順序を使用してください。値が欠落している場合は空文字やキーの省略ではなく、nullを使用してください。行が追加された場所(タブ名と行範囲)と、実行前後のログ件数を報告してください。除外した項目とその理由をグループ化してリストアップし、分類を確認できるようにしてください。これが有用であれば、[1時間]おきに実行可能です。

See it run

The recording is a real session. The sheet on the right is what it produced.

解析ルールを使わずに、メール送信者の詳細情報をJSONおよびスプレッドシートの行として抽出する
mp4

The run

Sai opens each profile, pulls the signal, and writes the row, live, in a real browser.

解析ルールを使わずに、メール送信者の詳細情報をJSONおよびスプレッドシートの行として抽出する

The result

Eight columns, sorted by score, with a source link behind every claim.

Details

What you need

Gmailへのアクセス権と対象のGoogleスプレッドシートが必要です。Gmailラベル、またはカテゴリの平易な説明のいずれかをご用意ください。

What you get back

送信者名、メールアドレス、会社名、ドメイン、件名、目的、および記載された電話番号や予算を含むメール1通につき1行のデータと、一貫したキーを持つJSONコピーが最後の列に作成されます。タブ名、行範囲、実行前後のログ件数が報告され、除外された項目とその理由も併せて提示されます。

How long it takes

Make it recurring

アクティブな受信メールには1時間ごとの実行が適しています。即時対応が不要な場合は、1日1回で十分です。

メールデータ抽出とは何ですか?

メールデータ抽出とは、受信メールの内容(送信者、組織、依頼内容、本文中の数値や日付など)を、他のシステムが読み取れる名前付きフィールドに変換するプロセスです。

メールは、ヘッダーセットと本文の2つの部分で構成されます。ヘッダーは標準化されており、RFC 5322で定義されています。 From フィールドはメッセージの作成者を示し、 Reply-To は作成者が返信先として指定したアドレスです。これらは異なる場合があり、その際は運用上、返信先アドレスが重要となります。ヘッダーにはメッセージ識別子、日付、件名も含まれます。

本文は標準化されていません。署名ブロック内の送信者名、所属企業、依頼の規模、言及された期限などは、送信者が選んだ形式で文章の中に現れます。定義された位置からこれらを読み取るパーサーは存在しません。

この分割構造こそが、メール抽出とフォーム送信の解析が異なる理由です。情報の半分は固定されたスキーマにありますが、残りの半分は自由記述であり、次に何が起こるかを決定するのは通常、この非構造化された半分の方です。

受信メールの自動化が難しい理由

お問い合わせフォームは、フォーム側でフィールドが定義されているため、毎回同じ形式でデータが生成されます。一方、受信メールは送信者が書いた通りの形式で生成されます。

同じ内容の問い合わせであっても、署名ブロック付きの3行のメモとして届くこともあれば、予算が文中に記載された8段落のメッセージとして届くこともあります。どちらも同じ運用上の事実を含んでいますが、それらが同じ場所に記載されているわけではありません。

一般的な回避策には、それぞれ欠点があります。転送ルールはメールを移動させるだけで、内容は読み取りません。正規表現は電話番号を確実に抽出できますが、会社名の抽出は不確実です。ZapierのEmail Parserはサンプルメールに基づいたテンプレート作成が必要であり、レイアウトが固定された機械生成メールには有効ですが、人間が自由に書いた文章には対応できません。

その結果、実務上は受信メールを手作業でCRMやスプレッドシートに入力することになり、入力される項目も担当者が時間を割けた範囲のものに限られてしまいます。

対象となる方

インバウンドの問い合わせに対応する営業チーム。 リードは誰かが手入力するまでCRMではなく受信トレイに留まり、企業名、従業員数、予算、検討時期といったリードの質を判断するための詳細情報はメール本文の中に埋もれたままになります。

サポートおよびオペレーションデスク。 メールで届くリクエストは、ルーティングを行う前に、カテゴリ、依頼者、アカウント参照情報を特定する必要があります。

直接応募を受け付ける採用担当者。 候補者名、希望職種、現在の勤務先が、本文の文章と添付ファイルという形で届きます。

受信トレイの内容をスプレッドシートで管理しているすべての方。 転記作業そのものが業務のすべてとなってしまっています。

手法の比較

Method Reads header fields Reads unstructured body Setup required Survives format changes
Manual re-keying Yes Yes None Yes
Mail filters and forwarding rules Yes No Low Yes
Template parser (Zapier Email Parser, Mailparser) Yes Partly Template per sender format No
Regular expressions Yes Partly Code, per field No
Gmail API script Yes No OAuth, code, hosting Yes
This task Yes Yes Field list, written in plain language Yes

手作業による再入力は、すべての情報を正確に読み取ることができます。この表の中で唯一それが可能な手法であり、その理由から最初に記載しています。この手法の制約は精度ではなく、処理能力にあります。

このタスクの機能

Saiはユーザーの代わりにGmailを開き、指定されたメッセージを読み取って、指定したフィールドを含むJSON形式で返します。

フィールドリストは設定を行うのではなく、自然言語で記述します。送信者名、会社名、メールアドレス、リクエストタイプ、予算、期限を求めれば、その6つのキーが返されます。特定のフィールドが存在しないメールの場合でも、キーを省略せずにnullとして返すため、バッチ処理全体で出力形式が一定に保たれます。

ヘッダーフィールドはメッセージヘッダーから取得され、本文フィールドは文章から読み取られます。テンプレートを作成したり、学習用のサンプルメールを用意したりする必要はありません。

どの識別子をキーにするか

メールから抽出されたJSONは通常他のシステムに書き込まれるため、重複の管理が重要になります。Gmail APIには2つの識別子が用意されていますが、これらは互換性がありません。

id は、メッセージ(特定のメール1通)の不変のIDとして定義されています。 threadId は、そのメッセージが属するスレッド(会話)のIDであり、返信を含めたすべてのメッセージで共有されます。

スレッドをキーにすると、返信のたびに既存のレコードが更新されます。一方、メッセージをキーにすると、返信ごとに新しいレコードが作成されます。どちらが適切かは、業務の単位が「会話」なのか「個別のメッセージ」なのかによって決まります。この違いを理解せずに選択すると、意図しない上書きやリードの重複が発生する原因となります。

フィールドの選択

出力の有用性はフィールドリストの内容次第ですが、よくある失敗は必要以上に多くの項目を要求してしまうことです。

メールに確実に含まれるフィールドは値が埋まりますが、通常は存在しないフィールドを要求すると、ほとんどのバッチでnullが返されることになり、情報量が増えないままキーだけが増加してしまいます。

送信者、送信元、用件、および記載された数値や日付といった最小限のリストがあれば、ルーティングや適格性の判断のほとんどをカバーできます。フィールドは、最初のバッチで実際のメール内容を確認してから追加すれば十分です。

連携先について

インバウンド処理ではなく、スケジュールされたアウトバウンド処理を行う場合は、 Gmailでのメール予約送信 が送信側を処理します。

抽出されたレコードがシートに反映され、そこに企業データを追加する必要がある場合、 リードリストのエンリッチメント がその後の工程を担います。

メールの内容よりも、どのメールに返信すべきかが重要となる受信トレイでは、 メール管理 がトリアージを行います。

未整理の受信トレイをリスト化する

Free your hands from the computer.

このタスクを実行する