パン屋の「焼き上がり通知」を
LINEで自動化する手順
貼り紙も全員への一斉送信もやめる。焼けた時刻を入れて配信ボタンを押すだけで、
そのパンが好きで、その曜日に受け取りたい人にだけ届く仕組みを、画面の手順どおりに作ります。
はじめに:3つの道具の役割分担
この記事では、LINE公式アカウント・エルメ(エルメッセージ)・Googleスプレッドシート+GASの3つを使います。先に「誰が何をするか」を決めておくと、途中で迷いません。
| 道具 | 担当すること | 担当しないこと |
|---|---|---|
| エルメ | 友だちの受信・タグ付け・自動応答・ステップ配信・焼き上がりの一斉配信・フォーム(スタンプ) | — |
| 連携シート | エルメがフォーム回答を自動で書き込む受け口 | 人は編集しない |
| GAS(時間トリガー専用) | 連携シート→スタンプ記録の取込、顧客台帳の集計、店主へのメール | LINEの受信も、お客様への送信もしない |
| スプレッドシート | スタンプ・来店履歴・焼き上がりの記録を保存 | — |
1. 友だち追加・ウェルカム設定
友だち追加した直後にウェルカムメッセージを自動送信し、翌日に好きなパンの種類、翌々日に通知を受け取る曜日を選んでもらいます。選んだ内容がタグとして記録され、章2の焼き上がり通知の出し分けに使います。
ステップ配信の設定
操作場所:エルメッセージ管理画面 > シナリオ配信 > 新規作成
- 「シナリオ配信」を開き、「新規作成」をクリックする。シナリオ名に「ウェルカム_ベーカリー」と入力。
- ステップ1(即時送信):テキスト+画像のウェルカムメッセージを設定。配信タイミングは「友だち追加直後」。
- ステップ2(1日後送信):パンの種類を選ぶボタン付きメッセージを設置。各ボタンに「タグを付ける」アクションを設定する(下表)。
- ステップ3(2日後送信):「通知を受け取る曜日を選んでください」の曜日ボタン付きメッセージを送る(内容は章3と同じものを流用)。
- 「有効」に切り替えて保存する。
友だち登録ありがとうございます🎉
毎日、焼きたてパンの焼き上がり時間をお知らせします🔔
ぜひ焼きたてを食べにいらしてください!
通知を受け取りたいパンの種類を選んでね👇
受け取りたい曜日のボタンを押してください🔔
タグ設定(パン種別・曜日)
エルメのタグは記事全体で以下の12個に統一します。パン種別タグ5個と曜日タグ7個の2系統で、この組み合わせで配信先を絞ります。「全部通知して」「毎日受け取る」は専用のタグを作らず、該当するタグをまとめて付ける形にします(タグが増えると配信条件が複雑になるため)。
パン種別タグ(好きなパンを選んだときに付与)
食パン好き クロワッサン好き 惣菜パン好き 菓子パン好き バゲット好き
曜日タグ(通知を受け取る曜日を選んだときに付与)
通知_月 通知_火 通知_水 通知_木 通知_金 通知_土 通知_日
| ボタンテキスト | 付与するタグ | 備考 |
|---|---|---|
| 🍞 食パン | 食パン好き | 毎日焼く定番品 |
| 🥐 クロワッサン | クロワッサン好き | 週4回焼成 |
| 🥙 惣菜パン | 惣菜パン好き | 日替わり |
| 🍩 菓子パン | 菓子パン好き | 土日多め |
| 🥖 バゲット | バゲット好き | 火・金・日 |
| 🔔 全部通知して! | 上の5つをすべて付ける | 1つのボタンに複数タグを設定 |
2. 焼き上がり通知の配信設定
焼き上がりの通知は、エルメの一斉配信から送ります。パンごとに配信の下書きを作っておき、焼き上がる直前にスマホで下書きを開いて、時刻と在庫数を書き換えて配信ボタンを押す、という運用です。配信対象を「そのパンのタグ」と「今日の曜日タグ」で絞るので、興味のない人には届きません。
通知メッセージテンプレ
毎回書き換えるのは「🕐 焼き上がり」と「📦 本日の在庫」の2か所だけです。パン名はパンごとの下書きに入れておきます。
▶ 食パン(1斤)
🕐 焼き上がり:10:30
📦 本日の在庫:8本
焼きたてをぜひ😊
売り切れ次第終了です🙏
パンごとの配信下書きを作る(最初に1回)
操作場所:エルメ管理画面 > 配信 > 一斉配信 > 新規作成
- 配信名を「焼き上がり_食パン」にする(パンの数だけ繰り返す)。
- 配信対象を「絞り込む」にし、条件1に タグ
食パン好きを含む、条件2に タグ通知_月を含む、を設定する(曜日は当日に差し替えるので仮でよい)。 - 本文に上のテンプレを貼る。
- 配信方法を「日時指定」にして保存だけし、配信はしない(下書きとして残す)。
当日の配信手順(焼き上がる5分前・スマホでOK)
- エルメの一斉配信一覧から、そのパンの下書き「焼き上がり_食パン」を複製する。
- 配信対象の条件2の曜日タグを、今日の曜日に変える(火曜なら
通知_火)。 - 本文の「🕐 焼き上がり」と「📦 本日の在庫」を書き換える。
- 配信方法を「今すぐ配信」にして、対象人数を確認し、配信ボタンを押す。
- 配信後、章5の「焼き上がり記録」シートに、パン名・時刻・在庫数・配信人数を1行書く(通数の管理に使う)。
配信対象の絞り込み条件(早見表)
| 通知対象パン | 条件1(パン種別) | 条件2(曜日・当日に差し替え) | 想定頻度 |
|---|---|---|---|
| 🍞 食パン | 食パン好き を含む | 今日の 通知_◯ を含む | 毎日 |
| 🥐 クロワッサン | クロワッサン好き を含む | 同上 | 週4回 |
| 🥙 惣菜パン | 惣菜パン好き を含む | 同上 | 毎日 |
| 🍩 菓子パン | 菓子パン好き を含む | 同上 | 週5回 |
| 🥖 バゲット | バゲット好き を含む | 同上 | 火・金・日 |
3. 曜日指定通知(受け取る日をお客様が選ぶ)
お客様がリッチメニューの「通知設定変更」を押すと曜日ボタンが表示されます。受け取りたい曜日を選ぶと曜日タグが付き、章2の一斉配信で「今日の曜日タグ」を持つお客様だけが対象になります。この仕組みはエルメの自動応答だけで完結し、GASは使いません。
① エルメの自動応答(キーワード反応)を設定する
操作場所:エルメ管理画面 > 自動応答 > 新規作成
- キーワードに
通知設定を変更したいを入力する(リッチメニューのボタンテキストと完全一致させる)。 - 返信メッセージに、曜日ボタン付きのメッセージ(ボタン型テンプレート)を設定する。ボタンは「月〜日」の7つと「毎日受け取る」「通知を止める」の計9つ。
- 各ボタンに「タグを付ける」または「タグを外す」のアクションを設定する(下表参照)。
- 「有効」に切り替えて保存する。
受け取りたい曜日のボタンを押してください🔔
何度でも変更できます。
毎週火曜に焼き上がりをお知らせします🍞
② 曜日ボタンのタグ設定一覧
| ボタンテキスト | 付与するタグ | 同時に外すタグ |
|---|---|---|
| 月曜日 | 通知_月 | — |
| 火曜日 | 通知_火 | — |
| 水曜日 | 通知_水 | — |
| 木曜日 | 通知_木 | — |
| 金曜日 | 通知_金 | — |
| 土曜日 | 通知_土 | — |
| 日曜日 | 通知_日 | — |
| 🔔 毎日受け取る | 曜日タグ7つをすべて付ける | — |
| 🔕 通知を止める | — | 曜日タグ7つをすべて外す |
通知_月 通知_水 通知_金 の3タグが付きます。ボタンのタップへの反応はReplyなので、何度押しても通数は消費しません。③ 配信条件の早見表
| 今日の曜日 | 食パンの通知が届く人 |
|---|---|
| 月曜日 | 食パン好き と 通知_月 の両方を持つ人 |
| 火曜日 | 食パン好き と 通知_火 の両方を持つ人 |
| 日曜日 | 食パン好き と 通知_日 の両方を持つ人 |
4. リッチメニューの設定
トーク画面下部に常設されるリッチメニューです。6マス構成で、焼き上がり確認・通知設定変更・スタンプカードへのアクセスを1タップで行えます。
リッチメニューの配置
本日の
焼き上がり
パンの
ラインナップ
営業時間
アクセス
・地図
スタンプ
カード
通知設定
変更
各ボタンのアクション設定
操作場所:エルメ管理画面 > リッチメニュー > 新規作成
| ボタン | アクション種別 | 設定内容 |
|---|---|---|
| 🔔 本日の焼き上がり | テキスト送信 | 今日の焼き上がりを教えて |
| 📋 ラインナップ | URL遷移 | メニュー紹介ページURL |
| 🕐 営業時間 | テキスト送信 | 営業時間を教えて |
| 📍 アクセス | URL遷移 | Google マップURL |
| 🎴 スタンプカード | テキスト送信 | スタンプカードを見る |
| ⚙️ 通知設定変更 | テキスト送信 | 通知設定を変更したい |
通知設定を変更したい)は、章3で設定した自動応答のキーワードと完全一致させてください。リッチメニューの作成手順
- 「リッチメニュー」→「新規作成」をクリックし、タイトルに「ベーカリー_基本メニュー」と入力する。
- テンプレートから「大(3×2の6分割)」を選択する。プレビューの上部帯「ベーカリー メニュー」は画像に描き込む飾りで、ボタンではありません。
- 2500×1686px の画像を用意してアップロードする(Canva等の無料ツールで作成可)。
- 各エリアをクリックし、上表のとおりアクション種別と設定内容を入力する。
- 表示期間を「無期限」に設定し、保存して反映する。
ボタンに応答する自動応答の設定
リッチメニューのボタンはテキストを送信するだけです。エルメ側で同じキーワードに反応する自動応答を作らないと、押しても何も返ってきません。以下の4つを登録します。自動応答の返信はReplyなので通数は消費しません。
操作場所:エルメ管理画面 > 自動応答 > 新規作成
| キーワード | 返信内容 |
|---|---|
今日の焼き上がりを教えて | 本日の焼成スケジュール(固定テキスト)を返信 |
営業時間を教えて | 営業時間・定休日を返信 |
スタンプカードを見る | スタンプの貯め方(レジ横のQRを読む)と特典の案内を返信 |
通知設定を変更したい | 曜日選択ボタン付きメッセージを返信(章3で設定済み) |
コピペ用テンプレ(本日の焼き上がり)
コピペ用テンプレ(営業時間)
5. スプレッドシート構成とGASスクリプト
スプレッドシートは「記録を残す」ためのものです。配信も受信もエルメがやるので、GASの仕事は時間が来たら連携シートを読み、スタンプ記録と顧客台帳を整え、店主にメールすることだけです。
シートの役割分担
| シート | 誰が書くか | 役割 |
|---|---|---|
| スタンプ回答(連携シート) | エルメだけ | 章6のスタンプフォームの回答の受け口。人は編集しない |
| スタンプ記録 | GAS | 来店1回=1行の履歴(正本) |
| 顧客台帳 | GAS | お客様ごとの累計スタンプ・最終来店日 |
| 焼き上がり記録 | スタッフ | 配信したパン・時刻・在庫・配信人数(通数の管理用) |
| 列 | 見出し | 内容 |
|---|---|---|
| A | 回答日時 | エルメが記録。GASはこれを「来店日」にする |
| B | 友だち名 | エルメが記録。LINEの表示名 |
| C | 購入したパン | フォームの質問(任意) |
H の値を合わせてください。| 列 | 項目名 | 内容 |
|---|---|---|
| A | 来店日 | 回答日時の日付部分(自動) |
| B | 友だち名 | 連携シートから写す(自動) |
| C | 購入品 | フォームの回答(任意) |
| D | 取込キー | 回答日時+友だち名(二重取込の防止用) |
| 列 | 項目名 | 内容 |
|---|---|---|
| A | 友だち名 | LINEの表示名 |
| B | 累計スタンプ | 来店日の数(1日1個) |
| C | 最終来店日 | いちばん新しい来店日 |
| D | クーポン発行回数 | 10個達成のたびに1増える |
| 列 | 項目名 | 内容 |
|---|---|---|
| A | 日付 | 配信した日 |
| B | パン名 | プルダウンで選択 |
| C | 焼き上がり時刻 | 例:10:30 |
| D | 在庫数 | 本数・個数 |
| E | 配信人数 | エルメの配信画面に出た対象人数を転記 |
GASコード(コード.gs 全文)
操作場所:連携シートが入っているスプレッドシート > 拡張機能 > Apps Script
- 章6で連携したスプレッドシート(「スタンプ回答」シートが入っているファイル)を開く。
- 同じファイルに「スタンプ記録」「顧客台帳」「焼き上がり記録」の3シートを作り、上の表のとおり1行目に見出しを入れる。
- 拡張機能からApps Scriptを開き、エディタの中身をすべて消して下のコードを貼り付ける。
- 冒頭の
OWNER_MAILを店主のメールアドレスに書き換える。連携シートの名前を変えた場合はSHEET_LINKEDも合わせる。 - 関数
importStampsを一度手動で実行し、権限の確認画面で許可する。 - 左メニューの時計アイコン(トリガー)から
importStampsを「時間主導型 > 分ベースのタイマー > 10分おき」で登録する。 - 同じ画面で
monthlyPushCheckを「日付ベースのタイマー > 午前8時〜9時」で登録する。
// ===== パン屋 スタンプ記録GAS(時間トリガー専用・受信も個別送信もしない) =====
// エルメが連携シートに書いたフォーム回答を、時間が来たら読みに行くだけ。
// LINEのWebhookはエルメが持ったままなので、両者は問題なく共存する。
const SHEET_LINKED = 'スタンプ回答'; // エルメが作った連携シートの名前(章6)
const SHEET_STAMP = 'スタンプ記録'; // A列=来店日, B列=友だち名, C列=購入品, D列=取込キー
const SHEET_LEDGER = '顧客台帳'; // A列=友だち名, B列=累計スタンプ, C列=最終来店日, D列=クーポン発行回数
const SHEET_BAKE = '焼き上がり記録'; // A列=日付, B列=パン名, C列=時刻, D列=在庫数, E列=配信人数
const OWNER_MAIL = 'owner@example.com'; // 店主の通知先
const TZ = 'Asia/Tokyo';
const FREE_LIMIT = 200; // 無料枠(通/月)
const WARN_AT = 160; // この通数を超えたらメールで知らせる
// 連携シートの見出し名(フォームの質問名と一致させる)
const H = { AT: '回答日時', NAME: '友だち名', ITEM: '購入したパン' };
// ===== 10分おき:連携シートの新しい回答をスタンプ記録へ写し、台帳を更新 =====
function importStamps() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const linked = ss.getSheetByName(SHEET_LINKED);
const stamp = ss.getSheetByName(SHEET_STAMP);
if (!linked || linked.getLastRow() < 2) return;
const data = linked.getDataRange().getValues();
const head = data[0].map(String);
const c = { at: head.indexOf(H.AT), name: head.indexOf(H.NAME), item: head.indexOf(H.ITEM) };
if (c.at < 0 || c.name < 0) {
mail_('【要確認】連携シートの見出しが見つかりません', '見出し: ' + head.join(' / '));
return;
}
const done = existingKeys_(stamp); // 取込済みキー(D列)
const touched = {}; // 今回スタンプが増えた人
for (let i = 1; i < data.length; i++) {
const r = data[i];
if (!r[c.at]) continue; // 空行
const name = String(r[c.name]).trim();
const key = ymdhms_(r[c.at]) + '|' + name;
if (done[key]) continue; // 取込済み
stamp.appendRow([ymd_(r[c.at]), name, c.item >= 0 ? r[c.item] : '', key]);
done[key] = true;
touched[name] = true;
}
const names = Object.keys(touched);
if (names.length) updateLedger_(ss, stamp, names);
}
// ===== 顧客台帳を更新(累計=来店日の数、1日1個) =====
function updateLedger_(ss, stamp, names) {
const ledger = ss.getSheetByName(SHEET_LEDGER);
const rows = stamp.getDataRange().getValues(); // A列=来店日, B列=友だち名
const days = {}; // 名前 → {来店日: true}
for (let i = 1; i < rows.length; i++) {
const n = String(rows[i][1]).trim();
if (!names.includes(n)) continue;
(days[n] = days[n] || {})[String(rows[i][0])] = true;
}
const lv = ledger.getDataRange().getValues(); // A列=友だち名, B列=累計, C列=最終来店日, D列=クーポン回数
const coupon = [];
names.forEach(function (n) {
const visit = Object.keys(days[n] || {}).sort();
const total = visit.length;
const last = visit[visit.length - 1] || '';
let row = -1;
for (let i = 1; i < lv.length; i++) if (String(lv[i][0]).trim() === n) { row = i + 1; break; }
const issued = row > 0 ? Number(lv[row - 1][3]) || 0 : 0;
const due = Math.floor(total / 10); // 10個ごとに1回
if (row < 0) {
ledger.appendRow([n, total, last, due]);
} else {
ledger.getRange(row, 2).setValue(total);
ledger.getRange(row, 3).setValue(last);
ledger.getRange(row, 4).setValue(due);
}
if (due > issued) coupon.push(n + '(累計 ' + total + ' 個)');
});
if (coupon.length) {
mail_('【スタンプ10個達成】クーポンを送るお客様',
'次のお客様が10個に達しました。エルメの個別トークからクーポンを送ってください。\n\n' + coupon.join('\n'));
}
}
// ===== 毎朝:今月の配信人数を合計し、無料枠に近づいたら知らせる =====
function monthlyPushCheck() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const bake = ss.getSheetByName(SHEET_BAKE);
if (!bake || bake.getLastRow() < 2) return;
const ym = Utilities.formatDate(new Date(), TZ, 'yyyy/MM');
const rows = bake.getDataRange().getValues(); // A列=日付, E列=配信人数
let total = 0;
for (let i = 1; i < rows.length; i++) {
if (rows[i][0] instanceof Date && Utilities.formatDate(rows[i][0], TZ, 'yyyy/MM') === ym) {
total += Number(rows[i][4]) || 0;
}
}
if (total >= WARN_AT) {
mail_('【通数注意】今月の焼き上がり通知が ' + total + ' 通です',
'無料枠は月 ' + FREE_LIMIT + ' 通です。残り ' + Math.max(0, FREE_LIMIT - total) + ' 通。\n' +
'配信回数を減らすか、プランの切り替えを検討してください。');
}
}
// ===== 補助 =====
function existingKeys_(sheet) {
const out = {};
if (sheet.getLastRow() < 2) return out;
sheet.getRange(2, 4, sheet.getLastRow() - 1, 1).getValues().forEach(function (r) { if (r[0]) out[r[0]] = true; });
return out;
}
function ymd_(v) { return v instanceof Date ? Utilities.formatDate(v, TZ, 'yyyy/MM/dd') : String(v).slice(0, 10); }
function ymdhms_(v) { return v instanceof Date ? Utilities.formatDate(v, TZ, 'yyyy/MM/dd HH:mm:ss') : String(v); }
function mail_(subject, body) { MailApp.sendEmail(OWNER_MAIL, subject, body); }
(GMT+09:00) 東京 になっているか確認してください。ずれていると深夜の回答が前日の来店として数えられます。6. QRコードでスタンプを自動記録する
レジ横にQRコードを1枚置くだけです。お客様がスキャンするとエルメのスタンプフォームが開き、送信ボタンを押した瞬間に連携シートへ「回答日時・友だち名」が記録されます。それを章5のGASが10分おきに読み、来店日としてスタンプ記録と顧客台帳に写します。スタッフの操作は一切不要です。
① 全体の流れ
| 誰が | 何をするか | 自動/手動 |
|---|---|---|
| お客様 | レジ横のQRコードをスマホで読む | 手動(お客様) |
| エルメ | スタンプフォームを開く(LINEでログイン済みなら名前は自動) | 自動 |
| お客様 | 送信ボタンを押す | 手動(お客様) |
| エルメ | 連携シート「スタンプ回答」に回答日時・友だち名を記録し、完了画面を表示 | 自動 |
| GAS | 10分おきに連携シートを読み、スタンプ記録と顧客台帳を更新 | 自動 |
| GAS | 10個達成のお客様が出たら店主へメール | 自動 |
| 店主 | エルメの個別トークからクーポンを送る | 手動(月数回) |
② スタンプフォームを作る
操作場所:エルメ管理画面 > フォーム > 新規作成
- フォーム名を「スタンプ」にする。
- 質問を1つだけ作る。質問名
購入したパン、形式は選択式(食パン/クロワッサン/惣菜パン/菓子パン/バゲット/その他)、任意回答にする。 - 送信後の完了画面に「🎴 スタンプを押しました! 10個で100円引きクーポンをお送りします。またのご来店をお待ちしています😊」と入れる(完了画面の表示はLINEに送らないので通数を消費しない)。
- 回答後の自動返信メッセージは設定しない(設定するとPushになり、来店のたびに1通消費する)。
- フォーム一覧の「スプレッドシート」からGoogleアカウントを連携し、書き出し先のシート名を
スタンプ回答にする。 - フォームのURLをコピーする(次の手順で使う)。
③ QRコードを作って設置する
- Googleで「QRコード 生成」と検索し、コピーしたフォームのURLを入力してQR画像を作る。
- A4やカードサイズで「🎴 お会計後に読んでスタンプ!」の文言と一緒に印刷し、レジ横に置く。
- 自分のスマホで読み、フォームが開いて送信できること、「スタンプ回答」シートに1行増えることを確認する。
- 10分待って(またはGASの
importStampsを手動実行して)、「スタンプ記録」と「顧客台帳」に自分の名前が入ることを確認する。
④ 1日1個のルール
同じお客様が同じ日に2回送信しても、GASは「来店日の数」を累計にするので、1日に増えるスタンプは1個です。スタンプ記録には2行とも残るので、履歴として確認できます。
⑤ 10個達成のクーポン
- 店主のメールに「【スタンプ10個達成】」が届く。
- エルメ管理画面 > 友だちリスト でそのお客様を開き、個別トークから下のテンプレを送る(Push 1通)。
- お客様が来店したら、トーク画面を見せてもらい100円引きにする。使ったら顧客台帳のD列はGASが更新済みなので、何もしなくてよい。
次回のお会計で【100円引き】になります。
レジでこの画面をお見せください🎁
7. 毎日の運用手順(スタッフ向け)
焼き上がり通知の手順(1日の流れ)
- パンが焼き上がる5分前に、スマホでエルメの一斉配信一覧を開く。
- そのパンの下書き「焼き上がり_◯◯」を複製し、曜日タグを今日の曜日に変える。
- 本文の時刻と在庫数を書き換え、対象人数を確認して「今すぐ配信」。
- 「焼き上がり記録」シートに、日付・パン名・時刻・在庫数・配信人数を1行書く。
通知タイミングの目安
| パン名 | 通知時刻の目安 |
|---|---|
| 🍞 食パン | 9:25頃 |
| 🥐 クロワッサン | 10:55頃 |
| 🥙 惣菜パン | 11:25頃 |
| 🍩 菓子パン | 13:55頃 |
| 🥖 バゲット | 15:25頃 |
スタンプカードの運用
- レジ横にQRコードを印刷して設置する(章6参照)。お会計のとき「QRを読むとスタンプが付きます」と一言添える。
- 「【スタンプ10個達成】」のメールが届いたら、エルメの個別トークからクーポンを送る(章6のテンプレ)。
- 月1回、顧客台帳を開き、同姓同名で1人にまとまっている人がいないか確認する。
うまく動かないときの確認ポイント
| 症状 | 確認すること |
|---|---|
| 配信の対象人数が0人 | 条件が「パン種別タグ かつ 曜日タグ」になっているか。曜日タグが今日の曜日か。お客様が章1・章3でタグを付けているか(エルメの友だち情報で確認)。 |
| 配信の対象が全員になる | 絞り込み条件が外れている。下書きを複製したときに条件が残っているか確認。 |
| 特定の人にだけ届かない | その人が「パン種別タグ」と「今日の曜日タグ」の両方を持っているか、エルメの友だち情報で確認。片方だけでは届かない。 |
| 配信できない・エラーになる | LINE公式アカウントの月の通数上限に達している可能性。LINE Official Account Managerで残通数を確認(章8)。 |
| QRを読んでもスタンプが付かない | 「スタンプ回答」シートに行が増えているか。増えていなければフォームのシート連携を確認。増えているのに記録されないなら、GASのトリガー登録と SHEET_LINKED のシート名を確認。 |
| 店主にメールが届かない | OWNER_MAIL の誤り、または初回の権限承認をしていない。importStamps を手動実行し直す。 |
| 来店日が1日ずれる | GASのタイムゾーンが東京になっているか(章5参照)。 |
8. 費用と無料枠の注意(通数の試算)
この仕組みでお金がかかるのは、LINE公式アカウントとエルメの2つです。スプレッドシートとGASは無料です。
LINE公式アカウントの料金プラン
| プラン | 月額(税別) | 無料メッセージ通数 | 追加メッセージ |
|---|---|---|---|
| コミュニケーション | 0円 | 200通 | 不可 |
| ライト | 5,000円 | 5,000通 | 不可 |
| スタンダード | 15,000円 | 30,000通 | 可(〜3円/通・税別) |
通数のカウントはPushかReplyかで決まる
「1通」は1人に届いて1通です。エルメから送るメッセージは、LINE公式アカウント側で「Push(数える)」と「Reply(数えない)」に分かれます。
| この記事のメッセージ | 種類 | 通数 |
|---|---|---|
| ウェルカムのステップ配信(章1) | Push | 友だち1人につき3通(登録時だけ) |
| 曜日ボタン・リッチメニューへの返信(章3・4) | Reply | 数えない |
| 焼き上がり通知の一斉配信(章2) | Push | 届いた人数ぶん |
| スタンプフォームの完了画面(章6) | 画面表示(LINEに送らない) | 数えない |
| 10個達成のクーポン(章6) | 個別トーク=Push | 1通 |
| 店主への通知(章5) | GASからメール | 数えない |
この設計で消費する通数(焼き上がり通知がほぼすべて)
| 友だち数 | 1配信あたりの対象(目安) | 1日5配信×25日 | 合うプラン |
|---|---|---|---|
| 20人 | 2〜4人 | 250〜500通 | ライト(無料枠は超える) |
| 50人 | 5〜10人 | 625〜1,250通 | ライト |
| 200人 | 20〜40人 | 2,500〜5,000通 | ライト〜スタンダード |
パン種別と曜日で絞っているので対象は友だち全員の1〜2割程度ですが、毎日5回も配信すると無料枠では足りません。無料枠で回すなら、配信を「売り切れやすい人気商品だけ」「午前の1回だけ」に絞るのが現実的です。章5の monthlyPushCheck が160通を超えたときにメールで知らせます。
エルメの料金プラン
| プラン | 月額(税込) | この設計での適合 |
|---|---|---|
| フリー | 0円 | フォームは3つまで、リッチメニューは2つまで。この設計はフォーム1本・リッチメニュー1枚で収まる |
| スタンダード | 10,780円 | 友だちが250人を超える場合など |
| プロ | 33,000円 | 友だちが数万人規模になったら |
まとめ
受信・タグ付け・配信はエルメ、記録と集計はスプレッドシート+GAS。この分担を守れば、焼き上がりの通知を「そのパンが好きで、その曜日に受け取りたい人」にだけ届け、スタンプもQR1枚で自動記録できます。
最初にやる1手:章1のウェルカムのステップ配信とタグ設定です。タグが付き始めれば、章2の配信はいつでも始められます。




