LINE × Claude — 完全自動セールスエージェントシステム
完全自動化が営業プロセスにもたらす定量的インパクト
| 指標 | 人手運用 | AI自動化 | 分類 | |
|---|---|---|---|---|
| 初回応答 | 4-8 時間 | » | < 5 秒 | 速度 |
| 夜間 / 休日 | 翌営業日 | » | 即時対応 | 自動化 |
| 応答品質(トーン / 価格) | 担当者依存 | » | 100% 統一(執筆-校閲ループ) | 品質 |
| ナレッジ反映 | 研修 2-4 週間 | » | Notion 更新で即時反映 | 速度 |
| 改善サイクル | 月次 MTG | » | 週次自動リフレクション | 自動化 |
| 改善実装 | 開発者アサイン | » | Claude Code が自動 PR 作成 | コスト |
| 回答レビュー | 人手ダブルチェック | » | Reviewer が自動校閲(最大2回) | 自動化 |
| ラリー効果測定 | なし | » | Scorer が全ターン自動採点 | 品質 |
商談化率 = twin:phase:connected / twin:phase:hearing × 100%
価格提示到達率 = twin:phase:priced / twin:phase:hearing × 100%
エスカレーション率 = twin:escalated / twin:phase:hearing × 100%
タイムアウト率 = twin:phase:timeout / twin:phase:hearing × 100%
Anthropic用語に準拠した役割分担: オーケストレーター / エージェント / ワークフロー / ツール
返信確定後、PhaseJudge と Scorer が並列実行される。
PhaseJudge: 次フェーズ判定(前進 / 維持 / 後退)。
Scorer: 前回ラリーの効果スコア(0.0〜1.0)。
結果分類: フェーズ前進 | 進行中 | 停滞 | 未返信 | フェーズ後退 | 離脱
6段階 + タイムアウト。前進が基本だが後退も可能。P100のみ不可逆。
| # | 質問内容 | 取得データ | 入力形式 |
|---|---|---|---|
| Q1 | お名前・会社名・役職 | contactName, companyName, jobTitle | 自由テキスト(正規表現解析) |
| Q2 | 年商規模 | annualRevenue | 選択肢(5段階) |
| Q3 | 従業員数 | employeeCount | 選択肢(6段階) |
| Q4 | 自動化テーマ | automationTheme | 選択肢 + 自由入力 |
| Q5 | 関心サポート | supportInterest | 選択肢 + 自由入力 |
メッセージ受信から応答送信までの全処理フロー
| フェーズ | 取得内容 | フィルタ条件 |
|---|---|---|
| P1 | FAQ(課題 + 顧客ペインポイント) | — |
| P2 | 業種別事例 + 技術的専門性 | 業種(metadata.industry) |
| P3 | ソリューション製品 + 関連事例 | 課題(metadata.challenges) |
| P4 | 価格情報(商品名, 価格, 期間) | セグメント(法人/個人) |
| P5 | 会社情報 + 契約手続き | — |
agent:${phase}:${segment}:${industry}:${challenges}
エンベディング生成 → ベクトル保存 → 類似検索 → コンテキスト注入の詳細構造
embedBatch() で一括処理(1 API コール)text-embedding-004:predict → 768-dim vector × 2本FieldValue.vector() でネイティブベクトル型として rallies コレクションに保存embed() → 768-dim query vector.where("phase", "==", currentPhase) — 同一フェーズの会話のみに絞り込みdistanceMeasure: "COSINE" | limit: 15(post-filter用に3倍取得) | vectorField: "userMessageEmbedding"score ≥ 0.5 で低類似度を除外 | excludeCustomerId で自分自身のラリーを除外| フィールド | 型 | 用途 |
|---|---|---|
| rallyId | string | ドキュメントID(自動生成) |
| customerId | string | LINE friendId — 顧客識別子 |
| userMessage | string | 顧客の元メッセージ(平文) |
| response | string | AIの応答テキスト(平文) |
| phase | Phase | 会話フェーズ(P1〜P100) |
| userMessageEmbedding | vector(768) | ベクトル検索の対象フィールド |
| responseEmbedding | vector(768) | 保存のみ(将来の分析用) |
| score | number | null | Scorer による効果スコア(0.0〜1.0) |
| outcome | Outcome | null | phase_advanced / progressing / stagnant / etc. |
| createdAt | string (ISO) | 作成日時 |
buildQuery(phase, segment, metadata) → フェーズ別の自然言語質問を生成POST /v1/agents/{agentId}/chat → Notion Agent がDB検索・ページ読み取りを自律実行30分 TTL キャッシュ に保存agent:${phase}:${segment}:${industry}:${challenges}
デュアルソース設計: ベクトル検索(過去の会話履歴)+ Notion Agent(構造化ナレッジ)の2系統を並列取得
フェーズスコープ: ベクトル検索は同一フェーズに限定し、文脈の関連性を保証
グレースフルデグレード: エンベディング失敗 → 検索スキップ / Notion失敗 → 空ナレッジで続行
バッチ最適化: embedBatch() で userMessage + response を1回のAPI呼び出しで処理
自己除外: excludeCustomerId で自分自身の過去ラリーを除外し、自己参照バイアスを防止
完全自動の改善サイクル — 分析 → 仮説 → 実装 → レビュー → デプロイ → 効果検証
ペルソナバッチシミュレーション(バッチ10件、並列3)の結果からも仮説を生成可能。
離脱フェーズ + 離脱理由 を分析し、離脱ポイントを特定。
指標: 商談化率(%)/ 平均ラリー数 / フェーズ別離脱数
未知の質問を蓄積し、人間レビューで回答精度を継続改善するフィードバックループ
レイヤー別コンポーネント構成
多層防御: 入力 → 処理 → 出力の全段階で保護
| エンドポイント | 実行頻度 | 目的 |
|---|---|---|
| /scheduled/weekly-report | 毎週月曜 | リフレクション + 仮説生成 + Slack 週報送信 |
| /scheduled/apply-timeouts | 毎日 | 7日間無応答の会話を P-1(タイムアウト)に遷移 |
| /scheduled/score-no-reply | 毎時 | 24時間以上未返信のラリーにスコア 0.2 を付与 |
| /webhook/reflection-deployed | PR マージ時 | 仮説ステータスを「デプロイ済み」に更新 |
プロジェクト: shodan-tsubasa-ai |
リージョン: asia-northeast1 |
CPU: 1 |
メモリ: 512Mi |
最大インスタンス: 3 |
同時実行数: 80