NEWS 最新情報

  1. TOP
  2. 最新情報
  3. WP tips
  4. 【ChatGPT API × WordPress】AIを使って問い合わせ品質をスコアリング

【ChatGPT API × WordPress】AIを使って問い合わせ品質をスコアリング

この記事のAI要約

WordPressの問い合わせフォームに届く営業メールの管理者通知をAIで自動制御する仕組みをさらに進化させ、単なる営業メール判定から問い合わせの有効度をスコアリングする方法を紹介します。これにより、営業目的だけでなく見積もり依頼や保守連絡など、多様な問い合わせの質や対応優先度を数値化でき、管理やCRM連携、マーケティング分析に活用可能です。具体的には、AI判定結果をGravity Formsの管理用フィールドに保存し、通知メールの送信を条件分岐で制御。これにより管理者の対応効率が向上し、問い合わせの質に応じた対応判断ができるようになります。問い合わせの質を客観的に評価したいサイト運営者に有用な手法です。

gpt-4.1-miniによる自動要約

以前、問い合わせフォームに届く営業メールをAIで自動判定し、管理者通知のノイズを減らす仕組みを紹介しました。

前回の記事では、OpenAI APIを使って問い合わせ本文を判定し、営業目的と判断されたものは管理者宛メールを送信しない、という仕組みを実装しました。
フォーム送信自体は止めず、データベースには保存しつつ、管理者への通知だけを制御する構成です。
前回記事でも、営業メールの自動判定、スコアリング、トーンや緊急度の判定、CRM連携の可能性について触れています。

この仕組みは、営業メール対策としてはかなり有効でした。
ただ、実際に運用していく中で、もう少し発展させたいポイントが出てきました。

それは、単に
「営業メールかどうか?」
を判定するのではなく、
「この問い合わせは、どれくらい有効な問い合わせなのか?」
を見たい、ということです。

そこで今回は、問い合わせフォームのAI判定を改良し、営業メール判定ではなく問い合わせ品質のスコアリングとして扱うようにしました。

前回のAI判定から今回の改良へ

前回のAI判定でできていたこと

以前の記事では、問い合わせフォームに届く営業メールをAIで判定する仕組みを作りました。

それまでにも、メールアドレスのドメインや特定キーワードでブロックする方法は実装していました。
しかし、フォーム営業の文面は年々巧妙になっており、単純なキーワード判定では限界があります。

たとえば、以下のような問題があります。

  • 営業メールなのに丁寧な問い合わせ文に見える
  • 「協業」「ご提案」「情報交換」など曖昧な表現が多い
  • キーワードでブロックすると、本来の問い合わせまで巻き込む可能性がある
  • 営業メールかどうかの判断に毎回時間を取られる

そこで前回は、問い合わせ本文をAIに読ませ、

  • 営業目的かどうか
  • 問い合わせ種別
  • トーン
  • 緊急度
  • 判定理由

を返すようにしました。

そして、営業目的と判断したものは管理者に通知しない。
ただし、フォーム送信自体は止めず、エントリーとしては保存する。

この構成にすることで、ユーザー側の送信体験は変えずに、管理者側のノイズだけを減らすことができました。

「営業かどうか」だけでは足りなくなった

前回の仕組みでは、主な目的は フォーム営業を減らすこと でした。

つまり、AIに判定させていたのは大きく言えば、
「これは営業メールか?」
という問いです。

しかし、運用していくうちに、この考え方だけでは少しもったいないと感じるようになりました。

問い合わせフォームには、営業メールだけでなく、さまざまな問い合わせが届きます。

  • 具体的な見積り依頼
  • ざっくりした相談
  • 既存顧客からの連絡
  • 保守や不具合の相談
  • 採用や協業に関する問い合わせ
  • 営業メール
  • ほぼスパムに近い内容

これらを単に、
営業か / 営業ではないか
だけで分けると、情報量が少なくなります。

本当に見たいのは、むしろこちらです。
この問い合わせは、どれくらい対応優先度が高いのか
あるいは、
この問い合わせは、どれくらい事業上の価値がありそうか
です。

そこで、今回の改良では、AI判定の目的を変えました。

問い合わせ品質をスコアリングする設計

今回の改良方針

今回の改良方針は、以下です。

旧:
営業目的かどうかを判定する

新:
有効な問い合わせかどうかをスコアリングする

つまり、前回は「営業度」が高いほどスコアが高い設計でした。
今回は逆に、問い合わせとして有効であるほどスコアが高い 設計にしています。

考え方としては、以下のようなイメージです。

0点    営業目的・通知不要
30点   しきい値。下回ったら管理者通知なし
50点   通常の問い合わせだが、温度感はそこまで高くない
80点   具体性があり、優先的に対応したい問い合わせ
100点  非常に温度感の高い問い合わせ

ここで重要なのは、単に営業メールを弾くためだけの仕組みではなくなったことです。

営業メールを減らすのはもちろんですが、それだけではなく、

  • 問い合わせの質を見る
  • 対応優先度を判断する
  • CRM連携時のリード評価に使う
  • 後からマーケティング分析に使う

という用途にも広げられるようにしました。

スコアの考え方を反転させた

前回の仕組みでは、スコアが高いほど営業目的の可能性が高い、という設計でした。

たとえば、

score: 85
type: vendor

なら、営業メールとして扱い、管理者通知を止める、という考え方です。
前回記事でも、営業スコア80以上の場合は管理者通知メールを送らないという運用例を紹介しています。

今回の改良では、この考え方を反転させました。

スコアが高い
= 有効な問い合わせ

という設計です。

この方が、後からCRMやアクセス解析に連携しやすくなります。

たとえば、問い合わせがあったときに、

スコア 20:営業メール
スコア 45:低温の問い合わせ
スコア 70:通常の有効問い合わせ
スコア 90:ホットリード

のように扱えます。

このスコアを管理者通知、CRM連携、GA4イベントなどに使えば、単なる「問い合わせ件数」ではなく、問い合わせの質 まで見られるようになります。

Gravity Formsでの実装方針

フォーム側の設計

今回の実装では、Gravity Formsを使っています。

前回の実装では、フォームプラグインのメール送信フローの途中にAI判定を挟む形でした。
今回は、Gravity Forms側の仕組みに合わせて、少し設計を変えています。

ポイントは、AI判定結果をフォーム内部の管理用フィールドに保存することです。
保存する項目は、たとえば以下です。

  • AIスコア
  • 問い合わせ種別
  • 通知判定
  • トーン
  • 緊急度
  • 判定理由
  • エラー内容

これらはユーザーに見せる必要はありません。
そのため、Gravity Formsの Admin onlyフィールド を使いました。

Admin onlyフィールドは、フロント画面には出力されず、管理画面や通知メール、Webhook連携などで利用できるフィールドです。

hiddenフィールドでも似たようなことはできますが、hiddenフィールドはHTML上には出力されます。
ユーザーから値を確認・改変できてしまうため、今回のような内部処理用の値にはAdmin onlyフィールドの方が向いています。

AI判定のタイミング

今回の実装で重要だったのは、AI判定のタイミングです。
管理者通知を制御したい場合、メール送信後に判定しても意味がありません。

フォーム送信
↓
管理者メール送信
↓
AI判定

この順番では、営業メールがすでに管理者へ届いてしまいます。
そのため、AI判定は 通知メールが送られる前 に行う必要があります。

今回の構成では、

フォーム送信
↓
AI判定
↓
判定結果をAdmin onlyフィールドに保存
↓
管理者通知の条件分岐
↓
Webhook連携
↓
完了ページ

という流れにしました。

実装では、gform_pre_submission を使って送信前に判定を行い、スコアや通知判定をAdmin onlyフィールドへ書き込む構成にしました。
実際のAPI呼び出しやプロンプト部分は省略しますが、流れとしては以下のようなイメージです。

/**
 * 送信前にAI判定して、管理用フィールドへ保存する
 */
if ( ! function_exists( 'my_form_ai_pre_submission' ) )
{
	function my_form_ai_pre_submission( $form )
	{
		$values = array(
			'company' => (string) rgpost( 'input_1' ),
			'name'    => trim( rgpost( 'input_2' ) . ' ' . rgpost( 'input_3' ) ),
			'email'   => (string) rgpost( 'input_4' ),
			'type'    => (string) rgpost( 'input_5' ),
			'detail'  => (string) rgpost( 'input_6' ),
		);

		$result = my_ai_judge_contact_quality( $values );

		if ( is_wp_error( $result ) )
		{
			$result = array(
				'score'              => 50,
				'lead_type'          => 'other',
				'notification_level' => 'notify',
				'reason'             => 'AI判定に失敗したため、通知対象として扱いました。',
			);
		}

		// Admin onlyフィールドへ保存
		$_POST['input_11'] = (string) $result['lead_type'];
		$_POST['input_12'] = (string) $result['score'];
		$_POST['input_13'] = (string) $result['notification_level'];
		$_POST['input_16'] = (string) $result['reason'];
	}
}
add_action( 'gform_pre_submission', 'my_form_ai_pre_submission' );

この設計にしたことで、Gravity Formsの標準機能である通知メールのConditional Logicを利用できます。

つまり、PHP側で無理にメール送信を止めるのではなく、Gravity Formsの通知設定で、

通知判定が notify の場合だけ管理者通知を送る

という形にできます。
これは運用上かなり扱いやすいです。

管理者通知の制御

今回の判定では、AIに notify または suppress の通知判定を返させています。

notify    管理者に通知する
suppress  管理者に通知しない

目安としては、

30点未満は suppress
30点以上は notify

というルールです。
もちろん、このしきい値は運用しながら調整できます。

Conditional Logic
Gravity Formsの通知制御設定画面

実際の運用では、営業メールを完全に遮断するよりも、まずは安全側に倒す方が重要です。
AI判定で一番避けたいのは、本来対応すべき問い合わせを誤って握りつぶしてしまうことです。

そのため、AI判定に失敗した場合は、

スコア:50
通知判定:notify

として扱うようにしています。

つまり、AI側でエラーが起きても、管理者通知は送られます。
この設計にしておけば、AI障害やAPIエラーが起きた場合でも、問い合わせを失うことはありません。

CRM・GA4への展開

CRM連携への応用

今回の改良では、AI判定結果をGravity Forms内の管理用フィールドに保存しています。
そのため、WebhookでCRMへ連携する場合にも、このスコアを一緒に送ることができます。

たとえば、CRM側にも以下のような項目を用意しておくと、問い合わせの優先度を後から確認しやすくなります。

問い合わせスコア
問い合わせ種別
通知判定
緊急度
判定理由

これにより、CRM上でも問い合わせの優先度を見られます。

また、CRM側でリードスコアを管理している場合は、この問い合わせスコアを初期スコアや加点要素として利用する方法も考えられます。

GA4計測への応用

今回の改良で一番大きいのは、問い合わせにスコアが付くようになったことです。
これは、次の段階でGA4のコンバージョン計測にも応用できます。

弊社では通常、フォーム送信をGA4で計測する場合、

generate_lead

というイベントを送信し、GA4側でキーイベントとして計測しています。
ただし、これだけでは問い合わせの件数しか分かりません。

たとえば、同じ10件の問い合わせでも、

・営業メールが多い10件
・ホットリードが多い10件

では価値がまったく違います。

そこで、今回作成した問い合わせスコアをGA4のイベントパラメータとして送ることで、CV数だけでなく、CVの質も見ることができるようになります。
次回の記事では、このスコアをGTM経由でGA4に送る具体的な方法をまとめる予定です。

実際の判定例と運用上の注意

実際にテストしたところ、かなり意図に近い判定ができました。

有効問い合わせの判定例

たとえば、具体的なWebサイト制作の見積り依頼では、以下のような判定になりました。

スコア:90
種別:hot
通知判定:notify
トーン:positive
緊急度:medium

理由としては、既存サイトURLがあり、過去の依頼実績があり、具体的なアップデート内容や予算も明記されていたためです。

営業メールの判定例

一方、営業メールのテストでは、以下のような判定になりました。

スコア:20
種別:sales
通知判定:suppress
トーン:neutral
緊急度:low

この場合、管理者通知は送られません。
ただし、エントリー自体は保存されるため、後から確認することはできます。

なお弊社では、AIが万が一誤判定した場合のセーフティネットとして、管理者メールとは別にグループチャットにも送信内容を連携しています。

実装時に気をつけたこと

実装時に特に気をつけたのは、AIの返答をそのまま使わないことです。
AIにはJSON形式でスコアや通知判定を返すように指示していますが、外部APIの返答である以上、想定外の値が返ってくる可能性はゼロではありません。
そのため、スコアは0〜100の範囲に丸め、通知判定も最終的にはサーバー側で notify / suppress に正規化しています。

/**
 * AI判定結果を安全に正規化する
 */
function my_normalize_ai_result( $data )
{
	$score = isset( $data['score'] ) ? (int) $data['score'] : 50;
	$score = max( 0, min( 100, $score ) );

	if ( $score < 30 )
	{
		$notification_level = 'suppress';
	}
	else
	{
		$notification_level = 'notify';
	}

	return array(
		'score'              => $score,
		'lead_type'          => $data['lead_type'] ?? 'other',
		'notification_level' => $notification_level,
		'reason'             => $data['reason'] ?? '判定理由なし',
	);
}

このようにしておくことで、AIの出力が多少ぶれても、フォーム側の通知制御やCRM連携が想定外の値で動いてしまうことを防げます。

まとめ

前回は、問い合わせフォームに届く営業メールをAIで自動判定する仕組みを作りました。

今回はその考え方をさらに進めて、単なる営業メール判定ではなく、問い合わせそのものの品質をスコアリングする仕組みに改良しました。
これにより、以下のような運用が可能になります。

  • 営業メールは管理者に通知しない
  • 有効な問い合わせは通常通り通知する
  • ホットリードを見分けやすくする
  • CRMへ問い合わせ品質を連携する
  • 将来的にGA4でCVの質を分析する

フォームは単なる入力欄ではなく、問い合わせ獲得や営業活動の入口です。
その入口にAI判定を組み込むことで、管理者の負担を減らしながら、問い合わせの質も見えるようになります。

次回は、この問い合わせスコアをGA4に連携し、フォームCVの「件数」だけでなく「質」まで計測する方法を紹介する予定です。

フォーム運用・問い合わせ品質の改善をご相談ください

弊社では、WordPressフォームの設計・実装、Gravity Formsへの移行、Webhook連携、CRM連携、AI判定を使った問い合わせ品質の可視化などを行っています。

以下のような課題がある場合は、お気軽にご相談ください。

  • フォーム営業が多く、重要な問い合わせが埋もれている
  • CRMに問い合わせを連携したい
  • 問い合わせの質をスコアリングしたい
  • GA4でコンバージョンの件数だけでなく質まで見たい

フォームの改善は、問い合わせ対応の効率化だけでなく、営業やマーケティングの改善にもつながります。