予約の無断キャンセルは、サービス業に年間数千ドルの損失をもたらします。前日に簡単な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+120255512342026-03-103:00 PM
Mike Chen+120255556782026-03-104: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連携が可能な予約ツールをご利用の場合:

  1. トリガー: 「Googleカレンダーの新しいイベント」(またはCalendly、Acuityなど)
  2. アクション: イベントの1日前まで遅延
  3. アクション: 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分以内にリマインダーを設定できます。