本文へスキップ
NextCode.ltd
開発事例

声で答える接客AIは、話した分だけ料金がかかる ― スマホ119の「スマホ君」

声で答える接客AIは、話した分だけ料金がかかる ― スマホ119の「スマホ君」

声の接客では、丁寧な長い説明がそのまま待ち時間になり、料金になる。短く答えさせるところから、設計が始まった。

スマホ修理店スマホ119のサイト(iphone119.xyz)の右下に、ピンクのキャラクターがいます。名前はスマホ君。押すと、文字でも声でも修理の相談ができる接客AIです。

スマホ119 接客AI(音声対応チャットボット)の画面

作り始めたのは2026年6月7日。サイト本体はPHPのCMSのまま触らず、AIの部分だけを別のNext.jsアプリにして、ページに <script> を1行足して載せています。

9月11日、声の方をGPT-Live 1に載せ替えました。聞きながら同時に話せて、相づちも打てるモデルです。ただしこれ、話した時間で料金が決まる。1分0.05ドル。そこから先の設計は、ほぼ全部が「時間」の話になりました。

1声の相談には、上限を3つ付けた

切り忘れや連打がそのまま請求になるので、上限はブラウザではなくサーバー側で止めています。

1回の通話は3分まで。同じ人は直近24時間で5回まで。サイト全体で月300分に達したら、声の受付を止める。文字の相談には回数の上限を付けていません。

最初は「1日3回」でした。翌日のコミットで、日付で区切る数え方をやめて「直近24時間で5回」に変えています。使い切ったときは、次の1回が戻るまでの時間を画面に出す。

2丁寧に話すほど、3分が短くなる

最初のデモで測ったら、スマホ君の返事は平均163字ありました。読み上げると48秒。3分の通話で4往復しかできません。

文字なら、丁寧な説明は親切です。声だと、それがそのまま待ち時間になり、料金になる。指示を「2文まで・80文字以内」「料金を聞かれたら聞き返さずに、まず金額を1つ言う」「URLは読み上げない」に書き換えて、測り直しました。

返事の長さを縮める前と後(2026年9月11日の実測)

項目書き換え前書き換え後
返事の平均163字◎49字
1往復にかかる時間約40秒◎約18秒
3分でできる往復4往復◎10往復

とはいえ、短ければいいわけでもない。9月18日には、「詳しく教えて」「違いは?」と聞かれたときだけは理由や選択肢を省かずに話す、という決まりを足しました。どこまで削るかの境目は、今も迷いながら動かしています。

調べものは別のモデルに任せています。話すのはGPT-Live 1、料金や店舗を調べて短く返すのは裏方のモデル。この裏方を選ぶとき、同じ質問で返ってくるまでの時間を比べました。

裏方モデルの候補(同じ質問で返るまでの時間)

モデル返るまで判断
gpt-5.6-terra4.72秒使わない
gpt-5.6-luna2.04秒◎採用
gpt-4.1-mini1.88秒最速だが見送り

一番速いのは4.1-miniです。でも4.1の系統は整理が始まっていて、0.16秒のために寿命の短いモデルを選ぶのはやめました。コードのコメントには「音声会話で4秒超の沈黙は致命的」と書いてあります。

3数え方で2回つまずいた

上限を付けてすぐのテストで、間違いが2つ見つかりました。

1つ目。最初は、使った人をIPアドレスとブラウザの情報で見分けていました。これだと、携帯のキャリアや店のWi-Fiでつないでいるお客さんが、全員同じ1人に見える。誰かが使い切ると、一度も使っていない別の人の画面に「残り0回」が出ていました。

今はブラウザごとに持たせたIDで数えています。スマホ君は別のドメインから配信してサイトに埋め込む形なので、cookieは当てにできず、IDはリクエストのヘッダーで渡す。厳密に1人を特定する仕組みではないので、最後の歯止めはサイト全体の月300分です。

2つ目。終話ボタンを押さずにタブを閉じると、使った秒数が0のまま残っていました。お客さんは、まず押さずに閉じます。料金は発生しているのに月の集計に入らない。これでは上限が効きません。

ページを離れるときに sendBeacon で秒数を送るようにしました。ところがこれ、失敗しても例外を出さず false を返すだけのことがある。なので false のときは keepalive 付きの送信に切り替えます。それでも取りこぼした会話は、5分おきに動く処理がサーバー側で締めて、スタッフ向けの要約メールを最大3回まで送り直す。

4答えを作らせず、調べさせる

前の版は、返事の中のキーワードを正規表現で拾ってボタンを出していました。今はAIが会話の流れから道具を呼びます。道具は料金、店舗カード、最寄りの店、ページ案内、会社情報の5つ。料金の道具の説明には「推測で金額を言わないこと」と書いてあります。

それでも取り違えはありました。「iPhone 15」で引くと、15・15 Pro・15 Plus・15 Pro Maxが全部返ってきて、AIが別の機種の金額を読んだ。今は、ProやPlusといった肩書きまで一致する行だけに絞って渡しています。声の聞き取りで「じゅうなな」や「十七」になった機種名も、17に読み替えます。

ページ案内の道具は、自分ではページを移動しません。予約ページへ飛ぶと、その瞬間に通話が切れるからです。カードを出すところまでがスマホ君の仕事で、押すのはお客さん。

固有名詞の読みも指示に書き込みました。「宜野湾本店は『ぎのわんほんてん』と発音する。『よろしのわん』とは発音しない」。読み違えやすい店名には、読みがなも添えています。

5「切られた」と思わせない終わり方

9月14日に、3分で切れたあとの画面を見直しました。吹き出しが1つ出るだけで、次に押せるものが何もない。これでは、お客さんは切られたと思うかもしれない。

残り30秒で表示をオレンジに、残り10秒でピンクの大きなカウントダウンにしました。切れたあとは枠付きのカードで「切れたわけじゃないよ」と伝えて、「もう一度 話す」「予約する」「近くのお店に電話」の3つのボタンを並べる。

「もう一度 話す」はワンタップでつなぎ直します。ただ、つなぐ前に必ずサーバーへ残り回数を聞く。終わった直後の画面の数字は、1回多く見えることがあるからです。お金が動く操作なので、ここは画面を信用していません。

捨てた案もあります。9月11日の載せ替えでは、GPT-Live 1がつながらなければ、黙って前の音声方式へ落とす作りにしていました。お客さんを無言にしないためです。これは翌日のコミットで外していて、そのとき消えたのは287行。今は、つながらなければ「文字で話しかけてね」と出して、文字で挨拶します。

6正直に言うと、まだ分からないこと

返事の速さは測ってあります。96秒の会話で、返事までの間は中央値0.00秒、最大0.76秒。お客さんが話している途中の相づちが22回。ただしこれは、合成音声を偽のマイクに流して測った数字です。人がスマホに向かって話したときの同じ測定は、記録にまだありません。

料金も読み切れていません。上限は月300分なので、使う分数の天井は決まっています。ところがコードの中には、1分7.5円で出した試算と、声の入出力を合わせた概算として1分25円という数字が並んでいる。どちらが実際の請求に近いのか、この記事の時点では答えを持っていません。

言語でも失敗しました。9月23日、英語で話しかけてきたお客さんに、日本語でしか案内できないと断っていた記録が見つかった。日本語モードの指示に「お客様が外国語で話しかけても日本語のまま対応する」と書いていたのが原因です。その日のうちに、お客さんが話した言語へ合わせるように変えて、画面の表示も11言語にしました。

それから、声の相談で店の電話がどれだけ減ったのか。そこを数字で言える材料は、今は持っていません。

スマホ君の概要は作品ページにまとめています。ほかの開発記録はブログ一覧へ。自分の店のサイトにも声で答える受付を置きたい、という相談はお問い合わせからどうぞ。人の声で測った数字が取れたら、また書きます。

この記事を書いた人

NextCode(沖縄県宜野湾市)は、iOSアプリ・ホームページ/LP・NFCデジタル名刺・AI業務自動化を作っている開発スタジオです。ここで書いているのは、実際に作って公開したものと、その過程で詰まったことだけです。

お問い合わせフォームは24時間受け付けています。

この記事が役に立ったらシェアしてください