← ブログに戻る

2026年9月21日

チャットボットのFAQを腐らせない:スプレッドシート自動同期

月曜の朝、店舗運営の担当者のところに問い合わせが三件続けて届く。「先週のセールはまだやっていますか」「その送料、今は違うはずでは」。どれも、ボットが自信ありげに答えた内容が原因だった。

セールは金曜に終わっていた。ボットに教えた価格表は、前の四半期のものだった。誰かが悪いわけではない。ただ、更新する手順が「誰かが思い出したときに、管理画面を開いて直す」だったので、思い出す人がいなかった。

チャットボットの導入記事は、たいてい立ち上げの話で終わる。この記事は、その後の話をする。公開して三か月目のFAQをどう保つか。しかも担当者はエンジニアではなく、本業の合間にやる人だ、という前提で。

古い回答は、回答しないより悪い

ボットが「わかりません」と言えば、お客様は人に聞く。手間は増えるが、誤解は生まれない。

古い情報を正しい口調で答えると、話が変わる。お客様はそれを信じ、店頭やLINEで「ボットにはこう書いてあった」と言う。現場は事実と違うと説明し、場合によっては値引きや返金で収めることになる。ボットが速く答えるほど、間違いも速く広がる。

原因のほとんどは、AIの性能ではない。教えた資料が古いままだったことにある。RAG型のチャットボットは、登録された資料を根拠に答える仕組みなので、資料が古ければ答えも古い。逆に言えば、資料を新しく保てるなら、精度の議論の半分は片づく。

ここで難しいのは「新しく保つ」の部分だ。

更新が止まる場所は、だいたい同じ

導入後に更新が止まった現場には、共通する流れがある。

まず、商品や価格の元データは、すでにスプレッドシートやExcelで管理されている。次に、ボットの管理画面はそれとは別の場所にある。変更のたびに二か所を直す必要があり、後者は忘れられる。担当者は複数の業務を兼ねているので、「あとでやる」がそのまま「やらない」になる。

もう一つの落とし穴は、情報の持ち主と、ボットの世話をする人が別であることだ。価格を決めるのは商品企画で、ボットを見るのはカスタマーサポート。企画側は、ボットに反映されているかどうかを知らない。

つまり、更新作業を頑張らせるのではなく、更新作業そのものを消す設計が要る。手元の表を直したら、ボットも変わる。その形に近づけるのが、この記事の趣旨だ。

OneBotの学習データ:入れ方は四つ

OneBotの管理画面には「トレーニングデータ」というタブがある。中には四つの入り口が並んでいる。

OneBot管理画面:トレーニングデータタブのファイルアップロード。PDF・DOCX・XLSX・PPTX対応、1ファイル50MBまで、学習済みバッジ付きのファイル一覧
  • テキスト:その場で貼り付けて登録する。短い注意書きや、急ぎの一文を足すときに向く。
  • ファイル:PDF、DOCX、XLSX、PPTXをアップロードする。1ファイルあたり50MBまで。
  • ウェブサイト:URLを指定して読み取りを開始する。サイト全体を対象にするオプションもある。
  • Googleスプレッドシート:この記事の主役。あとで詳しく書く。

ファイルについて、細かい点をいくつか。テキストの抽出は、アップロードの前にブラウザ上で行われる(画面にも「テキストはアップロード前にローカルで抽出されます」と出る)。元のファイルは保管され、あとからダウンロードできるので、「ボットが根拠にしたのはどの資料か」を後で辿りやすい。行を削除すれば、保管されていた元ファイルも一緒に消える。

各データには状態バッジが付く。学習済み、保留中、学習中、失敗の四つだ。更新のあとに「失敗」が残っていないか、これだけは定期的に見る価値がある。

一点、ウェブサイトの読み取りには限界がある。GoogleドキュメントやGoogleスプレッドシートのURLは、読み取れない。ログインが必要なページも同様だ。「社内のスプレッドシートのURLを貼ればいい」と考えがちだが、それはできない。だから次の仕組みがある。

Googleスプレッドシートの自動同期:仕組みと、正直な注意点

流れは単純だ。スプレッドシートを直す。決めた間隔で、シートの中身がOneBotに送られる。中身に変化があれば、シートの内容が丸ごと置き換えられ、自動で学習し直される。手動の再学習は要らない。その結果、次の質問からは新しい内容で答える。

担当者がスプレッドシートを直す(価格、在庫、FAQの一行)
スプレッドシート内のスクリプトが、設定した間隔で内容をOneBotに送信
内容が空、または前回から変化なし
内容に変更あり
空・変化なし:送信をスキップ(既存の学習データはそのまま)
変更あり:シートの内容を置き換え、自動で再学習
次の質問から、更新後の内容でボットが回答

設定は管理画面の「Googleスプレッドシートからインポート」から行う。ざっくり手順を書く。

  1. 画面上の「スクリプトをコピー」でスクリプトを取得する。
  2. 対象のスプレッドシートを開き、拡張機能からApps Scriptを開いて貼り付ける。
  3. スプレッドシートを再読み込みし、追加されたメニューの「OneBot」から「Send to OneBot」を一度だけ実行する。
  4. 以後は、選んだ間隔で自動的に送信される。

間隔は三つから選ぶ。毎日(日本時間0時)、1時間ごと、6時間ごと。価格の変更が日をまたいでも困らない用途なら毎日で十分だし、在庫のように動きの速い情報なら1時間ごとが向く。

セキュリティ面では、プロジェクトごとの秘密の値がリクエストのヘッダに付き、これで送信元を確かめる。担当者が退職した、スクリプトを外部に見せてしまった、というときは「シークレットを再生成」を押す。古い値は直ちに使えなくなる。

使う前に知っておいてほしいこと

いくつか、先に言っておく。

これはOAuth連携のコネクタではない。 自動で権限を渡して同期する、いわゆる公式コネクタとは違い、生成されたスクリプトを自分でシートに貼り付ける方式だ。IT部門がいない現場でもできる作業だが、「貼り付ける」という手作業は一度発生する。

初回の実行時に、Googleの「未確認アプリ」画面が出る。 「詳細」を開き、「移動」を選び、権限を許可する流れになる。自分のスプレッドシートに貼ったスクリプトを自分が承認する画面なので仕組み上は正常だが、初めて見る担当者は驚く。社内で使う場合は、事前に伝えておくほうがいい。

同期されるのはシートの中身であり、同期の頻度は上の三つのみ。 秒単位のリアルタイム同期ではない。

シートは、プロジェクトにつき一つの学習データとして扱われる。 送信のたびに、その内容が丸ごと置き換わる。追記ではないので、シートから消した行は、次の同期のあと、ボットの知識からも消える。逆に言えば、うっかり消した行も消える。なお、シートを丸ごと空にした場合だけは、上書きを避けるために送信が見送られる。

空のシートで、既存の知識が消えないか

いちばん怖いのは、更新の自動化が事故を自動化することだ。たとえば、誰かがシートを空にしてしまった、タブ名を変えてしまった、データの入力途中で同期が走った。

この点にはガードがある。中身が空のとき、送信はスキップされ、すでに学習済みのデータは上書きされない。前回から内容が変わっていないときも、スキップされる。学習の途中で失敗したものは、次の送信で自動的にやり直される。

ただし、これは「間違った中身を送ってしまった」場合を防ぐものではない。価格の桁を一つ間違えたシートは、そのまま送られる。守ってくれるのは空の場合であって、内容の正しさではない。

シートの作り方:一行を、一つの知識にする

ここからが実務だ。OneBotは、シートの一行を一つの学習用テキストとして扱う。この前提で表を作ると、ボットの答えの質が大きく変わる。

悪い例は、セルの中に文脈を置かないこと。たとえば、「送料」の列に「800円」とだけ書いてあっても、何の送料か、どの地域か、いつからかが読み取れない。AIが拾うのは行のテキストなので、その行だけで意味が通じる必要がある。

読み取りやすいのは、次のような作りだ。

区分 | 項目 | 内容 | 対象 | 適用期間 | 更新日
送料 | 通常配送 | 全国一律800円。5,000円以上で無料 | 通常商品 | 常時 | 更新日を記入
キャンペーン | 秋のセール | 対象商品は全品10%オフ | セール対象商品 | 期間を記入 | 更新日を記入
返品 | 未開封の返品 | 到着後の日数を書く | 全商品 | 常時 | 更新日を記入

作るときの原則を、いくつか。

  • 一行に一つのことだけ書く。 送料と返品を同じ行に混ぜない。
  • 主語を省かない。 「無料」だけでなく、「何が、どの条件で無料か」を行の中に入れる。
  • 期間を列にする。 終わったキャンペーンは、行を消すか、期間終了と明記する。曖昧な「現在実施中」は、いつまでも古くならない顔をする。
  • 更新日を残す。 ボットのためだけでなく、人が見たときに「この行は最近確認されたか」が分かる。
  • 別々の性質のものはタブを分ける、または列で区分する。 価格表と、返品ルールと、店舗情報は更新の頻度が違う。頻度が違うものを同じ表に押し込むと、誰も全体を見なくなる。
  • 背景説明は長文にしない。 一行が長くなりすぎると、質問との照合がぼやける。長い規約や説明は、PDFなどのファイルとして別に登録するほうが向く。

表計算のセルで運用する人は、「見た目を整えるための結合セル」を使いがちだ。同期の対象にするシートでは、結合セルや、装飾のための空白行を避けてほしい。人間には見やすくても、一行一知識という読み取りとは相性が悪い。

シートに置くもの、ファイルに置くもの

迷いやすいのが、何をシートに載せ、何をPDFなどのファイルに任せるかだ。目安は、更新の頻度と、一つの塊の長さで決める。

  • 月に何度も変わる、短い事実(価格、在庫、期間限定の条件、営業時間の臨時変更)はシートに向く。
  • 年に一度見直すかどうかの、長い文書(利用規約、保証の詳細、商品マニュアル)はファイルに向く。差し替えたときだけアップロードし直せばよい。
  • 判断に文脈が必要な内容(「この場合は返品できるが、あの場合はできない」)は、条件を一行ずつに分けて書くか、説明文書として別に置く。表の一マスに例外を詰め込むと、読み違えのもとになる。

この切り分けをしておくと、同期のたびに大きな文書を読み直すことがなくなり、変更の影響範囲も見えやすくなる。

最初の一時間:既存の資料をシートに移す

すでにExcelやPDFで運用している場合、最初にやることは新しい表を作ることではなく、いま登録されているものの棚卸しだ。

まず、学習データの一覧を開き、登録済みの項目を書き出す。次に、それぞれについて「この情報の元は誰が持っているか」を書き添える。元が既存のスプレッドシートにあるものは、そのシートを同期の対象にできないか考える。元がPDFで、頻繁には変わらないものは、そのままファイルとして残す。

この作業で、たいてい二つのことが見つかる。一つは、もう誰も使っていない古い資料が登録されたままになっていること。もう一つは、同じ内容が複数の資料に重複していて、しかも数字が食い違っていることだ。前者は削除し、後者はどれを正とするかを決める。この決定は技術の問題ではなく、社内の取り決めの問題なので、ボットの導入をきっかけに片づけてしまうのが早い。

小さく始めるなら、一時間で終わる範囲に絞る。価格表の一枚をシートに整え、同期を設定し、テストの質問を五つ投げる。ここまでで、この仕組みが自分たちの現場に合うかどうかは、たいてい見当がつく。

担当者を一人に決める

もう一つ、地味だが効くのが担当者の決め方だ。「みんなで気をつける」は、誰も気をつけないことと同じになりやすい。更新の責任者を一人、代理を一人、名前で決める。名前が決まっていれば、異動や休暇のときに、引き継ぎが必要だと気づける。

シートの編集権限も、広げすぎないほうがいい。誰でも直せる表は、誰でも壊せる表でもある。編集できる人を絞り、他の人にはコメントで依頼してもらう形にすると、事故が減る。

週15分の更新ルーティン

自動同期は「更新作業をなくす」ものではなく、「更新作業を表の編集に寄せる」ものだ。それでも、見る習慣は必要になる。現実的な流れを一つ示す。曜日や順番は現場に合わせて変えてよい。

  1. 週明けに5分、元の表を直す。 先週の変更(価格、在庫、終了したキャンペーン)を、同期対象のシートに反映する。責任者を一人決め、休むときの代理も決めておく。
  2. 同期を待つか、手動で送る。 日次同期なら翌朝を待つ。急ぎなら「OneBot」メニューから手動で送信する。
  3. 5分、実際に質問する。 変えた点について、自分でボットに聞いてみる。「秋のセールは今もやっていますか」のように、お客様が言いそうな言い方で。答えが古ければ、原因はシートの書き方か、同期が失敗しているかのどちらかだ。
  4. 5分、状態バッジと会話を見る。 失敗が残っていないか。お客様が答えを得られずに離脱した質問はないか。見つかった空白を、シートの新しい行として足す。

これで一回15分。書くと簡単だが、続くかどうかは「担当者が変わっても回る」ことにかかっている。手順を、同期対象のシートの一枚目に書いておく。ボットの世話は、その人のカレンダーに入れる。

直したのに、答えが変わらないとき

週次の確認で古い答えが返ってきたら、順に疑うところがある。

  1. 同期がまだ走っていない。日次の設定なら、次の0時まで待つ必要がある。急ぎなら手動で送る。
  2. 内容が空、または前回から変わっていないと判断されて、送信が見送られた。編集したタブが、同期の対象のタブかどうかを見る。
  3. 一覧の状態が「失敗」や「保留中」のまま残っている。次の送信で自動的にやり直されるが、続くようなら、シークレットの再生成とスクリプトの貼り直しを試す。
  4. 古い内容が、別の場所からも登録されている。たとえば、同じ価格表が、過去にアップロードしたファイルにも残っていた、というケースだ。同じ話題を複数の入り口から登録していると、古いほうが答えに顔を出すことがある。入り口は一つに絞るのが、いちばん確実だ。

四つ目は見落とされやすい。「シートに切り替えたつもりだった」現場ほど、昔のファイルが学習データの一覧に残っている。同期を始めるときに、一覧を一度、上から下まで眺めておくといい。

代理店として複数の顧客を見ている場合は、顧客ごとに同じ雛形のシートを用意し、上の4手順をチェックリストにして月次の報告に載せると、運用が「見えるもの」になる。管理者向けのレポートについては、月次レポートの自動化を扱った記事も参照してほしい。

OneBotがやらないこと

誤解のないように、範囲を書いておく。

  • 元のシートの内容が正しいかどうかは確認しない。誤った価格は、誤ったまま学習される。
  • 同期はスクリプトを介したものであり、権限を渡して自動連携するコネクタではない。
  • Googleドキュメント、Googleスプレッドシート、ログインが要るページは、ウェブサイトの読み取りでは扱えない。
  • 回答が常に正しいことは保証しない。資料に書いてあることを根拠に答える仕組みだが、質問の言い方や資料の書き方によって、答えが不十分なことはある。人が確認する運用は残る。
  • 同期の間隔は、毎日、1時間ごと、6時間ごとの三つ。リアルタイムではない。

学習データの保存先は日本国内サーバーだが、回答の生成にはAIのAPIを使うため、質問や資料の一部が外部のAIサービスで処理される点は、社内の規程に照らして確認してほしい。

まず、一枚のシートから

いきなり全部を移す必要はない。いちばん変更が多い表、たとえば価格とキャンペーンの一枚から始めるといい。二週間ほど回してみて、答えが古くならないことを確かめてから、次の表を足す。

導入の失敗パターンは失敗事例の記事に、仕組みとしての幻覚の抑え方は幻覚対策の記事にまとめてある。自分のシートで同期を試したい場合は、無料トライアルからプロジェクトを作って、テスト用のシートで動かしてみてほしい。

よくある質問

スプレッドシートを直してから、ボットに反映されるまでどのくらいかかりますか。

設定した同期間隔に従います。毎日(日本時間0時)、1時間ごと、6時間ごとから選べます。急ぐときは、スプレッドシートのOneBotメニューから手動で送信することもできます。リアルタイム同期ではありません。

ITの知識がなくても設定できますか。

管理画面で生成されるスクリプトを、スプレッドシートのApps Scriptに貼り付け、メニューから一度実行する手順です。プログラミングは不要ですが、貼り付けという手作業は一度あります。初回にはGoogleの未確認アプリの画面が表示され、詳細から許可する操作が必要です。

間違ってシートを空にしてしまったら、ボットの知識は消えますか。

中身が空のときは送信がスキップされ、すでに学習済みのデータは上書きされません。前回から変わっていない場合も同様です。ただし、誤った内容が入っていた場合は、そのまま学習されます。

GoogleスプレッドシートのURLを、ウェブサイトとして読み込ませられませんか。

できません。GoogleドキュメントやGoogleスプレッドシートのURL、ログインが必要なページは、ウェブサイトの読み取りでは扱えません。スプレッドシートは、自動同期の機能を使います。

ExcelやPDFの資料は、同期ではなくアップロードで使えますか。

はい。PDF、DOCX、XLSX、PPTXを1ファイル50MBまでアップロードできます。テキストはアップロード前にブラウザ上で抽出され、元のファイルは保管されてダウンロードできます。変更のたびに自動で反映される機能ではないため、頻繁に変わる表はスプレッドシート同期のほうが向きます。

スクリプトを外部に見せてしまいました。どうすればよいですか。

管理画面で「シークレットを再生成」を押してください。古いシークレットはすぐに無効になります。その後、新しいスクリプトをシートに貼り直します。

同期の結果が正しく学習されたかは、どこで確認できますか。

トレーニングデータの一覧で、各データの状態(学習済み、保留中、学習中、失敗)を確認できます。あわせて、変更した点について実際にボットへ質問して確かめるのが確実です。

関連記事