旅館のLINE業務自動化
完全ガイド
採用の応募受付からシフト希望収集、日々の出退勤打刻・給与計算の元データ作成まで。
旅館スタッフがすでに使い慣れているLINEだけで、バックオフィス業務を丸ごと自動化します。
設定手順・リッチメニューの自動切替・GASコードのコピペ設定を1記事に集約しました。
目次(タップで開閉)
事前準備・確認事項
共通設定を始める前に4つを準備
すべて揃ったら設定スタートです
| 準備するもの | 内容 |
|---|---|
| 📱 LINE公式アカウント | 旅館のアカウントが作成済みであること(LINE公式サイトから無料で作成可) |
| 💻 Lmessageアカウント | 有料プランに契約済みで l-message.com にログイン可能なこと |
| 📊 Googleアカウント | スプレッドシート連携に使うGoogleアカウント |
| 📝 スプレッドシート | 「応募者管理」「シフト希望」「勤怠記録」の3シートを作成しておく |
Lmessageにログイン・LINE連携する
共通Lmessageにログインする
パソコンでブラウザを開いてアクセス
- 1ブラウザのアドレスバーに「l-message.com」と入力してアクセス
- 2メールアドレスとパスワードを入力して「ログイン」
- 3「アカウント連携」から旅館のLINE公式アカウントを選択して連携
タグ設計 ― 最初に全部まとめて作る
共通採用・シフト・勤怠のタグを一括作成
「友だち管理」→「タグ管理」→「+タグを追加」
タグはスタッフや求職者に貼る「名札」です。タグを使うと「出勤中の人だけにLINEを送る」「未回答者だけにリマインド」といったピンポイント配信ができます。あとの設定がスムーズになるよう、最初にまとめて作っておきましょう。
🟢 採用系タグ
🔵 シフト系タグ
🟡 勤怠系タグ(状態タグ)
| 特に重要なタグ | 使うタイミング |
|---|---|
| 応募者 / 未選考 | 友だち追加時に自動付与。採用フローの起点 |
| スタッフ | 採用決定時に付与。リッチメニューの表示切替に使用(後述) |
| 希望収集済 | シフト希望を回答したら自動付与。未回答者へのリマインドに使用 |
| 本日出勤 | 当日出勤予定者に付与。勤怠メニュー切替・出勤リマインドに使用 |
| 出勤中 / 休憩中 / 退勤済 / 未打刻 | 打刻ボタンを押すたびに自動で切り替わる状態タグ |
Googleスプレッドシート連携(1回だけ)
共通LmessageとGoogleスプレッドシートをつなぐ
設定 → 外部連携 → Googleスプレッドシート
- 1左メニュー「設定」→「外部連携」→「Googleスプレッドシート」→「Googleアカウントで認証」
- 2旅館のGoogleアカウントでログインして認証を完了する(認証は一度だけでOK)
- 3各フォームの完了アクションに「スプレッドシートへ書き込み」を追加し、下記シートの列にマッピングする
3つのシートの役割
| シート名 | 記録される内容 | 連動する機能 |
|---|---|---|
| 応募者管理 | 氏名・年齢・雇用形態・希望職種・面接日程 | 採用フォーム(PART 1) |
| シフト希望 | 受信日時・スタッフ名・担当・希望休日 | シフト希望フォーム(PART 2) |
| 勤怠記録 | 日付・氏名・出勤/退勤時刻・休憩・実働時間 | 打刻ボタン(PART 3) |
採用をLINEで完全自動化する
友だち追加から面接確定まで全自動。管理者の手作業は合否連絡のみ。
あいさつシナリオ(友だち追加時)
採用フロー友だち追加した瞬間に自動でメッセージが届く
管理者は何もしなくてOK
- 1「シナリオ配信」→「+新規作成」
- 2トリガー「友だち追加時(followイベント)」、タイミング「即時(0分後)」
- 3「メッセージを追加」→「テキスト」で下の文面を入力
- 4「アクションを追加」→「タグ付与」で「応募者」「未選考」を設定
ご応募いただきありがとうございます。
ご希望の職種を番号でお知らせください。
【1】フロントスタッフ
【2】客室スタッフ
【3】料理補助スタッフ
職種分岐〜応募完了シナリオ
採用フロー「1」「2」「3」の返信で職種ごとに自動分岐
番号を送ると自動でその職種の案内が届く
求職者が「1」「2」「3」のいずれかを送ると、Lmessageが自動でその職種の案内を送信。続けて氏名・年齢・雇用形態をフォームで聞き、面接日程を選んでもらいます。
- 1「キーワード応答」→「+追加」→ キーワード「1」→ 職種タグ付与+フロントシナリオへ移行
- 2同様に「2」→客室、「3」→料理補助のキーワード応答を設定
- 3各職種でフォーム機能により「氏名・年齢・雇用形態・面接日程」を順番に収集
- 4完了アクション:確定メッセージ送信+管理者通知+「応募者管理」シートへ書き込み
〇月〇日(月)10:00 に面接を承りました。
場所:旅館フロント
当日は10分前にお越しください。
前日と当日朝にリマインドをお送りします。
面接リマインド設定
採用フロー前日と当日朝に自動でリマインドが届く
面接のすっぽかしを防げる
面接が決まったら、前日18時と当日朝8時に自動でリマインドが届きます。「ステップ配信」で設定すれば、何人応募が来ても全自動です。
- 1「ステップ配信」→「+新規作成」→ トリガー「タグ付与時(面接:〇月〇日)」
- 2STEP1:タグ付与から〇日後 18:00に「前日リマインド」を送信
- 3STEP2:タグ付与から〇日後 08:00に「当日リマインド」を送信
シフト希望収集をLINEで自動化する
毎月20日に全スタッフへ自動配信。希望収集から未回答リマインドまで自動。
シフト希望収集 タイマー配信
シフト管理毎月20日に全スタッフへ自動でLINEが届く
締切前日に未回答者へリマインドも自動送信
毎月20日の正午に全スタッフへ希望収集のLINEが自動で届きます。返信していない人には25日夜にリマインドも自動送信されます。
- 1「ステップ配信」→「+新規作成」→ トリガー「日時指定(繰り返し)」
- 2繰り返し設定:毎月20日 12:00、配信対象:タグ「スタッフ」全員
- 3STEP2:毎月25日 20:00、対象:タグ「希望収集済」を持たないスタッフ(=未回答者のみ)
来月のシフト希望を受け付けます。
休みたい日をすべてお知らせください。
例:「7日、14日、21日」
締切:今月25日(日)23:59
シフト希望受付シナリオ
シフト管理「希望申請」と送るとフォームが自動起動
入力するとスプレッドシートに自動記録
- 1「キーワード応答」→ キーワード「希望申請」(部分一致)を設定
- 2アクション:フォーム「シフト希望収集フォーム」を起動
- 3完了アクション①:タグ「希望収集済」を付与
- 4完了アクション②:「シフト希望」シートへ自動書き込み
「シフト希望」シートの列マッピング
| Lmessageフォーム項目 | 列 |
|---|---|
| 受信日時(自動) | A列 |
| LINEユーザーID(自動) | B列 |
| スタッフ名(自動) | C列 |
| タグ「〇〇担当」 | D列 |
| 質問1(希望休日) | E列 |
| 回答ステータス(自動:回答済) | F列 |
出退勤・休憩の打刻をLINEで自動化する
1タップで打刻・集計。実働時間の計算から給与計算の元データ作成まで全自動。
勤怠管理システムの全体像
勤怠管理スタッフがすでに使い慣れているLINEを活用することで、専用アプリのインストールや操作研修なしに勤怠管理を導入できます。
出勤・退勤・休憩の打刻フロー
勤怠管理出勤フロー
朝、仕事を始めるときにボタンを1回押すだけ
- 1リッチメニュー「出勤」をタップ(postback:shukkin が送信される)
- 2「おはようございます!出勤を記録しました。出勤時刻:XX:XX」が自動送信
- 3タグ:「未打刻」削除 →「出勤中」付与
- 4スプレッドシートに日付・氏名・出勤時刻を自動記録
退勤フロー
ボタン1回で退勤。勤務時間も自動計算
- 1リッチメニュー「退勤」をタップ(postback:taikin)
- 2「お疲れ様でした!退勤時刻:18:05/本日の勤務時間:8時間3分」が自動送信
- 3タグ:「出勤中」削除 →「退勤済」付与
- 4退勤時刻を追記 → 実働時間が自動計算
休憩フロー
「開始」と「終了」の2回ボタンを押す
- 1「休憩」をタップ →「休憩開始」「休憩終了」のクイックリプライが表示される
- 2「休憩開始」を選択 → タグ「出勤中」→「休憩中」。開始時刻を記録
- 3戻ったら再度「休憩」→「休憩終了」→ タグ「休憩中」→「出勤中」。休憩時間を累計計算
メッセージ文面サンプル
勤怠管理実際のLINE画面イメージ
スタッフに届く自動返信のサンプル
出勤打刻 — 自動返信
出勤を記録しました。
⏰ 出勤時刻:09:02
今日もよろしくお願いします!
※退勤時はメニューの「退勤」ボタンを押してください。
退勤打刻 — 自動返信
退勤を記録しました。
⏰ 退勤時刻:18:05
🕐 本日の勤務時間:8時間3分
ゆっくり休んでください。明日もよろしくお願いします!
休憩 — クイックリプライ
⏸ 休憩開始:12:01
終了したら「休憩」→「休憩終了」を押してください。
{名前} {日時} {勤務時間} などの差し込みタグは各スタッフの情報に自動で変換されます。勤怠タグの自動切り替え
勤怠管理タグはボタンを押すたびに自動で切り替わります。管理者が手動で変える必要はありません。毎日0時に全員が「未打刻」にリセットされます。
自動リセット
リセット
| 操作 | 削除するタグ | 付与するタグ |
|---|---|---|
| 出勤ボタン | 未打刻 | 出勤中 |
| 退勤ボタン | 出勤中 | 退勤済 |
| 休憩開始 | 出勤中 | 休憩中 |
| 休憩終了 | 休憩中 | 出勤中 |
| 毎朝0時(自動) | 退勤済・未打刻 | 未打刻(全員リセット) |
「勤怠記録」シートの列構成と自動計算
| A:日付 | B:氏名 | C:出勤 | D:退勤 | E:休憩(分) | F:実働時間 |
|---|---|---|---|---|---|
| 2025/06/01 | 田中 花子 | 09:02 | 18:05 | 60 | → 8h03m |
| 2025/06/01 | 山田 太郎 | 10:15 | 19:30 | 45 | 8h30m |
| 2025/06/02 | 佐藤 次郎 | 08:55 | 17:00 | 60 | 7h05m |
=TEXT((D2-C2)-E2/1440,"h""h""mm""m""")F2にこの数式を入れて下の行へコピーするだけ。退勤−出勤から休憩を引いた実働時間が「8h03m」形式で自動計算されます。
打刻漏れリマインドの自動化
勤怠管理3つのリマインドが時間どおりに自動で届く
管理者が毎日確認しなくてもシステムが動く
設定手順(Lmessage管理画面)
- 1管理画面 →「配信管理」→「定期配信」→「+新規」
- 2配信時刻・曜日を設定(例:毎日 8:30 または 18:00)
- 3対象セグメントを指定(例:タグ「未打刻」または「出勤中」)
- 4メッセージ本文を入力 →「保存」
1つのアカウントで画面を自動で切り替える
採用応募者 → スタッフ、さらにシフト ⇄ 勤怠。タグの組み合わせでリッチメニューが自動切替。
パターンA(同居)とパターンB(切替)の違い
画面設計LINEアカウントは1つのまま、タグでリッチメニューを自動的に切り替えます。まず、採用応募者からスタッフへの切替は共通です。そのうえで、スタッフのメニュー構成に2つの設計パターンがあります。
パターンA ― 1画面に同居(推奨)
- シフト+勤怠を6ボタンにまとめる
- 管理者のタグ操作は採用確定時の1回だけ
- スタッフが迷わない。シンプル。
- 6ボタンに収まるよう機能を絞る必要あり
パターンB ― 出勤日だけ勤怠メニューに切替
- シフト6ボタン・勤怠6ボタンをフルに使える
- 出勤日だけ打刻ボタンが現れる
- 毎日「本日出勤」タグの付与・削除が必要
- 付け忘れると勤怠ボタンが出てこない
採用応募者 → スタッフ(両パターン共通)
【1】フロント 【2】客室
タグ付与
1回のみ
採用タグの流れ(応募 → スタッフ切替)
パターンB ― シフト ⇄ 勤怠を出勤日で切替
パターンBでは、スタッフのメニューを「シフト管理」と「勤怠管理」の2種類に分け、出勤予定日だけ勤怠メニューに自動で切り替えます。切替のカギは「本日出勤」タグです。
付与
1回
追加付与
出勤日のみ
リッチメニューの表示条件設定
画面設計Lmessageのリッチメニューは優先度が高いものが前面に表示されます。タグの有無で表示を切り替えるだけで、画面が自動で入れ替わります。
リッチメニュー 3種類の表示条件(パターンB)
| メニュー名 | 表示条件(タグ) | 優先度 |
|---|---|---|
| 採用メニュー | タグなし(全員) | 低(デフォルト) |
| シフト管理メニュー | スタッフ | 中 |
| 勤怠管理メニュー | スタッフ + 本日出勤 | 高(優先) |
GASでシフト表と連携して自動切替(実装)
GAS実践パターンBは「本日出勤」タグの付与・削除を毎日行う必要があります。これを手動でやるのは現実的ではないため、GAS(Google Apps Script)でシフト表から自動でタグを付け外しします。コードはコピペでOK、設定は30分ほどで完了します。
出勤日の1日の流れ(GAS自動化後)
STEP 1. シフト表を準備する
GASが読み取れるよう、シフト表を以下の形式で整えます。
| A:スタッフ名 | B:LINEユーザーID | C:6/1(日) | D:6/2(月) | E:6/3(火) | F:6/4(水) |
|---|---|---|---|---|---|
| 田中 花子 | U4a8f2c1d9e… | ○ | × | ○ | × |
| 山田 太郎 | Ub3c7e5f2a1… | × | ○ | ○ | ○ |
| 佐藤 次郎 | Uc9d1f4e8b2… | ○ | ○ | × | × |
- 1A列:スタッフ名を入力(1行目はヘッダー行)
- 2B列:LINEユーザーIDを入力。Lmessage「友だち管理」→各スタッフのプロフィールから確認(Uで始まる文字列)
- 3C列以降:各日付を1行目に入力(セル形式は「日付型」)。出勤日は ○、休みは ×
- 4シートタブ名を 「シフト表」 にする(GASコードの SHEET_NAME と一致させる)
STEP 2. GASコードを設置する
- 1スプレッドシートを開き、「拡張機能」→「Apps Script」をクリック
- 2最初から書かれている function myFunction() {} を全部削除
- 3下のコードをまるごとコピーして貼り付ける
// ===== 設定値(ここだけ変更してください) ===== const LMESSAGE_API_KEY = 'YOUR_LMESSAGE_API_KEY'; // Lmessage APIキー const LMESSAGE_CHANNEL_ID = 'YOUR_CHANNEL_ID'; // LINEチャネルID const SHEET_NAME = 'シフト表'; // シートタブ名 const TAG_NAME = '本日出勤'; // 付与・削除するタグ名 const DATE_ROW = 1; // 日付が書いてある行番号 const STAFF_START_ROW = 2; // スタッフデータの開始行 const USER_ID_COL = 2; // LINEユーザーIDの列番号(B列=2) const DATE_START_COL = 3; // 日付の開始列番号(C列=3) // =============================================== // 【実行①】前日夜21時に実行 → 翌日出勤者へタグ付与 function addTomorrowShiftTag() { const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); _updateTagForDate(tomorrow, 'add'); } // 【実行②】翌日0時に実行 → 「本日出勤」タグを全員から削除 function removeShiftTag() { _removeTagFromAll(); } // 日付に一致する列を探してタグ操作 function _updateTagForDate(targetDate, action) { const sheet = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName(SHEET_NAME); const lastCol = sheet.getLastColumn(); const lastRow = sheet.getLastRow(); const dateRow = sheet.getRange(DATE_ROW, DATE_START_COL, 1, lastCol - DATE_START_COL + 1).getValues()[0]; // 対象日の列を特定 let targetCol = -1; dateRow.forEach((cell, i) => { const d = new Date(cell); if (d.getMonth() === targetDate.getMonth() && d.getDate() === targetDate.getDate()) { targetCol = DATE_START_COL + i; } }); if (targetCol === -1) { console.log('対象日の列が見つかりません: ' + targetDate.toLocaleDateString()); return; } // スタッフ行を走査してタグ操作 const colData = sheet.getRange(STAFF_START_ROW, targetCol, lastRow - STAFF_START_ROW + 1, 1).getValues(); const idData = sheet.getRange(STAFF_START_ROW, USER_ID_COL, lastRow - STAFF_START_ROW + 1, 1).getValues(); idData.forEach((row, i) => { const userId = row[0]; const mark = colData[i][0]; if (!userId) return; if (mark === '○' || mark === '◯' || mark === 'o' || mark === 'O') { _callLmessageTagApi(userId, TAG_NAME, action); Utilities.sleep(300); // API連続呼び出し防止 } }); } // 全スタッフからタグを削除 function _removeTagFromAll() { const sheet = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName(SHEET_NAME); const lastRow = sheet.getLastRow(); const idData = sheet.getRange(STAFF_START_ROW, USER_ID_COL, lastRow - STAFF_START_ROW + 1, 1).getValues(); idData.forEach(row => { const userId = row[0]; if (!userId) return; _callLmessageTagApi(userId, TAG_NAME, 'remove'); Utilities.sleep(300); }); } // Lmessage APIを呼び出す共通関数 function _callLmessageTagApi(userId, tagName, action) { const endpoint = action === 'add' ? 'https://api.l-message.com/v1/tags/add' : 'https://api.l-message.com/v1/tags/remove'; const payload = JSON.stringify({ channel_id: LMESSAGE_CHANNEL_ID, user_id: userId, tag_name: tagName }); const options = { method: 'post', contentType: 'application/json', headers: { 'Authorization': 'Bearer ' + LMESSAGE_API_KEY }, payload: payload, muteHttpExceptions: true }; const response = UrlFetchApp.fetch(endpoint, options); console.log(userId + ' → ' + action + ' / HTTP ' + response.getResponseCode()); }
STEP 3. トリガーを設定する
GASを毎日自動で実行するために「トリガー」を2つ設定します。
- 1GASエディタ左の時計アイコン「トリガー」→「+トリガーを追加」
- 2下の2つをそれぞれ追加する
- 3Googleアカウントの認証画面が出たら「許可」を選択
- 実行タイミング
- 毎日 21:00〜22:00
- 種類
- 時間主導型 → 日タイマー
- 用途
- 翌日出勤者へ「本日出勤」タグを付与
- 実行タイミング
- 毎日 0:00〜1:00
- 種類
- 時間主導型 → 日タイマー
- 用途
- 全スタッフからタグを削除
STEP 4. 動作確認する
自動実行を待たず、手動でテストできます。
- 1シフト表の明日の列に、テスト用スタッフの行へ「○」を入力
- 2関数 addTomorrowShiftTag を選択し「実行」→ 実行ログに HTTP 200 が出るか確認
- 3Lmessage「友だち管理」でそのスタッフに「本日出勤」タグが付いたか確認
- 4スタッフのLINEを実機で見て、勤怠管理メニューに切り替わっているか確認
- 5次に removeShiftTag を実行 → タグが消え、シフト管理メニューに戻るか確認
よくある質問
| 症状 | 対処 |
|---|---|
| HTTP 404 エラー | APIエンドポイントURLが異なる可能性。公式ドキュメントで最新のURLを確認し、https://api.l-message.com/v1/tags/… を修正 |
| HTTP 401 エラー | APIキーが誤りor有効期限切れ。再発行して LMESSAGE_API_KEY を更新 |
| 「対象日の列が見つかりません」 | 日付セルが「日付型」でない可能性。書式設定から「日付」を選択 |
| 一部スタッフにだけタグが付かない | B列のユーザーIDが空欄or誤り。Lmessageで再確認して正確に入力 |
| 付け忘れの保険は? | GAS自動実行なので通常は発生しません。念のためログを毎朝チェックする運用が安心です |
動作確認チェックリスト
仕上げ実際にテスト送信して確認
全部チェックできたら設定完了です
- 友だち追加時にあいさつメッセージが届く
- 「1」を送信するとフロントの案内が届き「職種:フロント」タグが付く
- 面接日程選択で確定メッセージと管理者通知が届く
- 応募者情報が「応募者管理」シートに記録される
- 面接前日18時・当日8時にリマインドが届く
- テスト配信で希望収集メッセージが届く({name}が正しく名前に変わる)
- 「希望申請」でフォームが起動し、入力すると受付完了メッセージが届く
- 入力内容が「シフト希望」シートに記録される
- 回答後に「希望収集済」タグが付く/25日に未回答者だけへリマインドが届く
- 出勤ボタンで自動返信が届き「出勤中」タグが付く
- 退勤ボタンで勤務時間が表示され「退勤済」タグに切り替わる
- 休憩開始・終了でタグが正しく切り替わる
- 打刻データが「勤怠記録」シートに記録され、F列の実働時間が自動計算される
- 8:30出勤/18:00退勤リマインド、翌朝9:00の管理者アラートが届く
- 「スタッフ」タグ付与で採用→スタッフメニューに切り替わる
- 「本日出勤」タグでシフト→勤怠メニューに切り替わり、削除で戻る
- GAS手動実行でHTTP 200が返り、タグが自動で付与・削除される
全体まとめ
- ✓採用:友だち追加から面接確定まで全自動。管理者の作業は合否連絡のみ。
- ✓シフト:毎月20日に全スタッフへ自動配信。希望収集・未回答リマインドも自動。
- ✓勤怠:リッチメニューの1タップで出勤・退勤・休憩を即時記録。専用アプリ不要。
- ✓タグ×セグメント配信で「出勤中の人だけに退勤リマインド」などピンポイント配信。
- ✓Googleスプレッドシートと連携し実働時間を自動計算。月次集計・給与計算の元データに。
- ✓アカウントは1つ。タグの組み合わせで採用/シフト/勤怠の画面が自動で切り替わる。
- ⚠パターンB(シフト⇄勤怠切替)は「本日出勤」タグの付け外しをGASで自動化しないと運用負荷が高い。手動運用は非推奨。
※ 本記事の掲載コードはサンプルであり、ご利用は自己責任でお願いします。










