既存のホームページにも、こういうチャットボットは後付けできますか?
はい、既存のホームページにも後付けしやすい形で導入できます。今回の試作では script タグで読み込める形を優先しているため、大がかりな作り直しをしなくても載せやすい構成を前提にしています。ただし、サイトの作りや運用環境によっては表示位置や導線の調整が必要です。
Webサイトにチャットボットを載せる施策は、気になっていても導入のイメージを持ちにくいテーマです。
実際に導入を考えると、先に整理したくなるのは「何でも答えられる高性能なAI」というよりも、
といった、かなり実務寄りの論点です。
今回は、Bloengで試作しているWebサイト埋め込み型チャットボットについて、どんな方針で組んだのかをまとめます。
いわゆる「AIで何でもできます」という話ではなく、既存サイトに無理なく載せられて、問い合わせや相談の導線として機能しやすい受付ウィジェットをどう作っているかという内容です。
技術の細かい話そのものよりも、「なぜその設計にしたのか」「導入時にどんな点が重要なのか」が分かるように書いています。
実際の見え方や操作感を先に確認したい場合は、デモページを先に触るとイメージしやすいです。
この手のウィジェットは、どうしても回答精度や使うモデルの話に目が行きがちです。
ただ、実際にサイトへ埋め込むことを考えると、先に気になるのは別のところでした。
このあたりを先に整理しておかないと、回答の精度だけ上げても実運用にはつながりにくいです。
そのため、今回の試作では次の3点を先に成立させる方針にしました。
見た目としては、サイト右下に常駐する小さな受付ウィジェットです。
まずは閉じた状態だとこのような見た目です。右下にラベル付きのランチャーが表示される形にしています。

ランチャーを押すとパネルが開いて、初期メッセージ、クイックリプライ、自由入力欄が表示されるようにしています。
実際に開くと、初回メッセージと選択肢が見えるので、最初の一言を考えなくても触り始めやすくなります。

派手な演出を入れるというよりは、既存サイトの導線を邪魔しないことを優先しました。
実際のデモページでは、架空のコーポレートサイトに対して後付けで読み込む形にしています。ウィジェット自体はページ本体のコンポーネントに強く依存させず、scriptタグ経由で動く構成にしています。
まず重視したのは、できるだけ少ない手間で試せることです。
実際の埋め込みはかなりシンプルです。
<script
src="/scripts/ai-uketsuke.js"
defer
data-ai-uketsuke
data-mode="mock"
data-position="right"
data-title="AI コンシェルジュ"
data-launcher-variant="label"
data-launcher-label="チャットで相談する"
></script>
やっていること自体は単純ですが、この形にしておくと扱いやすいです。
特に、制作の現場では「新しい仕組みを大きく追加したくない」「既存サイト側の改修を最小限にしたい」というケースがよくあります。
そのため、npmパッケージとして組み込む形よりも、まずはscriptタグを1本追加すれば試せることを優先しました。
導入しやすさと同じくらい重要だったのが、載せるサイトに合わせて見せ方を変えやすいことです。
ローダーでは、読み込まれたscriptタグのdata属性を拾って、ウィジェットの設定に変換しています。
この方式にしておくと、埋め込み先ごとにタイトルやクイックリプライを変えやすくなります。
例えば今回の試作では、次のような項目をscriptタグ側から切り替えられるようにしています。
この形にした理由は、同じウィジェットでも載せるサイトによって期待される会話が変わるからです。
コーポレートサイトなら「資料請求」「料金」「導入相談」が先に来ますし、制作会社サイトなら「サービス内容」「見積もり」「問い合わせ」が先に来ます。
毎回コードを調整しなくても、埋め込み時の設定だけである程度寄せられるようにしておいた方が、運用の負担を増やしにくいです。
今回の実装で大きかった判断の1つがこれです。
埋め込み型のUIは、導入先サイトのCSSに引っ張られやすいです。たとえば、全体に button {} や input {} が強く当たっているサイトだと、ちょっとしたチャットパネルでも見た目が崩れます。
今回のウィジェットでは、専門用語でいう custom element と Shadow DOM を使って、スタイルをできるだけ閉じた形で持たせました。
これで少なくとも、
といった事故を減らしやすくなります。
LPでも「完全に独立したスタイル」を打ち出していますが、これは単なる売り文句ではなく、実装上かなり重要なポイントでした。
チャットボットは便利でも、導入した瞬間に既存サイトの印象を壊してしまうと使いづらくなります。なので、まずは賢さよりも安全に置けることを優先しています。
これは実装を進めるうえでかなり助かりました。
最初から本番API前提で組むと、UI確認、文言確認、導線確認が全部バックエンド待ちになります。
それを避けるために、今回は mock モードと remote モードを切り替えられるようにしました。
モック側では、入力キーワードに応じて返答を出し分けています。たとえば、
といったよくある相談に対して、デモ用の返答を返す作りです。
実際のやり取り中の画面は次のような形です。入力内容に応じて返答が切り替わるので、UIの確認だけでなく導線の見え方も合わせて確認できます。

これを先に作っておくと、APIがまだ固まっていない段階でも、
を先に検証できました。
AI機能の開発では、どうしてもモデルやRAGの話に意識が向きますが、実際にはその前の体験設計で詰まることの方が多いです。ここを先に確認できたのは大きかったです。
今回の試作では、会話IDとメッセージ履歴をsessionStorageに持たせています。
これは長期保存のためというより、同じタブの中では会話が急に消えないことを優先した結果です。
ページをまたいで長期的に履歴を残す設計もありますが、受付ウィジェットの初期段階では少し重いと感じました。
むしろ今回は、
このあたりのバランスを取っています。
小さな判断ですが、こういう部分は使い心地にかなり影響します。せっかく相談しようとしたのに、少し操作しただけで会話が消えるように見えると、それだけで体験が雑に見えてしまいます。
自由入力だけでもチャットは成立しますが、実際には最初の一言が出てこない人は多いです。
そこで今回の試作では、最初からクイックリプライを並べています。
これはAIを賢く見せるためというより、相談のきっかけを作るためです。
たとえば、
のような選択肢が最初にあるだけで、チャットを開いた人の迷いはかなり減ります。
実装してみて感じたのは、チャットは入力UIであると同時に、かなり強いナビゲーションUIでもあるということです。ここは今後もっと詰めたいところです。
本番モードでは、内部的には /api/chat からストリーミングでイベントを受け取り、テキストを少しずつ描画する形にしています。
これも、技術的に格好いいからというより、無反応に見える時間を減らしたかったのが理由です。
チャットUIは、返答まで1秒待つだけでも体感が悪くなりやすいです。特に受付用途では、「ちゃんと反応しているか」が分からない時間が一番不安を生みます。
なので、少しずつでも返ってくるようにして、会話のテンポを保つ方向に寄せました。
今回の試作で改めて感じたのは、サイト埋め込み型のチャットボットは、できることを増やしすぎない方がよいということです。
少なくとも、企業サイトやサービスサイトの一次窓口として考えるなら、最初にやるべきことはかなり限られています。
ここが曖昧なまま「何でも聞けます」にすると、回答品質も導線設計も崩れやすいです。
逆に、役割を絞ると、必要な文言もクイックリプライも導入ページも決めやすくなります。これは実装より前の話に見えて、実際はかなりコードに効いてきます。
もちろん、これで方向性がすべて固まったわけではありません。
今の段階でも、サイトに合わせて調整しやすい部分や、今後さらに改善しやすい部分ははっきりしています。
このあたりは、単にチャットUIを完成させるだけでは決まりません。どのサイトで使うのか、どこまで自動案内させたいのか、公開後にどう運用するのかまで含めて調整していく部分です。
既存のホームページにも、こういうチャットボットは後付けできますか?
はい、既存のホームページにも後付けしやすい形で導入できます。今回の試作では script タグで読み込める形を優先しているため、大がかりな作り直しをしなくても載せやすい構成を前提にしています。ただし、サイトの作りや運用環境によっては表示位置や導線の調整が必要です。
チャットボットを導入するなら、最初に何から決めればよいですか?
最初に決めるべきなのは、何でも答えさせることではなく役割を絞ることです。たとえば、サービス案内をさせたいのか、よくある質問への一次対応をしたいのか、お問い合わせや資料請求への導線にしたいのかで、必要な文言や導線設計はかなり変わります。今回の試作でも、まずは受付ウィジェットとしての役割に絞って考えています。
最初から本番のAIや複雑な仕組みまでつなぎ込む必要はありますか?
いいえ、最初から本番のAI連携まで入れなくても検討は進められます。今回の試作でも、先にモックモードを用意して、画面の見え方や導線、受け答えの雰囲気を確認できるようにしました。非開発者の立場でも、まずは体験と導線を固めてから本番連携を考える方が進めやすいです。
今回作った埋め込み型チャットボットは、まだ発展途上です。
ただ、実装してみて見えてきたのは、サイト向けのチャットボットで本当に大事なのは、モデルの名前や派手さではなく、既存サイトに無理なく載せられて、訪問者を次の行動に進められることでした。
その意味では、今回先にやって良かったのは次の4つです。
もし「運営中のサイトにチャットボットを載せたいが、何から考えればよいか分からない」という段階なら、いきなり高機能な仕組みを作るより、まずは役割を絞った小さな受付ウィジェットから始める方が現実的です。
チャットボットの試作や導線設計について相談したい場合は、こちらからお問い合わせいただけます。