予約の無断キャンセルは、サービス業に年間数千ドルの損失をもたらします。前日に簡単なSMSリマインダーを送るだけで、ノーショーを30~50%削減できます。しかし、そのためだけにTwilioを設定するのは大げさに感じられ、コストもかさみます。
ここでは、ご自身の電話をSMSゲートウェイとして利用し、非常にシンプルな予約リマインダーシステムを構築する方法をご紹介します。
Twilioを使わない理由とは?
月に200件のリマインダーを送信する小規模なクリニックやサロンの場合、Twilioの費用は以下の通りです。
- メッセージ料金: 200 × $0.0079 = $1.58
- キャリア追加料金: 200 × $0.003 = $0.60
- 電話番号: $1.15/月
- 10DLC登録: $2/月 + $15 (初回のみ)
- セットアップ時間: 1~2時間 (SDK、認証、登録)
合計: 約$5.33/月 + セットアップの手間。しかも、登録が却下された場合(小規模ビジネスではよくあること)、手詰まりになります。
MySMSGateの場合: 200 × $0.03 = $6.00/月。登録不要、セットアップの手間なし、5分で稼働します。患者さんには、ランダムなTwilioの番号ではなく、あなたの実際の電話番号が表示されます。
オプション1: Google Sheets + Apps Script (ノーコード)
最もシンプルなアプローチです。すでにスプレッドシートで予約を管理している場合に最適です。
シートのセットアップ
以下の列を持つGoogle Sheetを作成します。
| A: 患者名 | B: 電話番号 | C: 日付 | D: 時間 | E: リマインド済み |
|---|---|---|---|---|
| Sarah Johnson | +12025551234 | 2026-03-10 | 3:00 PM | |
| Mike Chen | +12025555678 | 2026-03-10 | 4:30 PM |
スクリプトの追加
拡張機能 → Apps Script に移動し、このコードを貼り付けます。
function sendReminders() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
var tomorrowStr = Utilities.formatDate(tomorrow, "GMT", "yyyy-MM-dd");
for (var i = 1; i < data.length; i++) {
var name = data[i][0];
var phone = data[i][1];
var date = Utilities.formatDate(new Date(data[i][2]), "GMT", "yyyy-MM-dd");
var time = data[i][3];
var reminded = data[i][4];
if (date === tomorrowStr && !reminded) {
var message = "Hi " + name + ", reminder: your appointment is tomorrow at " + time + ". Reply YES to confirm or call to reschedule.";
UrlFetchApp.fetch("https://mysmsgate.net/api/v1/send", {
method: "post",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
payload: JSON.stringify({to: phone, message: message})
});
sheet.getRange(i + 1, 5).setValue("Yes");
}
}
}
スケジュール設定
Apps Scriptで、トリガー → トリガーを追加 に移動します。
- 関数:
sendReminders - イベントのソース: 時間主導型 → 日タイマー → 午前9時~10時
これで完了です。毎朝、スクリプトが翌日の予約を確認し、自動的にリマインダーを送信します。
オプション2: Pythonスクリプト (開発者向け)
データベースを備えた予約システムをお持ちの場合:
import requests
import sqlite3
from datetime import date, timedelta
API_KEY = "YOUR_API_KEY"
tomorrow = date.today() + timedelta(days=1)
db = sqlite3.connect("bookings.db")
appointments = db.execute(
"SELECT name, phone, time FROM appointments WHERE date = ? AND reminded = 0",
(tomorrow.isoformat(),)
).fetchall()
for name, phone, time in appointments:
message = f"Hi {name}, reminder: your appointment is tomorrow at {time}. Reply YES to confirm."
response = requests.post(
"https://mysmsgate.net/api/v1/send",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"to": phone, "message": message}
)
if response.json().get("success"):
db.execute("UPDATE appointments SET reminded = 1 WHERE phone = ? AND date = ?",
(phone, tomorrow.isoformat()))
db.commit()
cronで実行: 0 9 * * * python3 /path/to/reminders.py
オプション3: Zapier / Make (ノーコード)
Calendly、Google Calendar、またはZapier連携が可能な予約ツールをご利用の場合:
- トリガー: 「Googleカレンダーの新しいイベント」(またはCalendly、Acuityなど)
- アクション: イベントの1日前まで遅延
- アクション: Webhooks by Zapier →
https://mysmsgate.net/api/v1/sendへPOST
ヘッダーを設定: Authorization: Bearer YOUR_API_KEY
ボディを設定: {"to": "{{phone}}", "message": "Hi {{name}}, reminder: your appointment is tomorrow at {{time}}."}
効果的なリマインダーのためのヒント
- 24時間前に送信 — 患者が再スケジュールする時間を与えます
- 時間を記載 — 「明日」よりも「明日の午後3時」の方が良いです
- 確認を求める — 「はいと返信して確認」はエンゲージメントを高めます
- 短くする — 1つのSMSセグメント (160文字) が理想的です
- 事業名を使用 — 患者はあなたの番号があなたの番号であるため認識します
無料で始める — 10分以内にリマインダーを設定できます。
Comments (0)
Be the first to comment!