バック業務効率化

AIで売上日報を自動集計しLINEに通知する方法【旅館・ホテル実践】

AIで売上日報を自動集計しLINEに通知する方法【旅館・ホテル実践】

この記事の要点

旅館・ホテルの売上日報を手入力からAI自動集計に切り替え、毎日LINE通知で届ける仕組みを解説。GAS・Make・Python別の構築手順と、経営判断を翌朝に前倒しするための設計ポイントを具体的に紹介する。

結論:日報作成の30分を5分以下にする構成

旅館・ホテルの売上日報を自動集計してLINEに通知する仕組みは、Google Apps Script(GAS)とLINE Messaging APIを組み合わせるだけで構築できる。PMSやOTAの売上データをスプレッドシートに集約し、毎日決まった時刻にLINEへ送信する流れだ。

日報作成に30〜60分かかっている宿泊施設では、この仕組みに切り替えた翌日から作業時間が5分以下になる。経営者・支配人が翌朝の会議前に前日実績を把握し、当日の価格調整や仕入れ指示に反映できる状態になる。

この記事では、ツール選定から実装手順、AIでコメントを自動生成する拡張まで、現場で動く形で解説する。


なぜ売上日報の自動化が経営に直結するのか

多くの旅館では、フロントや経理担当者がOTA管理画面・POSレジ・PMSを手作業で確認し、Excelに転記して日報を作っている。この作業は夜間チェックアウト後や翌朝の早い時間に集中しやすく、疲弊した状態での入力ミスが起きやすい。

問題は時間だけではない。手作業の日報は「作ることが目的」になりがちで、前日比や目標達成率などの分析が省かれることが多い。結果として、経営者が数字を見るのは週次や月次になり、売上の変化に気づくのが遅れる。

たとえば、連休初日の夕食売上が前年比20%落ちていても、日報が翌朝に届かなければ追加販促の手が打てない。自動集計+LINE通知は、この判断ラグを1日以内に縮める仕組みだ。


自動集計の全体構成を理解する

売上日報の自動化は、以下の3ステップで成立する。

ステップ1:データの集約 PMSやOTA、POSレジの売上データを一か所に集める。

ステップ2:集計・整形 集約したデータを日報フォーマットに変換し、前日比・目標比・客室稼働率などを計算する。

ステップ3:通知 完成した日報をLINEグループに送信する。

この3ステップをつなぐ方法として、以下の3つの選択肢がある。

方法難易度月額費用向いている規模
GAS(Google Apps Script)★★☆0円小〜中規模
Make(旧Integromat)★☆☆無料〜約1,000円小〜中規模
Python+クラウド実行★★★数百〜数千円中〜大規模

GASはGoogleアカウントがあれば無料で使え、スプレッドシートとの相性が抜群なため、旅館の初期導入として最も現実的だ。本記事ではGASを主軸に解説し、Makeでの代替手順も補足する。


GASで日報自動送信を構築する手順

事前準備:データをスプレッドシートに集める

GASの起点はGoogleスプレッドシートだ。PMSがCSVエクスポートに対応しているなら、毎日のCSVをGoogleドライブの特定フォルダに入れるルールを決めるだけでよい。OTAはOTAごとに管理画面からCSVをダウンロードし、同じフォルダに格納する。

完全自動化を目指すなら、MakeやZapierを使ってOTA・PMSのCSVをGoogleドライブに自動転送する前処理を加える。この段階でスプレッドシートにデータが入っている状態を前提に、以下のGAS設定を進める。

スプレッドシートの構成例:

内容
A日付
B客室売上(税抜)
C飲食売上(税抜)
DOTA経由売上
E直販売上
F宿泊者数
G客室稼働率(%)

LINE Messaging APIのチャンネルを作成する

  1. LINE Developersコンソールにログインし、プロバイダーを作成する
  2. 「Messaging API」チャンネルを新規作成する
  3. チャンネル基本設定から「チャンネルアクセストークン(長期)」を発行し、メモしておく
  4. 通知を送りたいLINEグループに作成したBotを招待し、グループIDを取得する(Botがメッセージを受信したときのwebhookログからIDを確認できる)

グループIDの取得が手間な場合、まずは自分個人のユーザーIDに送信する形でテストしてもよい。個人IDはLINE Developersの「ユーザーID」欄に表示されている。


GASのスクリプトを作成する

スプレッドシートのメニューから「拡張機能」→「Apps Script」を開き、以下のコードを貼り付ける。

function sendDailySalesReport() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('売上データ');
  const lastRow = sheet.getLastRow();
  const data = sheet.getRange(lastRow, 1, 1, 7).getValues()[0];

  const date = Utilities.formatDate(new Date(data[0]), 'Asia/Tokyo', 'M月d日');
  const roomSales = Number(data[1]).toLocaleString();
  const fbSales = Number(data[2]).toLocaleString();
  const totalSales = (Number(data[1]) + Number(data[2])).toLocaleString();
  const occupancy = data[6];

  // 前日比を計算(前行がある場合)
  let prevDayComment = '';
  if (lastRow > 2) {
    const prevData = sheet.getRange(lastRow - 1, 1, 1, 7).getValues()[0];
    const prevTotal = Number(prevData[1]) + Number(prevData[2]);
    const currentTotal = Number(data[1]) + Number(data[2]);
    const diff = Math.round((currentTotal / prevTotal - 1) * 100);
    prevDayComment = diff >= 0 ? `前日比 +${diff}%` : `前日比 ${diff}%`;
  }

  const message = `【売上日報 ${date}】\n` +
    `客室売上:¥${roomSales}\n` +
    `飲食売上:¥${fbSales}\n` +
    `合計売上:¥${totalSales}\n` +
    `稼働率:${occupancy}%\n` +
    `${prevDayComment}`;

  const token = 'YOUR_CHANNEL_ACCESS_TOKEN'; // 取得したトークンに差し替える
  const groupId = 'YOUR_GROUP_ID';           // グループIDに差し替える

  const payload = {
    to: groupId,
    messages: [{ type: 'text', text: message }]
  };

  UrlFetchApp.fetch('https://api.line.me/v2/bot/message/push', {
    method: 'post',
    contentType: 'application/json',
    headers: { Authorization: `Bearer ${token}` },
    payload: JSON.stringify(payload)
  });
}

YOUR_CHANNEL_ACCESS_TOKENYOUR_GROUP_IDを実際の値に書き換えて保存する。


トリガーで毎日自動実行する

GASのトリガー設定で、毎日指定時刻にsendDailySalesReportを実行するよう設定する。

  1. Apps Scriptのメニュー「トリガー」を開く
  2. 「トリガーを追加」をクリックする
  3. 実行する関数:sendDailySalesReport
  4. イベントのソース:「時間主導型」
  5. 時間ベースのトリガー:「日付ベースのタイマー」→「午前7時〜8時」

これで毎朝7〜8時の間に前日の売上日報がLINEに届くようになる。


Makeで構築する場合の手順

コードを書きたくない場合は、Makeのノーコードワークフローで同じ仕組みを作れる。

  1. スケジュールトリガー:毎日午前7時に起動
  2. Google Sheetsモジュール:最終行のデータを取得
  3. テキスト集計:日報メッセージを組み立てる
  4. LINE Messaging APIモジュール:グループに送信

Make上ではコードなしで画面操作だけで繋げられる。月1,000オペレーション以内なら無料プランで動く。月30日×1回実行なら30オペレーションで収まるため、ほぼ無料だ。


AIで前日比コメントを自動生成する拡張

数字の集計だけでなく、「昨日は週末にしては稼働率が低め」「飲食売上が目標の120%」といったコメントをAIで自動生成すると、日報の価値が大きく上がる。

GASの場合、OpenAIのAPIまたはClaudeのAPIを呼び出すステップを追加するだけで実現できる。コメント生成に使うプロンプトの例:

以下の旅館の売上データを見て、経営者向けに2〜3文のコメントを書いてください。
箇条書きは不要で、読んですぐ判断できる内容にしてください。

前日:合計売上 ¥850,000、稼働率 72%
当日:合計売上 ¥920,000、稼働率 81%

このプロンプトに実際の数値を差し込み、API経由でコメントを取得してLINEメッセージに追加する。Claude APIの利用料は1回のコメント生成で0.01〜0.03円程度で、月換算でも1円以下に収まる(最新の料金は公式で確認してほしい)。

コメント生成の導入により、数字を見て自分で解釈する手間がなくなり、通知を受け取った経営者がそのまま朝の指示に使える日報になる。


データ集約の精度を上げる3つのポイント

OTAのデータタイムラグを考慮する

楽天トラベル・じゃらん・一休などのOTAは、当日の予約データが反映されるタイミングがそれぞれ異なる。前日の実績として集計する場合、翌朝に正確なデータが揃っているか確認した上でGASを実行する時刻を設定する。OTAの管理画面で「昨日の確定売上」が何時に確定するかを事前に調べておくことが精度向上につながる。

キャンセル分の扱いを明確にする

チェックイン当日キャンセルや無断キャンセルの場合、PMSとOTAで金額の反映タイミングが異なる。日報に含める売上が「入金ベース」か「予約ベース」かをスプレッドシートの設計段階で決めておかないと、月末の帳簿と日報の合計が合わない問題が起きる。

旅館の経理とAI自動化を組み合わせる詳しい考え方は旅館の経理をAIで月次決算を1週間早める方法で解説している。

複数拠点・複数PMSへの対応

2施設以上を運営している場合は、施設ごとのスプレッドシートを別シートに分け、統合集計シートで合算する設計にする。GASで複数シートを参照することは技術的に難しくないが、シート名の命名規則を統一しておかないとスクリプトの修正が増える。施設が3棟以上になる場合は、Makeを使ってデータ取得フローを施設ごとに独立させる方がメンテナンスしやすい。


通知内容を用途別に設計する

LINEグループの受信者によって、通知内容を変えると現場の反応が変わる。

受信者含める項目省く項目
経営者・支配人合計売上・前日比・目標達成率・コメント部門別内訳の詳細
調理長飲食売上・食数・前日比客室売上
フロントリーダー稼働率・チェックイン数・翌日予約数飲食詳細

受信者ごとに別のLINEグループ・別のスクリプトを作ると、それぞれが「自分に必要な数字だけ届く」状態になり、通知の無視が起きにくくなる。

また、異常値を検知したときだけ追加通知する設計も効果的だ。たとえば稼働率が前週平均から15%以上下がった場合に「【要確認】昨日の稼働率が通常より低い水準です」と別メッセージで送ると、毎日の定型通知に埋もれずに気づきやすくなる。

需要予測と売上管理を組み合わせる応用についてはAIで仕入れ・発注の最適量を予測する基礎も参照してほしい。


運用開始後のチェックリスト

自動日報の仕組みを稼働させたら、最初の1週間は以下を確認する。

  • スプレッドシートの最終行が正しい日付のデータを指しているか
  • 前日比の計算が休業日や連泊割引で誤差を出していないか
  • LINE通知が指定時刻通りに届いているか(GASのトリガー実行ログで確認)
  • 数値の単位(税込・税抜)が帳簿と一致しているか

1週間問題なく動いたら、スプレッドシートへの手動入力部分も自動化する検討に進む。POSレジがGoogle Sheetsと連携できる機種であれば、レジの締め作業と同時にスプレッドシートが更新される状態になり、日報作業がゼロになる。


よくある質問

Q. 旅館の売上日報をLINEに自動通知するにはどんなツールが必要ですか? Google スプレッドシート+Google Apps Script(GAS)の組み合わせが最も導入しやすい。PMS・OTAの売上データをスプレッドシートに集約し、GASでLINE Messaging APIに送信する構成で、月額費用ゼロから始められる。

Q. PMSからデータを自動取得することはできますか? PMSがCSVエクスポートやAPIに対応していれば自動取得できる。CSV方式ならGoogleドライブへの自動転送+GASで読み込み、API方式ならMakeやn8nでノーコード連携が現実的。対応状況はPMSベンダーに確認してほしい。

Q. LINE通知の文面はどこで設定しますか? GASの場合はスクリプト内のメッセージ変数を編集する。MakeやZapierを使う場合はワークフローのメッセージステップで自由に設定できる。Claude・ChatGPTなどのAIで前日比コメントを自動生成する拡張も可能。

Q. 売上日報の自動集計でどのくらい時間が削減できますか? 手作業で30〜60分かかっていた日報作成が5分以内に短縮された事例が複数ある。入力ミスの修正対応も含めると、月換算で10〜20時間の削減になるケースが多い。


まとめ

旅館・ホテルの売上日報をAIで自動集計してLINEに通知する仕組みは、GAS+LINE Messaging APIで初日から構築できる。作業時間の削減だけでなく、数字をその日のうちに経営判断に使えるようになる点が最大の効果だ。

まず1施設・1グループへの通知から始め、数値の精度と受信者の反応を確認しながら拡張する順序が現実的だ。AIコメント生成の追加は、数字の集計が安定してから行うと失敗が少ない。

売上管理の自動化が進んだら、次は食材ロスをAI需要予測で減らす実践ステップAIで勤怠データから残業の偏りを見つけるなど、バック業務全体の最適化に繋げていくとよい。

#売上日報#LINE通知#AI自動集計#旅館DX#バック業務効率化#GAS

よくある質問

旅館の売上日報をLINEに自動通知するにはどんなツールが必要ですか?

Google スプレッドシート+Google Apps Script(GAS)の組み合わせが最も導入しやすい。PMS・OTAの売上データをスプレッドシートに集約し、GASでLINE Messaging APIに送信する構成で、月額費用ゼロから始められる。

PMSからデータを自動取得することはできますか?

PMSがCSVエクスポートやAPIに対応していれば自動取得できる。CSV方式ならGoogleドライブへの自動転送+GASで読み込み、API方式ならMakeやn8nでノーコード連携が現実的。対応状況はPMSベンダーに確認してほしい。

LINE通知の文面はどこで設定しますか?

GASの場合はスクリプト内のメッセージ変数を編集する。MakeやZapierを使う場合はワークフローのメッセージステップで自由に設定できる。Claude・ChatGPTなどのAIで前日比コメントを自動生成する拡張も可能。

売上日報の自動集計でどのくらい時間が削減できますか?

手作業で30〜60分かかっていた日報作成が5分以内に短縮された事例が複数ある。入力ミスの修正対応も含めると、月換算で10〜20時間の削減になるケースが多い。