Media > AI活用ユースケース > 営業 > 飲食店にかかってくる予約の電話を通話の文字起こしから予約台帳の下書きにし、聞き漏れを折り返しの確認事項にまとめる

飲食店にかかってくる予約の電話を通話の文字起こしから予約台帳の下書きにし、聞き漏れを折り返しの確認事項にまとめる

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

店舗のスタッフが受けた予約の電話を録音から文字起こしし、日時・人数・名前・連絡先・要望を予約台帳の下書きにします。聞けていない項目があれば、折り返して確かめる事項として一覧にします。

サマリー
生成AI
Azure OpenAI Service/Claude/Gemini
AIサービス
Azure AI
対象業界
宿泊/飲食
対象部門
営業
対象業務
データ入力・転記/内容確認・チェック
主な課題
人手が足りない/入力作業が多い/確認ミスが多い
AIで行う処理
抽出
主な効果
入力漏れ削減/対応スピード向上/工数削減
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
100h/月
AI導入後
40h/月
想定削減
60%
年間削減
720h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 電話を受け、予約の希望日時・人数・名前・連絡先を聞きながらメモ帳に書く
  2. コース・飲み放題・アレルギー・お祝いの有無・席の希望などを、思い出した順に聞く
  3. 予約台帳の画面で空き状況を見て、受けられるかをその場で答える
  4. 電話を切った後、メモを見ながら予約台帳に入力する。ピーク時は営業後にまとめて入力する
  5. メモに抜けがあれば、お客様に折り返して確かめる
  6. 宴会の場合は、人数とコースを厨房に伝える
導入後(After)
  1. 人電話を受け、これまでどおり予約の内容を聞いて空き状況を答える。メモは最小限でよい
  2. 自動通話が終わると、クラウドPBXが録音ファイルを保存場所へ書き出す
  3. 自動録音の保存をきっかけに処理が動き、店舗・着信番号・通話時刻をファイルから取り出す
  4. 自動音声認識が録音を文字起こしし、話者を分けたうえで、発話ごとの時刻と信頼度を返す
  5. 自動生成AIが文字起こしから、日時・人数・名前・連絡先・コース・要望を項目に取り出す
  6. 自動通話した日を基準に日付を確定し、予約台帳の既存の予約と照らして、新規・変更・取消を見分ける
  7. 自動聞けていない項目と、聞き取れなかった項目を分けて一覧にする
  8. 自動予約台帳に「確認待ち」の下書きとして登録し、店舗のタブレットに通知する
  9. 人受けたスタッフが下書きを開き、録音の該当箇所を必要に応じて聞いて、確定する
  10. 人折り返しの確認事項があれば、お客様に電話して聞き、台帳を直す
各工程の詳しい説明を読む
  1. 電話を受け、予約の希望日時・人数・名前・連絡先を聞きながらメモ帳に書く
  2. コース・飲み放題・アレルギー・お祝いの有無・席の希望などを、思い出した順に聞く
  3. 予約台帳の画面で空き状況を見て、受けられるかをその場で答える
  4. 電話を切った後、メモを見ながら予約台帳に入力する。ピーク時は営業後にまとめて入力する
  5. メモに抜けがあれば、お客様に折り返して確かめる
  6. 宴会の場合は、人数とコースを厨房に伝える

(a)聞く順番が人によって違う。 店長は必ずアレルギーを聞きますが、アルバイトリーダーは聞かないことがあります。聞き漏れは、聞いた人の経験でほぼ決まります。 漏れていたことは、当日の来店時か、前日の確認の電話で分かります。

(b)メモが後から読めない。 受話器を肩に挟んで書いたメモは、名前のカタカナと電話番号の数字が崩れます。営業後に打ち直すとき、書いた本人でも読めない数字があります。 その場合は、着信履歴から番号を探し直します。

(c)入力が営業の後ろにずれる。 ピークの時間帯に受けた予約は、台帳への入力が数時間遅れます。その間に別のスタッフが同じ時間帯の予約を受けると、席が重なります。

(d)変更と取消が埋もれる。 「人数が2人増えた」という電話はメモが短く、台帳のどの予約の変更かを探す手間がかかります。

  1. 【人】 電話を受け、これまでどおり予約の内容を聞いて空き状況を答える。メモは最小限でよい
  2. 【自動】 通話が終わると、クラウドPBXが録音ファイルを保存場所へ書き出す
  3. 【自動】 録音の保存をきっかけに処理が動き、店舗・着信番号・通話時刻をファイルから取り出す
  4. 【自動】 音声認識が録音を文字起こしし、話者を分けたうえで、発話ごとの時刻と信頼度を返す
  5. 【自動】 生成AIが文字起こしから、日時・人数・名前・連絡先・コース・要望を項目に取り出す
  6. 【自動】 通話した日を基準に日付を確定し、予約台帳の既存の予約と照らして、新規・変更・取消を見分ける
  7. 【自動】 聞けていない項目と、聞き取れなかった項目を分けて一覧にする
  8. 【自動】 予約台帳に「確認待ち」の下書きとして登録し、店舗のタブレットに通知する
  9. 【人】 受けたスタッフが下書きを開き、録音の該当箇所を必要に応じて聞いて、確定する
  10. 【人】 折り返しの確認事項があれば、お客様に電話して聞き、台帳を直す

9番目が、この設計の分かれ目です。下書きは自動で確定しません。 予約は席と仕込みの量を決めるもので、1件の誤りがそのまま当日の席の重なりや食材の不足になります。 確定のボタンを押すのは、電話を受けた本人か店長です。

6番目で新規・変更・取消を見分けないと、台帳に同じ団体が2件並びます。 着信番号と名前で既存の予約を引き、候補を下書きに添えます。

02今回想定するシステム構成

構成図
予約の電話(店舗のスタッフが受ける)
   │  通話の録音
   ▼【トリガー】クラウドPBXが録音ファイルを書き出す
Azure Blob Storage(録音の保管)
   ▼  保存を検知
Azure Functions
   ├──▶ 店舗・着信番号・通話時刻の取り出し、音声形式の確認
   ▼
Azure AI Speech(高速文字起こし API、ja-JP)
   │   発話ごとの文字・時刻・信頼度・話者を返す
   ▼
Azure OpenAI(構造化出力)
   │   日時・人数・名前・連絡先・コース・要望を項目に取り出す
   │   話していない項目/聞き取れなかった項目を分ける
   ▼
Azure Functions ── 日付の確定、予約台帳の既存予約との照合(新規/変更/取消)
   ▼
予約台帳に「確認待ち」の下書き + 店舗のタブレットへ通知
   ▼
【人が確認して確定】 ──▶ 折り返しの確認事項は人が電話
役割想定する製品代替候補
処理Azure AI Speech(高速文字起こし API)Google Cloud Speech-to-Text、Amazon Transcribe
生成AIAzure OpenAI(Microsoft Foundry)(構造化出力で項目を取り出す)Claude API、Gemini API
連携Azure Functions(録音の保存を起点に処理を動かし、台帳と照合する)Azure Logic Apps
保管Azure Blob Storage(録音と文字起こしの結果)社内のファイルサーバー
電話クラウドPBX(通話録音と書き出し)各社のPBX

予約台帳と電話は、新しく足すものではありません。 予約台帳には「確認待ち」の状態で下書きを入れ、確定は台帳の画面で人が行います。クラウドPBXから録音を書き出す方法は製品ごとに違うため、この部分は利用環境に応じた個別実装になります。 書き出しのAPIがある製品、保存先のストレージを指定できる製品、管理画面から一括でダウンロードする製品があります。

土台になるのは、Azure AI Speech の高速文字起こし API です。 リアルタイムよりも同期的かつ高速に結果を返し、予測可能な低遅延を提供するとされています。入力できる音声の形式は WAV、MP3、OPUS/OGG、FLAC、WMA、AAC、ALAW、MULAW、AMR、WebM、SPEEX で、ファイルは最大500MB、長さは最大5時間です。日本語(ja-JP)は、音声テキスト変換の言語一覧で高速文字起こしの対応が示されています。

バッチ文字起こしを使わない理由は、待ち時間です。 ピーク時には処理が始まるまでに最大30分、完了までに最大24時間かかる場合があるとされ、それではスタッフは結局メモから台帳を打ってしまいます。

返ってくる結果は発話の単位に分かれています。 phrases の要素ごとに、開始位置(offsetMilliseconds)、長さ(durationMilliseconds)、文字、信頼度(confidence、0.0〜1.0)、話者分離を有効にしたときは話者(speaker)が付きます。この信頼度が、第1章で書いた「話していない」と「聞き取れなかった」を分ける材料になります。

03どうやって実装するのか

Step1

処理の起点を決める

クラウドPBXが録音ファイルを保存場所へ書き出したことを起点にします。 保存場所は Azure Blob Storage のコンテナーにし、Azure Functions の Blob ストレージ トリガーで受けます。

トリガーには2つの実装があり、イベントベースのほうが遅延が小さいため推奨とされています。ポーリング型は、従量課金のプランで関数アプリがアイドル状態になっていると、新しいファイルの処理まで最大10分の遅れが出ることがあるとされています。電話を切ってから下書きが届くまでの時間がこの構成の価値なので、イベントベースを選びます。

書き出しの単位は1通話1ファイルにし、ファイル名かメタデータに店舗コード・着信番号・通話の開始時刻を入れてもらいます。付けられないときは、通話の履歴を別に取り出して時刻で突き合わせます。

予約に関係のない電話も録音されます。ここでは振り分けず、AIに「予約の電話か」を最初に判定させます。

Step2

入力データを集める

データ中身取得元
通話の録音1通話1ファイル。音声の形式、長さ、チャンネル数クラウドPBXの書き出し → Blob Storage
通話の情報店舗コード、着信番号、通話の開始時刻と長さ、受けたスタッフの内線番号ファイル名・メタデータ、またはPBXの通話履歴
文字起こしの結果発話ごとの文字・時刻・信頼度・話者Azure AI Speech
店舗の決まり定休日、営業時間、席数、宴会の最少人数、コースと飲み放題の一覧、聞くべき項目の一覧店舗ごとの設定表
既存の予約同じ着信番号・同じ名前の予約、通話日から先の予約予約台帳

質を決めるのは、下の2つです。 店舗の決まりが無ければ、「金曜の7時から」が営業時間内か、コース名が実在するかを照らせません。既存の予約が無ければ、変更の電話を新規として登録してしまいます。 聞くべき項目の一覧は、宴会の多い店舗とカウンター中心の店舗で違うため、店舗ごとに持ちます。

Step3

データの取得方法を決める

録音は、Blob ストレージ トリガーが渡すファイルをそのまま使います。同じファイルで関数が2回呼ばれないよう、実行環境が処理済みの記録(Blob の受領記録)を持つとされています。

取るものどこから何に使うか
録音ファイルBlob ストレージ トリガー文字起こしの入力
発話ごとの文字・時刻・信頼度高速文字起こしの phrases項目の根拠と、聞き取れなかった箇所の特定
話者speaker(モノラルの録音で話者分離を有効にしたとき)お客様の発話とスタッフの発話を分ける
通話全体の文字combinedPhrases生成AIへ渡す本文
既存の予約予約台帳のAPIまたは書き出し新規・変更・取消の見分け

話者の分け方は、録音のチャンネル数で決まります。 PBXが送話と受話を左右に分けたステレオで録るなら、channels に [0, 1] を指定してチャンネルごとに文字起こしします。既定ではすべてのチャンネルがモノラルにまとめられます。モノラルで録るなら、話者分離を有効にし、最大話者数(2〜35の範囲)を2にします。 話者分離はモノラルの音声だけが対象です。

ステレオで録れるなら、ステレオを選びます。 話者を推定する必要がなく、スタッフが復唱した人数とお客様が言い直した人数が違うときに、どちらの発言かを取り違えません。

予約台帳との照合は、着信番号を先、名前を後に引きます。名前は表記ゆれで外れるからです。非通知のときだけ名前と予約日で引きます。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … 第6章の対応形式かを確かめ、PBXが独自の形式で書き出す場合は変換します
  2. 長さとサイズの確認 … 最大500MB・最大5時間です。予約の電話で超えることはまずありませんが、通話の長さが10秒未満のものは無言電話や切断として処理しません
  3. 冒頭の案内の除去 … 録音の冒頭に流れる「この通話は録音されています」の案内は、文字起こしの後に定型文として取り除きます
  4. ロケールの指定 … locales に ja-JP を指定します。既知のロケールを指定すると精度が上がり、遅延が最小化されるとされています。外国語のお客様が多い店舗だけ、候補を複数指定します
  5. 店舗の決まりの読み込み … 店舗コードから、定休日・営業時間・コース一覧・聞くべき項目を引いておきます
  6. 通話日を基準日にする … 「来週の金曜」「今週末」を解釈する基準として、録音の日付ではなく通話の開始日時を渡します

語句を登録して認識を助けるフレーズリストという機能もありますが、日本語で使えるかは公式の言語一覧で確認できなかったため、前提にしません。 コース名の表記ゆれは、後段で生成AIにコース一覧を渡して寄せます。

6番目を軽く見ないでください。 書き出しが翌朝になる製品では、ファイルの日付を基準にすると「明日」の予約が1日ずれます。

Step5

AIに処理させる

させるのは、文字起こしから予約の項目を取り出し、項目ごとに「話されたか」「聞き取れたか」を記録することです。 受けられるかどうかの判断はさせません。

取り出すもの取り出し方判断できないときの扱い
予約の電話か予約の新規・変更・取消、問い合わせのみ、予約以外迷えば inquiry(問い合わせのみ)にして人へ
来店日発話の表現をそのまま残し、基準日から日付を計算する「来週あたり」など幅があれば ambiguous
来店時刻「7時」は営業時間から19時と解釈する午前と午後のどちらも営業していれば ambiguous
人数最後に合意した人数。大人と子どもを分ける言い直しがあり最後が分からなければ ambiguous
名前お客様が名乗った表記(カタカナ)信頼度が低ければ unreadable
連絡先着信番号と別の番号を言われたときは両方数字が欠けていれば unreadable
コース・飲み放題店舗のコース一覧のどれに当たるか一覧に無い名前なら原文のまま ambiguous
要望アレルギー、お祝い、席の希望、子ども用の椅子など話されていなければ空の配列

右端の列で、missing と unreadable を分けます。 missing は通話の中でその項目が話されていないということ、unreadable は話されているが文字として確定できないということです。前者は折り返して聞くもの、後者は録音を聞き直せば済むものです。 分ける材料は、文字起こしが返した発話ごとの confidence です。

させないこと理由
受けられるかの判断席の割り振りは店舗の判断。台帳を見て人が決める
名前の漢字の推測「サトウ」を「佐藤」にしない。漢字はお客様に確かめる
電話番号の補完着信番号から欠けた桁を埋めない
アレルギーの重さの判断「えびが苦手」を「アレルギーなし」にも「重度」にもしない。原文のまま残す
コース名の新規作成一覧に無いコース名を作らない

4行目がいちばん大事な制約です。 「苦手」か「アレルギー」かで厨房の対応は変わるため、重さは店長が電話で確かめます。

Step6

指示内容を固定する

あなたは飲食店の予約担当です。電話の文字起こしから、予約台帳の下書きを作ります。
文字起こしに書かれていることだけを使ってください。推測で埋めないでください。

【まず判定すること】
call_type を次から1つ選んでください。
- new ......... 新しい予約
- change ...... 既存の予約の変更(人数・時刻・コースなど)
- cancel ...... 既存の予約の取消
- inquiry ..... 空き状況やコースの問い合わせのみで、予約は成立していない
- not_reservation ... 予約と関係のない電話
迷ったときは inquiry を選んでください。

【取り出す項目】
visit_date / visit_time / party_size / guest_name / contact /
course / requests

【status の選び方】
- ok ......... 通話の中で話され、値として確定できる
- missing .... 通話の中で話されていない
- unreadable . 話されているが、文字起こしの信頼度が低く値を確定できない
- ambiguous .. 値の候補が複数あり、1つに決められない
迷ったときに ok を選ばないでください。

【厳守事項】
- 日付は基準日 {call_datetime} から計算し、value に YYYY-MM-DD で入れてください。
  お客様の言い回しは spoken に原文のまま入れてください。
- 時刻は営業時間 {business_hours} の範囲で解釈してください。
  範囲内に候補が2つあるときは ambiguous にしてください。
- 人数は、通話の中で最後に双方が合意した値を入れてください。
  言い直しがあった場合は、evidence に両方の発話を写してください。
- 名前は、お客様が名乗った読みをカタカナで入れてください。漢字に直さないでください。
- 電話番号は、話された数字だけを入れてください。桁を補わないでください。
- コースは、次の一覧のどれに当たるかを選んでください:{course_list}
  一覧に無い名前なら、原文のまま入れて ambiguous にしてください。
- アレルギーや苦手な食材は、お客様の言い回しをそのまま requests に入れてください。
  「苦手」と「アレルギー」を言い換えないでください。重さを判断しないでください。
- 受けられるかどうか、席が空いているかは書かないでください。
- 各項目の evidence には、根拠にした発話をそのまま写し、
  その発話の offset_ms と speaker と confidence を添えてください。
- 店舗が聞くべき項目 {required_items} のうち、missing のものを
  callback_items に並べ、お客様に聞く一文を添えてください。

【文字起こし】{phrases}
【既存の予約の候補】{existing_reservations}

「迷ったときに ok を選ばない」を明記しないと、人数や日付が埋まります。 文字起こしの中には「4名」「5名」がどちらも出てくることがあり、何も言わなければ最初か最後のどちらかを選んで ok にします。言い直しを evidence に両方残させることで、確認する人が録音の該当箇所へすぐ飛べます。 「漢字に直さない」も同じ理由で、確かめていない漢字が台帳に載ることを防ぎます。

Step7

出力形式を固定する

次の形のJSONで受け取ります。

{
  "call_id": "",
  "store_code": "",
  "call_type": "new | change | cancel | inquiry | not_reservation",
  "matched_reservation_id": null,
  "fields": [
    { "item": "party_size", "status": "ok | missing | unreadable | ambiguous",
      "value": "", "spoken": "", 
      "evidence": [ { "text": "", "offset_ms": 0, "speaker": "", "confidence": 0 } ] }
  ],
  "requests": [ { "category": "allergy | celebration | seating | other", "spoken": "" } ],
  "callback_items": [ { "item": "", "question": "" } ],
  "draft_status": "ready_to_confirm | needs_callback | needs_listen"
}

fields には、visit_date / visit_time / party_size / guest_name / contact / course の6つの要素を並べます。

構造化出力を使う理由の1つ目は、台帳の項目にそのまま流し込めることです。 json_schema に strict: true を指定し、渡した JSON スキーマに従わせます。すべてのフィールドを required にする必要があり、省略してよい項目は null との組み合わせの型で表すとされています。matched_reservation_id が null を取るのはこのためです。

2つ目は、status と draft_status を別の層に置けることです。 fields はAIが埋め、draft_status は Azure Functions が規則で決めます。

draft_status条件
ready_to_confirm店舗が聞くべき項目がすべて ok
needs_listenunreadable または ambiguous が1つでもある(録音を聞けば解決する見込み)
needs_callback聞くべき項目に missing が1つでもある

3つ目は、スキーマで書けない制約をコードで確かめられることです。 構造化出力では、文字列の pattern や format、minLength などのキーワードが使えないとされています。電話番号の桁数や日付の形式は、受け取った後に Azure Functions で検査します。

Step8

システムへ連携する

つなぎ先方式内容
クラウドPBX製品の書き出し機能録音ファイルを Blob Storage へ置く(個別実装)
Azure Blob StorageBlob ストレージ トリガー(イベントベース)保存を検知して関数を動かす
Azure AI Speech高速文字起こし API発話ごとの文字・時刻・信頼度・話者を返す
Azure OpenAI構造化出力予約の項目と聞き漏れを返す
予約台帳台帳のAPI、または取り込み用のファイル「確認待ち」の下書きを登録し、既存の予約を引く
店舗のタブレット台帳の通知、またはチャットへの投稿下書きが届いたことを知らせる

予約台帳へは「確認待ち」の状態でしか書き込みません。 確定済みの予約を上書きする経路は作りません。変更の電話でも、既存の予約はそのままにし、変更の下書きを横に並べます。 人が確定したときに初めて既存の予約が書き換わります。

Step9

人が確認する

人が見るのは、すべての下書きです。 ただし、見る深さを draft_status で変えます。

  1. ready_to_confirm は一覧で確かめて確定する … 日時・人数・名前・連絡先を目で見て、台帳の空き状況と照らして確定します。録音は聞きません
  2. needs_listen は該当箇所だけ聞く … evidence の offset_ms から録音の該当箇所を再生し、値を直して確定します
  3. needs_callback は折り返す … callback_items の一文を見ながらお客様に電話し、聞けた値を入れて確定します
  4. AIの値を直したら記録する

1番目を「確定するだけ」にしないでください。 下書きの日時が正しくても、その時間帯にすでに貸切が入っていることがあります。確認は、電話を受けたスタッフが内容を覚えているうちに、営業の合間に行います。

Step10

例外に対処する

起きること対応
録音の形式が対応外変換して再投入。変換できなければ担当へ通知して手入力
通話が10秒未満無言電話・切断として処理しない
予約以外の電話not_reservation として下書きを作らず、件数だけ記録
店内の音で信頼度が全体に低いneeds_listen。続くなら受話器の位置を見直す
変更・取消の元の予約が見つからないmatched_reservation_id を null にし、人が探す
同じ通話が二度書き出された開始時刻と着信番号で重複を見て、二重に下書きを作らない
文字起こしで429や5xxが返る最大5回まで、2・4・8・16・32秒の間隔を空けて再試行。400・401・422は再試行しない
関数が何度も失敗する既定で5回の再試行の後、webjobs-blobtrigger-poison のキューに入る。毎朝このキューを見る

最後の行は運用で拾います。下書きが来ない電話は、スタッフにとって「AIに任せたはずの予約」です。 失敗の一覧を店舗ごとに毎朝出します。

Step11

記録を残す

  • 録音ファイルと、店舗コード・着信番号・通話の開始時刻
  • 文字起こしの結果の全文(phrases の文字・時刻・信頼度・話者)
  • 生成AIが返したJSON(fields、requests、callback_items)
  • 規則で決めた draft_status と、そのとき参照した店舗の決まり(コース一覧・聞くべき項目)
  • 人が値を直した記録 … どの項目を、どの値からどの値に直したか
  • 店舗ごと・時間帯ごとの unreadable の発生率

4つ目で店舗の決まりを残すのは、宴会のコースが季節で入れ替わるためです。

録音の保存期間は先に決めます。 名前と電話番号を含む音声を無期限に残す理由はありません。

04実装レベルの3段階

最小構成:録音を手で文字起こしし、生成AIの画面に貼って項目を取り出す / 1通話ごとの項目の取り出し
半自動化:上記+録音の保存を起点に文字起こしと取り出しを自動で行い、下書きを一覧に書き出す / 文字起こしと項目の一覧化
本格構成:上記+予約台帳と照合して新規・変更・取消を見分け、「確認待ち」の下書きと折り返しの確認事項まで出す / 電話の後の台帳入力と聞き漏れの洗い出し

最小構成では件数がさばけません。 1本ずつ文字起こしして貼り付けるので、月1,200件には使えません。確かめるための段階です。 半自動化で、1件5分が3分程度になります。 文字起こしと項目の取り出しは自動になりますが、一覧から予約台帳へ打ち直す作業と、変更の電話がどの予約のものかを探す作業が残ります。本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、台帳への打ち直しと既存の予約の照合が、1件ずつの手作業だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、unreadable の多い店舗と時間帯が先に分かります。そこを直してから台帳につなぐほうが、手直しが減ります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
24 名
月間件数
1,200 件
1件あたり現在時間
5 分
1件あたり導入後時間
2 分
現在  1,200件 × 5分 ÷ 60 = 100 時間/月
導入後 1,200件 × 2分 ÷ 60 = 40 時間/月
月間削減時間
60h
削減率
60%
年間削減時間
720h
年間金額換算(時間単価1,800円)
130万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 複数の店舗を持つ居酒屋・レストラン・宴会場、レストランを併設する宿泊施設など、予約の多くがいまも電話で入り、営業中のスタッフが受話器を取っている場合。電話を受けながら紙に書き、営業の合間に予約台帳へ打ち直している場合。人数・アレルギー・コースの聞き漏れで、当日になって慌てることがある場合。通話を録音できるクラウドPBXを使っているか、入れ替えを検討している場合。
向いていない
  1. 予約の大半がネット予約で入り、電話は1日に数本しかない場合。通話の録音ができない電話機を使い続ける場合。席の割り振りや予約の受け付けそのものをAIに確定させたい場合(この構成は下書きまでで、確定は人が行います)。お客様に通話の録音を案内できない事情がある場合。

07最小構成で試す方法

  1. 先月の予約の電話から20本の録音を選ぶ(うち数本は、聞き漏れや言い直しがあったと分かっているものを入れる)
  2. その20本について、当時の予約台帳の登録内容を書き出しておく
  3. 録音を Azure AI Speech の Foundry の画面などで文字起こしし、結果をテキストにする
  4. 手元の生成AIの画面に文字起こしを貼り、「日時・人数・名前・連絡先・コース・要望を取り出してください。話されていない項目と、聞き取れない項目を分けてください。名前を漢字に直さないでください」と指示する
  5. 出てきた値を、当時の台帳の内容と突き合わせる

組む前に、「この店の電話の音で文字起こしが使えるのか」を確かめます。

出てきた内容判断
台帳と同じ値が出て、聞き漏れも当時と一致したトリガーと台帳の連携に進む
名前を漢字に直した、人数の言い直しを片方だけ取った指示の書き方で直る。構成は有効
店内の音で文字起こしの信頼度が全体に低い録音の環境が先。 AIの問題ではない

3行目が出ることは珍しくありません。 厨房の換気扇やレジの音が入る店舗では、受話器の位置を変えるかヘッドセットに替えて、同じ条件で録り直してください。

08実装時につまずきやすいポイント

問題対策
「明日」の予約が1日ずれる録音ファイルの日付ではなく通話の開始日時を基準日にする
人数の言い直しで、最初の値を取る最後に合意した値を取らせ、evidence に両方を残す
missing と unreadable が混ざる発話の信頼度で分ける。混ぜると、お客様に同じことを聞き直す
名前がそれらしい漢字になるカタカナのまま残すことを指示に明記する
「苦手」が「アレルギー」に言い換わる原文の言い回しを残させ、重さは人が確かめる
変更の電話が新規として登録される着信番号で既存の予約を先に引き、候補を添える
話者が入れ替わって記録されるステレオで録れるならチャンネルを分ける。 モノラルなら最大話者数を2にする
下書きが営業後まで放置される営業の合間に見る運用にする。まとめて見ると Before に戻る
処理に失敗した録音に誰も気づかない失敗の一覧を毎朝店舗へ出す
予約台帳を自動で確定させたくなる確定は人が行う。 席の判断は台帳を見る人の仕事

上の3行が、この構成の失敗のほとんどです。 どれも下書きの値がそれらしく埋まって見えます。根拠を発話と信頼度に置くことで防ぎます。

最後の行は、運用が回り始めた頃に出てきます。 そこで確定を外すと、誤った下書きがそのまま当日の席になります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: お客様の名前、電話番号、来店の日時と人数、アレルギーや持病に関わる発言、お祝いの内容、そして通話の音声そのものです。

  1. 録音していることをお客様に知らせる … 録音の冒頭に、通話を録音している旨と、その目的(予約内容の確認)を案内します。目的に予約台帳の作成が含まれることを、案内の文言に入れておきます
  2. 録音と文字起こしの保存期間を決める … 予約の日を過ぎて一定期間たったものは削除します。アレルギーの発言を含む音声を、目的を超えて残さないでください
  3. アレルギーの判断を機械に委ねない … 取り出すのは言い回しまでです。厨房に伝える前に、店長がお客様に確かめます。 取り違えはお客様の健康に関わります
  4. 予約以外の電話の扱いを決める … 仕入先や求人の電話も文字起こしされます。予約以外と判定したものは、結果を早めに消す設計にできます
  5. 保管場所へのアクセスを店舗ごとに分ける … 録音と下書きは、その店舗のスタッフと本部の担当だけが見られるようにします
  6. 生成AIへ渡す範囲を通話の文字起こしと店舗の決まりに限る … 予約台帳の全件や顧客の一覧を渡す必要はありません。既存の予約は、着信番号で引いた候補だけを渡します

誤りが起きた場合のリスクは、予約の内容が違って登録されることと、聞き漏れを見落とすことの2つです。 前者は確定を人が行うことで、後者は missing を折り返しの確認事項として必ず出すことで防ぎます。

10まず何から始めるか

1週目:店舗ごとの決まりを表にする

8店舗それぞれについて、営業時間・定休日・コースと飲み放題の一覧・電話で必ず聞く項目を表にします。聞く項目は、店長に「当日困ったことがある項目」を挙げてもらうと早く決まります。この表が、聞き漏れの判定の基準になります。

2週目:20本で試す

宴会の多い店舗の先月の録音から20本を選び、文字起こしして手元の生成AIに貼り付けます。当時の台帳の内容と突き合わせ、名前を漢字に直していないか、人数の言い直しを正しく取れているかを最優先で見ます。

3週目:録音の書き出しと台帳の取り込みの方法を確かめる

クラウドPBXで、1通話1ファイルで書き出せるか、着信番号を付けられるか、ステレオで録れるかを確かめます。予約台帳に「確認待ち」で登録する方法も確かめます。

4週目:1店舗で文字起こしから一覧までをつなぐ

1店舗の録音を Blob Storage に置き、Azure Functions から文字起こしと項目の取り出しを呼んで、下書きを一覧に書き出すところまで作ります。この時点では台帳に書き込まず、一覧だけを見ます。

2か月目: 予約台帳との照合と「確認待ち」の下書きの登録を足し、needs_listen と needs_callback の件数を毎週数えます。3か月目以降: 残りの店舗へ広げ、1件5分が何分になったかを実測します。店舗ごとの unreadable の発生率を見て、録音の環境を見直した時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-06/最終更新:2026-10-06
確認した内容情報源確認日
高速文字起こし API がリアルタイムより同期的かつ高速に結果を返すこと。対応形式(WAV、MP3、OPUS/OGG、FLAC、WMA、AAC、ALAW、MULAW、AMR、WebM、SPEEX)、最大500MB・最大5時間。ロケール指定で精度が上がること。話者分離の最大話者数が2〜35で、モノラル音声のみが対象であること。channels でステレオをチャンネルごとに処理でき、既定ではモノラルにまとめられること。出力の phrases に開始位置・長さ・信頼度・話者が付くこと。再試行の推奨(最大5回、2〜32秒の指数バックオフ、429と5xxは再試行し400・401・422は再試行しない)Microsoft Learn: 高速文字起こし API2026-10-06
バッチ文字起こしがベストエフォートでスケジュールされ、ピーク時は開始まで最大30分、完了まで最大24時間かかる場合があることMicrosoft Learn: バッチ文字起こしの概要2026-10-06
音声テキスト変換で ja-JP が対応し、高速文字起こしにも対応していることMicrosoft Learn: Speech service language support2026-10-06
構造化出力が json_schema と strict: true で JSON スキーマに従わせること。全フィールドを required にし、省略可能な値は null との組み合わせで表すこと。additionalProperties: false が必要なこと。プロパティ合計100個・入れ子5段まで。pattern・format・minLength などが使えないことMicrosoft Learn: Structured outputs(Azure OpenAI)2026-10-06
Blob ストレージ トリガーにイベントベースとポーリング型があり、イベントベースが低遅延で推奨されること。ポーリング型は従量課金プランでアイドル時に最大10分遅れること。Blob の受領記録で同じファイルの二重実行を防ぐこと。既定で5回失敗すると webjobs-blobtrigger-poison キューに入ることMicrosoft Learn: Azure Blob storage trigger for Azure Functions2026-10-06

クラウドPBXから録音を書き出す方法と、予約台帳への登録の方法は、使っている製品の仕様を確かめてください。 本記事は Microsoft Learn で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0546)についてのご相談はこちらから。

AI活用について相談する
目次