LIVE · OPS
AGENTS — RUNNING
WORKFLOWS — ACTIVE
PROJECTS — SHIPPED
AVG REPLY —
AIエージェント2026-06-24·13分で読めます

Claude × LangGraphで作った、24時間稼働の営業オートメーションBot — ビルドノート

ファン・ゴァンヒ · 5years+ 代表READ MORE ↓
目次 · Contents

深夜2時17分。Slackの#opsチャンネルにinbound通知が1行だけ届いていました。大阪のとあるメーカー担当者が5ya.ioの問い合わせフォームに「AI Botの導入を検討中なのですが、30分だけ通話できますか」と残していたのです。そのメッセージは営業時間が始まるまでの9時間、返信のないまま放置されていました。その日の朝会で決めました — 自分たちでBotをビルドする、と。

本シリーズは、私たちが自前でビルドしたAIツールの運用ノートです。初回は自社inbound対応Bot。

深夜のオフィスでinbound通知が表示されているノートPC画面 — 営業オートメーションBotビルドノート画像

なぜSaaSチャットボットではなく自前で作ったのか

外部のチャットボットSaaSを2社、1週間ほど比較しました。FAQ対応まではどちらも問題なかったのですが、私たちが受け取るinboundの70%以上は単純な質問ではなく、BoFuの商談リクエストでした。「月10万円台でPoCは可能か」「製造業の事例を見せてほしい」といった決裁者トーンの問い合わせに対しては、事前に設計したフローチャートだけでは応対品質にばらつきが出てしまったのです。

当初はClaude APIを一度叩くだけのスクリプトで十分だと考えていました。ところが実装してみると、別の問題が顔を出します。問い合わせ分類・過去会話の取得・CRMアップデート・社内レビューキュー — これらを1回の呼び出しに詰め込んだ結果、プロンプトは800行を超え、一度の失敗で全工程が連鎖的に崩れる構造になってしまいました。

アーキテクチャ図1枚 — Claude × LangGraph × OpenRouter

4度目の設計案でこの組み合わせに落ち着きました。

  • Claude Opus 4.7 — ロングコンテキストとトーンの安定性。決裁者からの問い合わせには、一行返信ではなく4〜6文の重みのある返答が必要です。
  • LangGraph — ノードとエッジで状態フローを直接描けるライブラリ。分類・リサーチ・ドラフト・レビューを個別ノードに分割したことで、失敗箇所のみから再開できるようになりました。
  • OpenRouter — モデルゲートウェイ。軽い分類タスクはHaiku 4.5、本文生成はOpus 4.7にルーティングすることでコストを抑えました。

コストはモデルの切り替えで大きく動きました。

モデル入力(1Mトークン)出力(1Mトークン)
Claude Opus 4(旧バージョン)$15$75
Claude Opus 4.6 / 4.7$5$25

同じ返信1件あたりのトークン単価が1/3水準まで下がりました。4週目の累積API費用は約1.8万円 — 担当者1人の夜間対応工数に換算すれば、比較すること自体が意味を失う水準でした。

LangGraphグラフ — 5つのノード

グラフの骨格だけ抜き出すと次のようになります。

from langgraph.graph import StateGraph, END

graph = StateGraph(InboundState)
graph.add_node("classify", classify_intent)
graph.add_node("research", fetch_context)
graph.add_node("draft", draft_reply_with_claude)
graph.add_node("review_queue", push_to_slack)
graph.add_node("crm_sync", upsert_to_crm)

graph.set_entry_point("classify")
graph.add_conditional_edges(
    "classify",
    lambda s: "research" if s["intent"] == "lead" else END,
)
graph.add_edge("research", "draft")
graph.add_edge("draft", "review_queue")
graph.add_edge("review_queue", "crm_sync")
graph.add_edge("crm_sync", END)

ポイントは2つ。1つ目はclassifyノードで単純FAQとリードを切り分け、リードだけを重いパイプラインに流したこと。2つ目はreview_queueノードがBotの返信ドラフトをSlackチャンネルへ投げ、人間が1度レビューしてからでないと送信されない設計にしたこと。自動化の最後の1cmは意図的に人間の手に残した、ということです。4週間の運用を通じて、私たちのチームが「いちばん良かった」と自負している判断でもあります。

4週間の運用 — 数字で見る風景

4月28日から5月25日までの4週間のデータです。

  • 処理したinbound:142件(FAQ 89 / リード 53)
  • 平均ドラフト生成時間:47秒
  • 夜間(22時〜翌9時)の応答率:100%(全件Botドラフト → 翌営業日9時に一括レビュー後送信)
  • 人間レビューでの修正発生率:31%
  • Botドラフトそのまま送信:69%

修正発生率31%は最初、高く感じられました。ところが1件ずつ中身を見ていくと、その半数近くは「メールの結びの一文を追加」「候補日時を1行補強」といった軽微な手直しでした。トーンや事実関係が崩れたケースは4週間で4件。うち2件はBotが自社価格を勝手に推測して答えたケースで、すぐにプロンプトへ「価格は絶対に直接答えず、無料診断の案内に切り替えること」というガードを組み込みました。正直に言えば、ここは運用ルールでねじ伏せる作業に近く、コード1行できれいに片付く類の問題ではありませんでした。

「応答率100%」と書くと大げさに聞こえますが、要は「深夜に届いた日本の決裁者からの問い合わせが、韓国側の営業時間が始まる時点でレビュー可能なドラフト状態で待機している」という意味です。以前は9時間ぽっかり空いていたその時間帯に、人の手が1度入っている風景に変わりました。

つまずいた2つのポイント、そして運用ルール

ハルシネーションは最後までゼロにはなりませんでした。多言語も課題でした — 日本語で届いた問い合わせに対し、韓国語的な語順が滲んだ返信が2回ありました。私たちはこの2つをコードではなく運用ルールで解きました。「送信前の人間レビュー1回」という最後のノードがそれです。詳しいビルド手法はAIオートメーションサービス紹介ページにシナリオ別にまとめています。

おわりに — Botは人を減らす道具ではない

ある韓国の中小企業の社長がこう仰っていたことがあります。「相談を受けられない夜の時間でも、顧客を逃さなくなった」。私たちの4週間の運用も、結局同じ地点にたどり着きました。Botは人を減らす道具ではなく、人の手が届かない時間帯にリードを取りこぼさないよう支えるインフラに近いものです。

私たち5years+では、韓国・日本の中小企業向けにinboundオートメーションBotを4週間サイクルでビルドしています。自社環境(メッセンジャー・CRM・商品カタログ)に合わせた30分の無料診断を — 無料相談はこちら → 5ya.io/ja/contact から承ります。

次回(第2回)は毛色の異なる自動化を扱います。Runway Gen-4 × Gemini Imageで週5本の広告動画を量産する — 営業Botがリードを受け取るポジションだとすれば、動画パイプラインはそのリードを連れてくるポジション。2つの軸が繋がったとき、ようやく自動化が売上カーブに触れ始めるのです。

関連記事 · 3本
▸ WRITTEN BY
J.H
ファン・ゴァンヒ
5years+ 代表 · EST. 2022

5years+ 代表。AIエージェント・業務自動化・Webアプリ開発を通じて、韓国・日本の企業が「繰り返し」から解放され「成長」に集中できるよう支援しています。Claude API、n8n、Next.js を中心としたスタックで52件以上のプロジェクトを納品。

▸ この記事が役に立ったなら
実際のAI自動化を
あなたのビジネスに導入したいですか?

5years+ が具体的な方法をご提案します。