全国オンライン対応受付 平日 9:00-18:00
お問い合わせ

開発記録 / toi-toi-toi制作記 / Vol.31 toi-toi-toi制作記 Vol.5

記事 01

Zoom URLを枠に紐付けた——1カラムの追加が7つの関数を連鎖させた

「オンラインレッスンのZoom URLを、予約確認LINEに自動で入れられませんか」

2026-06-13 公開

「オンラインレッスンのZoom URLを、予約確認LINEに自動で入れられませんか」

リクエストはシンプルだった。予約が確定したとき、お客様のLINEにZoom URLが届くようにしてほしい。毎回コピーして送るのが手間になってきた、と。

修正の範囲が最初はよく見えなかった。


スプレッドシートに1列追加した

予約枠シートのH列に zoom_url を追加することにした。

枠ごとにZoom URLを持たせる設計だ。オンラインレッスンの枠には入れる。対面の枠には入れない。それだけのことだ。

しかしコードを追っていくと、この「1列追加」が7つの関数に連鎖することがわかった。

adminGetAllSlots  ← 管理画面で枠一覧を表示するとき
adminAddSlot      ← 管理画面から新しい枠を追加するとき
getSlots          ← 予約フォームで枠一覧を取得するとき
registerBooking   ← 予約確定時にLINE通知を送るとき
sendReminders     ← 前日リマインドを送るとき
admin_update_slot_zoom ← 管理画面でURLを後から編集するとき

それぞれを直していった。


枠を追加するとき

管理画面から新しい枠を登録するとき、Zoom URLを入力する欄を追加した。

sheet.appendRow([
  params.slot_id, svcId, dateStr, timeStr,
  0, parseInt(params.max) || 1, '', params.zoom_url || ''
]);

H列(index 7)に入る。空のままでも動く。


予約が確定するとき

registerBooking() の中で、確定した枠のZoom URLを取り出してLINE通知に含める。

slotZoomUrl = String(slotRows[i][7] || '');
const zoomLine = slotZoomUrl ? `\n🔗 Zoom: ${slotZoomUrl}` : '';
lineCustomerOk = pushMessage(lineUserId,
  `✨ ご予約を承りました!\n\n📌 ${serviceName}\n📅 ${slotDate} ${slotTime}` +
  zoomLine + ...
);

URLがある枠には入り、ない枠には入らない。条件分岐はこれだけだ。


前日リマインドのとき

sendReminders() は毎朝9時に動くGASトリガーだ。予約シートを全件スキャンして、翌日の予約を持つお客様にLINEを送る。

ここでもZoom URLが必要になった。ただし予約シートにはURLが直接入っていない。slot_idはあるが、URLは予約枠シートにある。

lookup用のマップを予め構築した。

const slotZoomMap = {};
const slotRows = ss.getSheetByName(SHEET_SLOTS).getDataRange().getValues();
for (let j = 1; j < slotRows.length; j++) {
  if (slotRows[j][0]) slotZoomMap[String(slotRows[j][0])] = String(slotRows[j][7] || '');
}

予約シートの各行でslot_idからURLを引く。1行で解決する。


後からURLを変えるとき

Zoom URLは会議ごとに変わることがある。すでに登録した枠のURLを後から変えられる必要があった。

管理画面の枠一覧に「Zoom URLを編集」ボタンを追加した。

最初は prompt() でURLを入力させていた。手っ取り早いからだ。しかしLINEの内部ブラウザでは prompt() が動かない。オーナーがLINEから管理画面を開いて操作する可能性を考えると、使えない実装だった。

モーダルに作り直した。ボタンを押すと入力欄が出る。保存すると admin_update_slot_zoom が呼ばれてGASが更新する。


1カラムの追加が7つの関数を経由して、ひとつの機能として完成した。

地味な実装だ。ただし運用上の影響は小さくない。オンラインレッスンのたびにURLをコピーして送る手間がなくなる。前日リマインドにもURLが入る。お客様は通知を見るだけでZoomに入れる。

次回は、まったく新しいシートとフローを作った話を書く。イベント管理機能だ。

*シンプルシステム株式会社 代表 伊藤勝彦*