0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

無料のWebチャットウィジェットにAI自動返信を追加した話 ― コードは1行も書いていません

0
Posted at

私は非エンジニアのプロダクト担当です。チームで Knocket という完全無料のWebサイト用チャットウィジェットを開発しました。ライブチャットとしては優秀ですが、AI機能がありませんでした。そこで OpenClaw と Vibe Coding を使い、自分でAI自動返信を実装しました。この記事は、何をやったか、何が壊れたか、最終的に何をリリースしたかの全記録です。

Knocket とは?

Knocket は、ライブチャット・オフラインフォーム・SNSリンク・会議予約を1つのウィジェットに統合した、完全無料のWebサイト用コンタクトウィジェットです。</body> タグの前に1行のコードを貼り付けるだけで、サイトの右下にブランドカラーのチャットバブルが表示されます。
Screenshot 2026-03-19 at 15.02.11.png

  • 1分でデプロイ<script> タグを1つコピーしてHTMLに貼るだけ
  • ライブチャット ― 訪問者がサイト上でメッセージを送信、あなたは Inbox ダッシュボードから返信
  • オフラインフォーム ― 不在時も訪問者の連絡先を自動収集
  • SNSリンク集約 ― WhatsApp、Instagram、Telegram をワンタップで表示
  • ノーコードカスタマイズ ― カラー、アイコン、挨拶文をダッシュボードから設定

Tencent Cloud IM 基盤で構築されており、コンソール・SDK・フロントエンドウィジェットはすべてエンジニアチームがゼロから開発しました。そして完全無料です ― Intercom の月額39ドルも、LiveChat の月額20ドルも不要です。

Knocket を無料で試す

足りなかったもの:AI自動返信が欲しかった

リリース後、お客様が自分のWebサイトに Knocket を埋め込み、Inbox でメッセージのやり取りを始めました。しかし問題がありました。Knocket にはAI機能がありません。 純粋なコミュニケーションツールなので、お客様からメッセージが来たら、自分でダッシュボードを見て返信する必要があります。

営業時間を設定しても、一日中 Inbox コンソールに張り付いている人はいません。

非エンジニアのプロダクト担当として、こう考えました:自分のプロダクトにAIカスタマーサービスを追加できないか?

成熟したカスタマーサポートプラットフォームならこの機能がありますが、月額30〜100ドルかかります。正式な機能として開発するにはエンジニアリングリソースが必要です。でも OpenClaw にブラウザを操作させれば実現できるのでは?

目標:

お客様がメッセージ送信 → AIが検知 → 自動返信(または先に通知して私が判断)

やってみることにしました。以下はその実際の経緯です。

フェーズ1:ブラウザ自動化 ― とりあえず動かす(v1)

アイデア

OpenClaw を使いました。コマンドラインから Chrome を操作できるブラウザ自動化スキルを持つAIコーディングアシスタントで、JavaScript実行・フォーム入力・ボタンクリックが可能です。

最初のアプローチはシンプルでした:

60秒ごと → Inbox の会話リストを読み取り
→ 新着メッセージ検知 → AIが返信を生成
→ textarea に入力 → Send をクリック
→ Telegram で通知

AIアシスタントが約300行のシェルスクリプトを書いてくれました。browser eval でページデータを読み取り、browser fill で返信を入力する仕組みです。

動いた!……5分間だけ

AIがメッセージを読み取り、返信を生成できました。約5分間は興奮しました。

そして全部壊れました。

ブラウザ自動化の fill と click コマンドは、Knocket Inbox の React SPA と相性が悪かったのです。最悪の事故:1人のお客様にだけ返信するつもりが、同じ返信がアクティブな3人全員に送られてしまいました。

1.png

さらに、ブラウザ操作のたびにウィンドウフォーカスを奪われ、スクリプト実行中は他の作業ができませんでした。

教訓: CLI経由のブラウザ自動化は複雑なSPAには精度が足りない。各ステップのタイミングを制御できない。

フェーズ2:生CDP + バックグラウンド実行(v2)

アーキテクチャ全面刷新

ブラウザ自動化のアプローチを完全に捨てました。新しいプラン:OpenClaw を使い、Python の websockets ライブラリで Chrome DevTools Protocol(CDP)に直接接続する方式です。

CDPが優れていた理由:

  • 完全にバックグラウンドで動作 ― ポップアップなし、フォーカス奪取なし、干渉なし
  • 各ステップで正確なJSONレスポンスを取得 ― 成功・失敗が確実にわかる
  • 再接続・リトライ・タイムアウトを完全制御

新しいフロー:

お客様がメッセージ送信 → スクリプトがバックグラウンドで検知
→ AIが自動返信 → CDPがサイレントに送信 → Telegram で通知

2.png

安定したが、もっと欲しくなった

誤送信はなくなり、サイレントにバックグラウンドで動作。しかし、純粋な自動返信だけでは不十分だと気づきました。

重要なお客様や複雑な質問には、返信前に自分で確認したい。

一方通行の Webhook(何が起きたかを通知するだけ)では足りません。双方向通信が必要でした:Bot が状況を教えてくれて、私が Bot に返信方法を指示する。

教訓: 一方通行の通知はモニタリングには使えるが、意思決定には使えない。「人間優先、AIフォールバック」には双方向 Bot が必要。

フェーズ3:Telegram Bot + Human-in-the-Loop(v3)

なぜ Telegram か?

  • Bot API が完全無料で高機能
  • 双方向通信: Bot が通知 → 私が Bot に返信 → Bot がお客様に転送
  • モバイル対応 ― いつでもどこでも返信可能
  • 管理者承認不要 ― エンタープライズメッセージングプラットフォームと違い手軽

v3 のフロー

お客様がメッセージ送信
  → スクリプトがバックグラウンドで検知
  → Telegram で通知:お客様の発言内容 + 会話コンテキスト
  → スマホで返信(例:「3日以内に発送すると伝えて」)
    → スクリプトがお客様に返信 → Telegram で確認 "✅ 送信完了"
  → 5分間返信なし?
    → AIがフォールバックとして自動返信 → Telegram で通知 "🤖 AI自動返信済み"

Human-in-the-loop。 重要な会話は私が対応。それ以外はAIが処理。
3.png

そして……最後のステップでまた壊れた

Telegram 通知は完璧に動作。AI返信生成も完璧。失敗したのは:返信を Knocket Inbox に実際に送信する部分。

一見3ステップ:会話を切り替え → 返信を入力 → Send をクリック。実際にはあらゆる壁にぶつかりました。

最も苦しかったパート:CDP vs React ― 血と涙の記録

問題1:バックグラウンドタブでフォーカスできない

Chrome はバックグラウンドタブにセキュリティ制限をかけています。JavaScript の el.focus() がサイレントに失敗 ― textarea がフォーカスを取得できず、文字を入力できない。

解決策: CDP プロトコルレベルの DOM.focus コマンドを使い、JSセキュリティサンドボックスをバイパス。

問題2:React の制御コンポーネントが CDP 入力を無視

Input.insertText で書き込んだテキストは画面上では見えるが、JavaScript の el.value は空を返す。React 内部の _valueTracker メカニズムが CDP レベルの入力を検知しない。

解決策: .value での検証をやめる。focus 成功 + insertText がエラーなし = 成功とみなす。

問題3:テキストが複数回重複

4種類の入力方法をフォールバックとして実装。方法1は実際には成功していたが、.value が空を返したため失敗と判断し、方法2・3・4も実行 ― それぞれがテキストを再入力。

解決策: 1つの方法だけを使う。フォールバックなし。書き込みはおそらく成功している ― 読み返せないだけ。

問題4:Send ボタンが常に disabled

React が textarea にコンテンツがあることを認識せず、Send ボタンがロック解除されない。

解決策: Enter キーで代替。textarea にフォーカスがあれば Enter で送信可能。

問題5:会話のインデックスがずれる

人間の返信を待つ5分間に、他の会話が追加・削除され、元のリストインデックスが正しい会話を指さなくなる。

解決策: インデックスではなく会話名で検索。送信のたびに再検索する。

これらの問題をどう解決したか?

正直に言うと ― OpenClaw と何度もやり取りして解決しました。ワークフローはこうです:

  1. スクリプトを実行 → 壊れる
  2. ログと現象をコピーして説明:「テキストが2回重複、Send ボタンがクリックされなかった」
  3. OpenClaw が分析 → コード書き直し → 再起動
  4. 再実行 → また壊れるかも → 繰り返し

非エンジニアの Vibe Coding で最も重要なスキルはコードを読むことではなく、問題を正確に説明すること。「テキストが2回重複して、Send ボタンが disabled のままだった」は「動かない」の100倍有用です。

約15回のイテレーションを経て、パイプライン全体がついにエンドツーエンドで動きました。

4.png

リリースしたもの:再利用可能なAIエージェント Skill

すべてのバグを乗り越えた後、このソリューションを再利用可能な Skill としてパッケージ化しました ― knocket-inbox-agent

パッケージの内容

knocket-inbox-agent/
├── SKILL.md                  # Skill 説明(AIがこれを読んでセットアップを支援)
├── scripts/
│   ├── auto_reply.py         # モードA:全自動返信 + Telegram 通知
│   ├── telegram_human.py     # モードB:Telegram 人間優先(推奨)
│   └── setup.sh              # ワンクリック初期化
├── assets/
│   └── config.template.toml  # 設定テンプレート
└── references/
    ├── usage-guide.md         # 初心者向けセットアップガイド
    └── customization.md       # AI返信スタイルのカスタマイズ

2つのモード

モードA:全自動 モードB:人間優先(推奨)
フロー お客様メッセージ → AI即時返信 → Telegram で通知 お客様メッセージ → Telegram で通知 → あなたが返信 or しない → AIフォールバック
適している場面 大量の定型問い合わせ 重要なお客様、人間の判断が必要な場面

使い方

  1. GitHub から knocket-inbox-agent skill をインストール
  2. OpenClaw に伝える:「Knocket Inbox の自動返信を設定したい」
  3. OpenClaw が Skill を読み込み、ガイドしてくれる:モード選択 → 環境設定 → 監視開始

コードを書く必要はありません。 OpenClaw が Skill の指示に基づいてすべてを処理します。

学んだこと

Vibe Coding について

  • 魔法ではない。「要件を一言言えば完璧なコードが出る」とは思わないこと。超忍耐強い共同作業者のようなもの ― OpenClaw に何が問題かを説明すれば、修正してくれる。
  • 非エンジニアでも完全にできる。 私は CDP プロトコルも React の内部メカニズムも理解していません。でも問題を正確に説明し、エラーログの重要な情報を見つけることはできます。
  • デバッグは避けられない。 でも OpenClaw の助けがあれば、デバッグのコストは「数日間スタック」から「数ラウンドのイテレーション」に下がります。

自分のプロダクトにAIを追加することについて

Knocket はAI機能ゼロの純粋なコミュニケーションツールです。しかしこの Skill を追加すると:

  • オンライン時 → あなたが判断、AIがアシスト
  • 就寝中 → AIがすべて対応、Telegram でスマホに通知
  • 追加サーバー不要。 有料SaaSの契約も不要。
  • ノートPC1台 + Chrome + Python スクリプト1つ。 これだけで完結。

自分でプロダクトやツールを作ったなら、こう自問してみてください:何の機能が足りない? Vibe Coding で追加できないか?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?