---
# System prepended metadata

title: 【レンタックス】メール部屋止めの解除忘れ
tags: [実装, 設計]

---

# 【レンタックス】メール部屋止めの解除漏れ対策

## 依頼元
- 柏原MD・新居MD
- 2023年12月の仲介・管理会議で発生した課題

## 概要・要旨
- 仲介営業店は特例として==メール==での部屋止めが許されている。
- 部屋止め期限は==1週間==
- ところが営業店はこの期限までに「解除」を忘れてしまう。
- この解除漏れを仕組で解決できないか。

## 現状の業務の流れ
- 営業店はレンタックスに部屋止めメールを送る。
- 宛先はレンタックスメーリス(ml_rentax)
```=
From:〇〇店
To:レンタックス部屋止め(ml_rentax.co.jp)
件名:ジャンフランソワ205号室の部屋止めお願いします。
お疲れ様です。〇〇です。
：
```
- レンタックスでは==審査課==が申込みに対応
- 申込の受諾と見守り機器の推進の件を上記メールに返信。
- 審査課はi-SPで対象部屋の==予約登録==を行う。
- 予約期限は1週間
```=
部屋止め：2024/1/7の場合
予約期間：2024/1/7～2024/1/14(1週間)
```
- これにより空室WEB・リアプロ等の掲載が落ちる。
- ==予約機能は外部の仲介業者の対しても利用する。==
- 「営業店」と外部は「仲介」で登録。
- 営業店は申込がキャンセルされたら部屋止め解除メールを送る。
- 予約期限日が過ぎても、破棄しないと空室にならない為、
**解除忘れはレンタックスにとっては純粋に機会損失となる。**

### レンタックスの業務に関して(高橋MG)
- 審査課では**申込を管理している**ので期限前に確認する事も有る。
- ↑従って上記を忘れるリスクは低いが…

## 課題
- 仲介店の部屋止め管理・・・「解除を忘れない仕組作り」
- i-SPの予約管理・・・・機能的に弱い?Kintone絡めるか？
予約期限日を過ぎたら自動的に情報を破棄して欲しい…:cry:

## 実装案 SpreadSheet＋GAS

### 概要
- 部屋止め申込/解除フォームをFormで作成
- この時予約期限の入力する(最大7日)
- 登録時にレンタックスへ部屋止めメールを送信
- フォームの内容をSpreadSheetに記録
- 時刻トリガーでスプレッドシートの内容をチェック、
部屋止め解除メールを送信する。

### ポイント
- そもそも「メール止め」ではなくなってしまう(メールに比べ利便性Down)のがどうか？
- メール発信がgmailドメインとなる。(返信されても…)
- **期限前にきちんと部屋止め解除した場合にどうするか？**
- スプレッドシート上にデータで申込状況を確認する。
- **Formを使用しない場合にSSでスケジュール実行が可能か？**
- 「時刻主導」のトリガーで実施可能。
- **デプロイURLを変更しないようにするには**
- [GASのWebアプリでURLを変えずに新バージョンを公開する（新エディタ） \- make it easy](https://ryjkmr.com/gas-web-app-deploy-new-same-url/)


### Googleアカウント作成

| 項目       | 内容                      |
| ---------- | ------------------------- |
| 利用           | 個人                          |
| 名         | レンタックス部屋止め      |
| 生年月日   | 1989/2/9                  |
| 性別       | 回答しない                |
| アドレス   | rentax.heyadome@gmail.com |
| パスワード | Rentax7023                |
| 追加メール | なし |
| 電話番号 | なし |

### 参考
[【GAS x HTML】確認画面付きの本格的な発注フォームを作る \| GASおじさんのブログ](https://uncle-gas.com/gas-html-order-form/)

### 実装時メモ
- Select(店舗)をフォームパラメータで送信
	- 選択しているValueが送信される。　
- Selecをスプシの内容から動的に生成
- 「修正する」ボタンの実装
- 入力フォームのバリデーション
	- 必須チェック
	- required属性のメッセージはブラウザに依存
	- スマホでなければOKなので、その時に考える。
	- [HTML 属性: required \- HTML: ハイパーテキストマークアップ言語 \| MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Attributes/required)
	- 日付範囲チェック(へ日～7日後の間) 
- 依頼するボタン実装
　- 内容をシートに書き込み
　	- sheet.appendRow([name,email,message]);→OK
　- 部屋止めメール送信
　- 完了ページに遷移
- 部屋止め解除画面
- Tableのシートのデータを展開
- チェックの列を設ける(ラジオで択一になるようにidを設定する？)
- ==フォームの送信値に含まれるかどうか要検証==
- 部屋止め解除バッチ
- シートから==本日==が部屋止め期限のデータを取得
- 解除メールを==一通==ずつ送信
- sheet.getRangeでまとめて

### 部屋止め解除依頼フォーム
- テーブルに未解除データを表示
- チェックで選択
- [テーブル · Bootstrap v5\.3](https://getbootstrap.jp/docs/5.3/content/tables/)
- [チェックボックスとラジオ · Bootstrap v5\.3](https://getbootstrap.jp/docs/5.3/forms/checks-radios/)
- 部屋止めと解除の分岐はパラメータで実装
	- 部屋止めからの分岐はinputのrequiredが必須チェックを求めるので不可
- Table部分のHTMLをGAS側で生成
- ラジオボタンの必須チェック
- ==requiredの動作は有効だが、BootStarpでは合うものがなかった==
- [x] 完了画面の「部屋止め」「部屋止め解除」を出し分ける。
- [x] 部屋止め完了メールに解除のリンクを付ける？→要検討
- [x] 期限のデフォルトを1週間後
- [x] バッチ処理のテスト
- 解約データ登録
- トリガーセット

### 開発環境
- 部屋止め
https://script.google.com/macros/s/AKfycbwx1NOv1B9FVKYI7KEIPVGr7bDLoWBP8zn4BQX4ZMsrk9Ij2SEGMRGxNA3lb2b-hXGN7A/exec
- 部屋止め解除
https://script.google.com/macros/s/AKfycbwx1NOv1B9FVKYI7KEIPVGr7bDLoWBP8zn4BQX4ZMsrk9Ij2SEGMRGxNA3lb2b-hXGN7A/exec?cancel=true

### URL短縮・バナー消去等
[Google Apps Script \(GAS\)とGoogle Workspace製品だけで実現する、Full StackのWeb開発｜クラウドテクノロジーブログ｜ソフトバンク](https://www.softbank.jp/biz/blog/cloud-technology/articles/202212/full-stack-gas/)
- Googleサイト上でSubmitさせるには、ボタン処理をJSで
[グーグルサイトに応答型のgoogle app scriptを埋め込みたい\[html初心者\]](https://teratail.com/questions/300czjfrfo33fn)
```
操作のポイントはこれです。
pushSubmit(){document.ifl.document.forms[0].submit();}

getElementsByTagName を使いたい場合はこちら
function pushSubmit(){document.ifl.document.getElementsByTagName("form")[0].submit();}

サンプルコードは以下のようになります。
<iframe> の src が同一ドメインであれば、 JavaScript でフレーム内を操作できますが、異なるドメインであれば、エラーになります。

index.html
<html><body><script>function pushSubmit(){document.ifl.document.forms[0].submit();}</script><a href="#" onclick="pushSubmit()">&lt;iframe&gt; submit</a><br><iframe name="ifl" src="framepage1.html"></iframe></body></html>

framepage1.html
<html><body>frame page 1<form action="framepage2.html"></form></body></html>

framepage2.html
<html><body>frame page 2</body></html>


>条件：
>iFrameに読み込むページは千差万別で、FormにIDもNameも設定されていない状況（ただし、必ずFromは１つ）で、そのiFrame内のフォームをsubmitする方法。

読み込むページは千差万別とありますが、セキュリティ仕様により、操作できる対象は同一ドメインに限定されます。
なお、ドメインは、 document.domain プロパティで集約的変更ができます。
例
www.example.co.jp --> example.co.jp
www2.example.co.jp --> example.co.jp
document.domain = "example.co.jp"

urdmerry
質問者
お礼
2011/03/08 08:48
( ゜∀゜)・∵. グハッ!!
異ドメイン間ではうまくいかないってのは致命的でしたorz
でもこれで、どうやっても権限がない的エラーが出てたんすね＞＜

ありがとうございました、何か根本的な別の方法を考えてみます(´・ω・｀)


```
- [x] googleサイトへの埋め込み
- 素の状態でChromeDevToolsのConsoleの内容を確認する。
```
Unsafe attempt to initiate navigation for frame with origin 'https://sites.google.com' from frame with URL 'https://n-dg3qubjwzfegqwqg5lcnaxymq2ntvimxg57i3la-0lu-script.googleusercontent.com/userCodeAppPanel'. The frame attempting navigation of the top-level window is sandboxed, but the flag of 'allow-top-navigation' or 'allow-top-navigation-by-user-activation' is not set.
```
- allow-top-navigation→iframeの属性
- [HTML サービス: サーバー機能と通信する  \|  Apps Script  \|  Google for Developers](https://developers.google.com/apps-script/guides/html/communication?hl=ja#index.html_4)
- 上記のサンプルコードをベースに実装したが、onsubmitイベントが発火しない！
- iframe(sandbox)側の属性を編集する手法も公開されていない

## 【追加】レンタックス審査課の承認機能追加
- [x] メール止めの宛先は審査課のみに変更(shinsa@)
- これは設定シートで変更可能
- [x] 承認フォームを作成
- [x] 依頼時のメールは店舗宛てと審査宛てに分割
- 店舗宛ては受付メール
- 審査宛ては承認フォームのURLを記載
- [ ] 承認/否認時にメール送信
- 返信メールは見守り機器の文言
- [ ] 一覧に承認/否認のステータス
- [x] 東エリアは利用不可
- 店舗設定シートで同期
- [x] 「メール止め」に文言修正
- [x] 0件でメール止め解除ボタンを使用不可に
- [x] 初期表示は5日後
- [ ] リマインドメールは1,2日前に実施