設計情報

投稿者: SPIRERS ナレッジ向上チーム 2025年2月14日 (金)

モデルルーム予約管理アプリ アプリ(DB・メール)設計

SPIRAL ver.2では内覧の予約受付から内覧後のアンケート、検討状況の確認対応やメール配信を行うモデルルーム予約管理アプリの構築が可能です。

この記事は ユーザ・グループ・アプリロール・APIエージェント設定 のフェーズとなります。
関連記事はこちら
SPIRAL ver.2はプログラミング経験がなくても、オリジナルの業務アプリの制作・カスタマイズができるローコード開発プラットフォームです。
詳しくは SPIRAL ver.2 とはをご覧ください。

アプリ機能

SPIRAL ver.2はアプリを定義した後にDBやページ、フォームを設定することができます。
DB設定はアプリ機能にて行います。 詳しくは アプリ機能 をご覧ください。
今回はアプリ機能を使って「物件マスタDB」「カレンダーDB」「内覧予約DB」 「資料請求DB」「案内後アンケートDB」「エラー内容メール通知DB」を作成します。

登場人物と業務フローの整理

内覧予約をする「申込者」と内覧受付を管理する「運用担当者」、
各モデルルームを管理する「モデルルーム管理者」、モデルルームごとに案内を行う「各担当グループ」
を登場人物としたモデルルーム予約管理アプリを想定しました。
登場人物(モデルルーム予約管理アプリを使う人)
また、以下の業務を想定します。
業務フロー図を作成すると全体の業務が可視化され、頭の中に思い描いたイメージの整理にもなります。
簡単な業務フロー図を作成するのもおすすめです。
業務フロー図

アプリ(DB)設計・構築

整理した登場人物と業務フローを元に、アプリを作成していきます。
アプリ全体像
DBについて
今回は以下6つのDBを作成します。
 ・物件マスタDB:物件情報の格納
 ・カレンダーDB:各物件の予約日、予約時間等の情報ををPHPで格納(最大1か月分の予約情報をPHPで登録)
 ・内覧予約DB:カレンダーDBにある情報から内覧予約した情報の格納
 ・資料請求DB:資料請求を行った人の情報を格納
 ・案内後アンケートDB:案内後アンケートの回答情報の格納
 ・エラー内容メール通知DB:カレンダーDBにPHPで登録する際、登録エラーが発生した時にエラー内容を格納
詳しい作成手順は DB機能 をご覧ください。

▼物件マスタDBフィールド一覧
物件情報を格納するDBです。
項目名 フィールドタイプ DB上で必須な属性
物件ID テキスト 入力必須:あり
ユニーク制約:あり
デフォルト値:自動生成(接頭語 「property」 レコードID 10桁)
物件名 テキスト インデックス:あり
広さ テキスト なし
価格 テキスト なし
備考・詳細 テキストエリア なし
担当グループ セレクト セレクト項目
1:東京
2:埼玉
3:千葉
4:群馬
担当メールアドレス メールアドレス 入力必須:あり
物件資料 ファイル なし
物件画像 ファイル 入力必須:あり
予約不可曜日 マルチセレクト 入力必須:あり
セレクト項目
0:日
1:月
2:火
3:水
4:木
5:金
6:土
残席数 整数 入力必須:あり
デフォルト値:0
公開日時 日付 入力必須:あり
公開フラグ セレクト 入力必須:あり
セレクト項目
0:非公開
1:公開準備
2:公開
インデックス:あり
▼カレンダーDBフィールド一覧
内覧予約日を管理するカレンダー情報を格納するDBです。
項目名 フィールドタイプ DB上で必須な属性
参照_物件マスタDB 参照フィールド 参照先DB:物件マスタDB
参照レコード数:1レコード
ラベルフィールド:物件ID
インデックス:あり
物件名 テキスト なし
物件ID テキスト なし
予約日 日付 インデックス:あり
予約時間 時刻 インデックス:あり
残席数 整数 なし
休みフラグ セレクト セレクト項目
1:通常営業
2:休み
インデックス:あり
予約ID テキスト 入力必須:あり
ユニーク制約:あり
インデックス:あり
▼内覧予約DBフィールド一覧
内覧予約、検討状況に関する情報を格納するDBです。
項目名 フィールドタイプ DB上で必須な属性
名前 テキスト なし
メールアドレス メールアドレス なし
都道府県 セレクト テンプレート:都道府県
郵便番号 テキスト なし
市区町村 テキスト なし
番地 テキスト なし
マンション・ビル名 テキスト なし
電話番号 電話番号 なし
職業 セレクト セレクト項目
1:会社員
2:公務員
3:パート・アルバイト
4:自営業
5:学生
6:その他
希望占有面積 セレクト セレクト項目
1:30㎡未満
2:35㎡
3:40㎡
4:45㎡以上
ご予算 セレクト セレクト項目
1:~2000万
2:3000万
3:4000万
4:5000万~
入居予定人数 セレクト セレクト項目
1:1人
2:2人
3:3人
4:4人以上
来場人数 セレクト セレクト項目
1:1人
2:2人
3:3人
4:4人以上
参照_物件マスタDB 参照フィールド 参照先DB:物件マスタDB
参照レコード数:1レコード
ラベルフィールド:ID
予約日 日付 なし
予約時間 時刻 なし
物件マスタDB_物件ID テキスト なし
カレンダーDB_物件ID テキスト なし
予約キャンセルフラグ セレクト セレクト項目
0:キャンセルする
1:キャンセル済
顧客の反応 テキストエリア なし
担当入力備考欄 テキストエリア なし
案内フラグ セレクト セレクト項目
0:案内完了
検討状況 セレクト セレクト項目
1:前向きに検討している
2:検討している
3:検討していない
検討理由 テキストエリア なし
検討備考欄 テキストエリア なし
予約番号 テキスト 入力必須:あり
ユニーク制約:あり
デフォルト値:自動生成(レコードID 10桁)
担当グループ セレクト セレクト項目
1:東京
2:埼玉
3:千葉
4:群馬
担当者 ユーザフィールド なし
NULL更新 セレクト セレクト項目
0:0
※入力項目なしでは登録フォームを保存することができないため、必ず設定します
配信フラグ(更新用) セレクト セレクト項目
0:配信しない
1:配信する
デフォルト値:固定値(配信する)
配信フラグ(非同期アクション用) セレクト セレクト項目
0:配信しない
1:配信する
予約ID テキスト なし
加算判定フラグ セレクト セレクト項目
0:動作なし
1:加算
多重登録チェック テキスト ユニーク制約:あり
削除済みフラグ セレクト セレクト項目
1:削除済み
個人情報の取扱い セレクト セレクト項目
1:同意する
▼資料請求DBフィールド一覧
資料請求に必要な情報を格納するDBです。
項目名 フィールドタイプ DB上で必須な属性
名前 テキスト なし
メールアドレス メールアドレス なし
都道府県 セレクト テンプレート:都道府県
郵便番号 テキスト なし
市区町村 テキスト なし
番地 テキスト なし
マンション・ビル名 テキスト なし
電話番号 電話番号 なし
職業 セレクト セレクト項目
1:会社員
2:公務員
3:パート・アルバイト
4:自営業
5:学生
6:その他
希望占有面積 セレクト セレクト項目
1:30㎡未満
2:35㎡
3:40㎡
4:45㎡以上
ご予算 セレクト セレクト項目
1:~2000万
2:3000万
3:4000万
4:5000万~
入居予定人数 セレクト セレクト項目
1:1人
2:2人
3:3人
4:4人以上
参照_物件マスタDB 参照フィールド 参照先DB:物件マスタDB
参照レコード数:1レコード
ラベルフィールド:ID
物件ID テキスト なし
請求ID テキスト なし
担当グループ セレクト セレクト項目
1:東京
2:埼玉
3:千葉
4:群馬
担当者 ユーザフィールド なし
個人情報の取扱い セレクト セレクト項目
1:同意する
▼案内後アンケートDBフィールド一覧
案内後アンケート情報を格納するDBです。
項目名 フィールドタイプ DB上で必須な属性
名前 テキスト なし
メールアドレス メールアドレス なし
来場された目的 セレクト セレクト項目
1:完成形を実物で確認するため
2:予算と住宅規模を知るため
3:他社と比較するため
4:購入予定はまだないが、今後の参考にするため
5:特になし
案内は参考になりましたでしょうか セレクト セレクト項目
1:参考になった
2:多少は参考になった
3:どちらともいえない
4:あまり参考にならなかった
5:参考にならなかった
案内はいかがでしたでしょうか セレクト セレクト項目
1:満足している
2:多少満足している
3:どちらともいえない
4:あまり満足していない
5:満足していない
部屋はいかがでしたでしょうか セレクト セレクト項目
1:満足している
2:多少満足している
3:どちらともいえない
4:あまり満足していない
5:満足していない
その他 テキストエリア なし
参照_物件マスタDB 参照フィールド 参照先DB:物件マスタDB
参照レコード数:1レコード
ラベルフィールド:ID
担当グループ セレクト セレクト項目
1:東京
2:埼玉
3:千葉
4:群馬
▼エラー内容メール通知DBフィールド一覧
カレンダーDBへスケジュール・非同期トリガでデータ登録時、
エラーが発生した場合エラー内容を格納し担当者へメール配信をするDBです。
項目名 フィールドタイプ DB上で必須な属性
対応者 テキスト なし
エラーメッセージ テキストエリア なし
エラーフラグ セレクト セレクト項目
0:エラー
1:エラー解消
DBトリガのレコードアクションについて
本アプリでは以下8つのレコードアクショントリガを設定します。
 ・内覧予約DB:【登録トリガ】残席数の減算
 ・内覧予約DB:【登録トリガ】参照フィールド・多重チェック登録
 ・内覧予約DB:【登録トリガ】登録チェック
 ・内覧予約DB:【更新トリガ】案内後アンケート配信フラグ
 ・内覧予約DB:【更新トリガ】予約キャンセル
 ・内覧予約DB:【更新トリガ】加算処理
 ・資料請求DB:【登録トリガ】物件ID引き込み
 ・案内後アンケートDB:【登録トリガ】参照フィールド登録

具体的な レコードアクション の処理発動条件をご案内します。

●内覧予約DB:【登録トリガ】残席数の減算
※内覧予約DBの登録トリガで設定します
アクション先 他DB(カレンダーDB)
アクション先への操作 更新
識別キー 自DBフィールド:予約ID
対象DBフィールド:予約ID
認証キー 設定なし
更新対象が存在しない場合 アクション先DBに更新せずに、正常終了
残席数の減算 処理
発動条件 一部の経路:フォーム
処理タイプ 更新
処理マッピング アクション先DBフィールド:残席数 = 格納値:残席 - 1
※格納値設定は関数に切り替える必要があります
※残席には、DBフィールドの残席を入力した値、
@xxxxx.xxxxxが入ります。
エラー処理 全てエラー終了

●内覧予約DB:【登録トリガ】参照フィールド・多重チェック登録
※内覧予約DBの登録トリガで設定します
アクション先 自DB(内覧予約DB)
アクション先への操作 更新
参照フィールド・多重チェック登録 処理
発動条件 指定しない
処理タイプ 更新
処理マッピング アクション先DBフィールド
 物件マスタDB_物件ID = 格納値:参照_物件マスタDB > 物件ID
 担当グループ = 格納値:参照_物件マスタDB > 担当グループ
 多重登録チェック = 格納値:メールアドレス || '-' || 予約ID
※格納値設定は関数に切り替える必要があります
※物件マスタDB_物件ID、多重登録チェックには、DBフィールドを入力した値、
@xxxxx.xxxxxが入ります。
エラー処理 全てエラー終了

●内覧予約DB:【登録トリガ】登録チェック
※内覧予約DBの登録トリガで設定します
アクション先 自DB(内覧予約DB)
アクション先への操作 更新
参照フィールド・多重チェック登録 処理
発動条件 関数条件:物件マスタDB_物件ID <> カレンダーDB_物件ID
※物件マスタDB_物件ID、カレンダーDB_物件IDには、DBフィールドを入力した値、
@xxxxx.xxxxxが入ります。
処理タイプ エラー

●内覧予約DB:【更新トリガ】案内後アンケート配信フラグ
※内覧予約DBの更新トリガで設定します
アクション先 自DB(内覧予約DB)
アクション先への操作 更新
案内後アンケート配信フラグ 処理
発動条件 一部の経路:操作画面
簡易条件:「案内フラグ」 等しい 「案内完了」
処理タイプ 更新
処理マッピング アクション先DBフィールド
配信フラグ(非同期アクション用) = 配信フラグ(更新用)
配信フラグ(更新用) = 0
※配信フラグ(更新用)は格納値設定は関数に切り替える必要があります
エラー処理 全てエラー終了

●内覧予約DB:【更新トリガ】予約キャンセル
※内覧予約DBの更新トリガで設定します
処理を2つ設定します。

アクション先 自DB(内覧予約DB)
アクション先への操作 更新
予約キャンセル 処理
発動条件 簡易条件
「予約キャンセルフラグ」 等しい 「キャンセルする」
「削除済フラグ」 値なし
処理タイプ 更新
処理マッピング アクション先DBフィールド
予約キャンセルフラグ = 1
多重登録チェック = RANDOM_NUM_ALP_SYM(32)
加算判定フラグ = 1
※格納値設定は関数に切り替える必要があります
エラー処理 全てエラー終了
キャンセル前/キャンセル済
発動条件 簡易条件
「予約キャンセルフラグ」 等しくない 「キャンセルする」
「削除済フラグ」 値あり
処理タイプ 更新
処理マッピング アクション先DBフィールド
加算判定フラグ = 0
※格納値設定は関数に切り替える必要があります
エラー処理 全てエラー終了

●内覧予約DB:【更新トリガ】加算処理
※内覧予約DBの更新トリガで設定します
アクション先 他DB(カレンダーDB)
アクション先への操作 更新
識別キー 自DBフィールド:予約ID
対象DBフィールド:予約ID
認証キー 設定なし
更新対象が存在しない場合 エラー終了
案内後アンケート配信フラグ 処理
発動条件 関数条件:「加算判定フラグ」 等しい 1
※関数条件にて設定する必要があります
処理タイプ 更新
処理マッピング アクション先DBフィールド
残席数 = 残席数 + 1
※残席数は格納値設定は関数に切り替える必要があります
エラー処理 全てエラー終了

●資料請求DB:【登録トリガ】物件ID引き込み
※資料請求DBの登録トリガで設定します
アクション先 自DB(内覧予約DB)
アクション先への操作 更新
物件ID引き込み 処理
発動条件 指定しない
処理タイプ 更新
処理マッピング アクション先DBフィールド
 物件ID = 格納値:参照_物件マスタDB > 物件ID
 担当グループ = 格納値:参照_物件マスタDB > 担当グループ
エラー処理 全てエラー終了

●案内後アンケートDB:【登録トリガ】参照フィールド登録
※案内後アンケートDBの登録トリガで設定します
アクション先 自DB(内覧予約DB)
アクション先への操作 更新
参照フィールド登録 処理
発動条件 指定しない
処理タイプ 更新
処理マッピング アクション先DBフィールド:担当グループ = 格納値:参照_物件マスタDB > 担当グループ
エラー処理 全てエラー終了
DBトリガの非同期アクション(PHP実行)について
本アプリでは以下の非同期アクション(PHP実行)を設定します。

 ・物件マスタDB:【更新トリガ】物件マスタDB_非同期カレンダーDB登録処理
具体的な PHP実行アクション の処理発動条件をご案内します。

注意

設定の説明部分にて、ソースコードを記載しております。
API_KEY、DB_ID、APP_ROLE、APP_IDは仮に「xxxxx」、各フィールドの識別名 含めて文言などは、
デモの環境に合わせたものとなります。
実際に同様のものを作成する際は、変更が必要となりますので、ご注意ください。
ユーザ・グループ・アプリロール・APIエージェント設定:APIエージェントの権限を考える

●物件マスタDB:【更新トリガ】物件マスタDB_非同期カレンダーDB登録処理
※物件マスタDBの更新トリガで設定します
内覧予約を管理する際、予約日毎にを自動で登録することで予約の管理を軽減することができます。
本PHPアクションでは、物件マスタDBのレコードの「公開フラグ」を「公開準備」に操作画面から変更した際、
カレンダーDBに公開日以降かつ、本日から3週間後の土曜日までのデータを登録し、「公開フラグ」を「公開」にし、公開します。
また、登録エラーが発生した際は、エラー内容をエラー内容通知DBに登録します。
メールアクションの設定にて、エラー内容通知DBにエラー内容が登録された際、管理者にメール配信を行う設定をしております。
アクションタイプ PHP実行
経路条件 一部の経路:操作画面

PHP:物件マスタDB_非同期カレンダーDB登録処理
<?php
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
define("API_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
define("APP_ROLE", "xxxxxxxxxx");

//物件マスタDBのDBID
define("PROPERTY_DB_ID", "xxxxx");

//カレンダーDBのDBID
define("CALENDER_DB_ID", "xxxxx");

//エラー内容メール通知DBのDBID
define("ERRORMAIL_DB_ID", "xxxxx");
define("APP_ID", "xxxxx");

//予約時間の宣言
// 日付と時間の枠が200以内に収める必要あり
define("RESERVATION_TIME",array(10,13,16));
define("REG_DATE",21);

//------------------------------
// API実行
//------------------------------

$commonBase = CommonBase::getInstance();
$triggerRecord = $SPIRAL->getRecord();
// 公開フラグが「公開準備」の場合(publicFlgは物件マスタDBの公開フラグの識別名)
if($triggerRecord["item"]["publicFlg"]==1){
    //REG_DATE日後の日付を取得
    $afterRegDate = date("Y-m-d",strtotime("+".REG_DATE." day"));
    //取得した日付の次の日曜日を取得
    $nextSunday = date("Y-m-d",strtotime("next sunday",strtotime($afterRegDate)));
    //diffを使用するため、DateTimeに変更
    // 公開日から三週間後の土曜日迄が何日あるか(publicFlgは物件マスタDBの公開フラグの識別名)
    $comparison1 = new DateTime($triggerRecord["item"]["publicDate"]);
    $comparison2 = new DateTime($nextSunday);
    //本日~REG_DATE後の日曜日の差を取得
    $interval = $comparison1->diff($comparison2);
    $intervalDay = $interval->d;
    // where条件で使用する公開日から三週間後の日曜日の日付を取得(publicDateは物件マスタDBの公開日の識別名)
    $whereDate = date("Y-m-d",strtotime($triggerRecord["item"]["publicDate"] ."+" . $intervalDay ." day"));
    //公開フラグが「公開準備」かつ物件マスタに登録されている公開日が3週間後の日曜日より前の場合)(publicDateは物件マスタDBの公開日の識別名)
    if($triggerRecord["item"]["publicDate"]<$nextSunday){
        // 物件IDが一致するデータをカレンダーDBから取得
        // 公開日~今日の三週間後の日曜日より前という条件を入れる
        // スケジュールトリガで登録する日付より前迄を検索
        // reservationDateはカレンダーDBの予約日の識別名、publicDate、propertyIDは物件マスタDBの公開日、物件IDの識別名
        $where = "?where=@reservationDate<DATE('" . $whereDate . "')AND@reservationDate>=DATE('" . $triggerRecord["item"]["publicDate"] . "')AND@propertyID='" . $triggerRecord["item"]["propertyID"] . "'";
        // limitを200を指定
        $limit = "&limit=200";
        // totalCountを取得するため、enableTotalCountをtrue
        $enableTotalCount = "&enableTotalCount=true";
        // レコードの取得
        $resultRecordListSelectCalender = $commonBase->apiCurlAction("GET", "/apps/". APP_ID. "/dbs/". CALENDER_DB_ID. "/records". $where . $limit . $enableTotalCount);
        //------------------------------
        // あれば、バルクで削除
        // https://api.spiral-platform.com/v1/apps/{app}/dbs/{db}/records/bulk
        //------------------------------
        $deleteData = array();
        if($resultRecordListSelectCalender["totalCount"]>0){
            // データ形成
            foreach($resultRecordListSelectCalender["items"] as $value){
                $deleteData[] =$value["_id"];
            }
            // 削除するフォーマットに置き換え
            $bulkDeleteData = array("ids" => $deleteData);
            // データの削除
            $resultRecordListDelete = $commonBase->apiCurlAction("DELETE", "/apps/". APP_ID. "/dbs/". CALENDER_DB_ID . "/records/bulk", $bulkDeleteData);
        }
        //------------------------------
        // データの登録
        //------------------------------
        $regData = array();
        for($i=0; $i<$intervalDay; $i++){
            foreach(RESERVATION_TIME as $timeValue){
                //公開日~21日+次の日曜日までの日付(publicDateは物件マスタDBの公開日の識別名)
                $date = date("Y-m-d",strtotime($triggerRecord["item"]["publicDate"] ."+" . $i ." day"));
                // 予約可能曜日があるかないかチェック(weekは物件マスタDBの予約不可曜日の識別名)
                if(is_array($triggerRecord["item"]["week"])){
                    if(in_array(date('w', strtotime($date)),$triggerRecord["item"]["week"])){
                        $regData[] = array(
                            //参照フィールドのid(preview_refはカレンダーDBの参照_物件マスタDBの識別名)
                            "preview_ref"  => $triggerRecord["item"]["_id"],
                            //物件名(propertyNameはカレンダーDBの物件名の識別名)
                            "propertyName"  => $triggerRecord["item"]["propertyName"],
                            //予約日付を登録(reservationDateはカレンダーDBの予約日の識別名)
                            "reservationDate" => $date,
                            //予約時間の入力(reservationTimeはカレンダーDBの予約時間の識別名)
                            "reservationTime" => $timeValue . ":0:0",
                            //残席数(seatNumはカレンダーDBの残席数の識別名)
                            "seatNum" => $triggerRecord["item"]["seatNum"],
                            //値がある場合、休日フラグを立てる(holidayFlagはカレンダーDBの休日フラグの識別名)
                            "holidayFlag" => "2",
                            //予約IDの作成(物件ID_yyyy-mm-dd-hh)(reservationIDはカレンダーDBの予約ID、propertyIDは物件マスタDBの物件IDの識別名)
                            "reservationID"  => $triggerRecord["item"]["propertyID"] . "_" . $date . "-" . $timeValue ,
                            //物件ID(propertyIDはカレンダーDB、$propertyValue["propertyID"]のpropertyIDは物件マスタDBの物件IDの識別名)
                            "propertyID" => $triggerRecord["item"]["propertyID"]
                        );
                    }else{
                        $regData[] = array(
                            //参照フィールドのid(preview_refはカレンダーDBの参照_物件マスタDBの識別名)
                            "preview_ref"  => $triggerRecord["item"]["_id"],
                            //物件名(propertyNameはカレンダーDBの物件名の識別名)
                            "propertyName"  => $triggerRecord["item"]["propertyName"],
                            //予約日付を登録(reservationDateはカレンダーDBの予約日の識別名)
                            "reservationDate" => $date,
                            //予約時間の入力(reservationTimeはカレンダーDBの予約時間の識別名)
                            "reservationTime" => $timeValue . ":0:0",
                            //残席数(seatNumはカレンダーDBの残席数の識別名)
                            "seatNum" => $triggerRecord["item"]["seatNum"],
                            //値がない場合、休日フラグを立てない(holidayFlagはカレンダーDBの休日フラグの識別名)
                            "holidayFlag" => "1",
                            //予約IDの作成(物件ID_yyyy-mm-dd-hh)(reservationIDはカレンダーDBの予約ID、propertyIDは物件マスタDBの物件IDの識別名)
                            "reservationID"  => $triggerRecord["item"]["propertyID"] . "_" . $date . "-" . $timeValue ,
                            //物件ID(propertyIDはカレンダーDB、$propertyValue["propertyID"]のpropertyIDは物件マスタDBの物件IDの識別名)
                            "propertyID" => $triggerRecord["item"]["propertyID"]
                        );
                    }
                }else{
                    $regData[] = array(
                        //参照フィールドのid(preview_refはカレンダーDBの参照_物件マスタDBの識別名)
                        "preview_ref"  => $triggerRecord["item"]["_id"],
                        //物件名(propertyNameはカレンダーDBの物件名の識別名)
                        "propertyName"  => $triggerRecord["item"]["propertyName"],
                        //予約日付を登録(reservationDateはカレンダーDBの予約日の識別名)
                        "reservationDate" => $date,
                        //予約時間の入力(reservationTimeはカレンダーDBの予約時間の識別名)
                        "reservationTime" => $timeValue . ":0:0",
                        //残席数(seatNumはカレンダーDBの残席数の識別名)
                        "seatNum" => $triggerRecord["item"]["seatNum"],
                        //値がない場合、休日フラグを立てない(holidayFlagはカレンダーDBの休日フラグの識別名)
                        "holidayFlag" => "1",
                        //予約IDの作成(物件ID_yyyy-mm-dd-hh)(reservationIDはカレンダーDBの予約ID、propertyIDは物件マスタDBの物件IDの識別名)
                        "reservationID"  => $triggerRecord["item"]["propertyID"] . "_" . $date . "-" . $timeValue ,
                        //物件ID(propertyIDはカレンダーDB、$propertyValue["propertyID"]のpropertyIDは物件マスタDBの物件IDの識別名)
                        "propertyID" => $triggerRecord["item"]["propertyID"]
                    );
                }
            }
        }
        // print_r($regData);
        //------------------------------
        // データの登録
        //------------------------------
        $bulkInsertData = array("records" => $regData);
        $resultRecordListInsert = $commonBase->apiCurlAction("POST", "/apps/". APP_ID. "/dbs/". CALENDER_DB_ID. "/records/bulk", $bulkInsertData);
        // エラーチェック:bulkInsertの成功/失敗
        if(array_key_exists('status',$resultRecordListInsert)){
                // 登録するデータを指定
                $insertData = array(
                    //エラーメッセージの作成(errorMessageはエラー内容メール通知DBのエラーメッセージの識別名)
                    "errorMessage"  => ("code:" . $resultRecordListInsert["errors"][0]["code"] . "\n" . "message:" . $resultRecordListInsert["errors"][0]["message"] . "\n" . 
                                        "locationType:" . $resultRecordListInsert["errors"][0]["locationType"] . "\n" . "location:"  . $resultRecordListInsert["errors"][0]["location"] . "\n\n" .
                                        "エラーメッセージを確認・解消の上、非同期トリガより「カレンダーDB_非同期登録処理」を手動実行してください") ,
                    //エラーフラグをエラーで登録
                    "errorFlg"  => "0"
                );
                $resultRecordInsert = $commonBase->apiCurlAction("POST", "/apps/". APP_ID. "/dbs/". ERRORMAIL_DB_ID. "/records", $insertData);
        }else{
            // bulkInsertが成功したとき
            // 公開準備フラグを公開(publicDateは物件マスタDBの公開日の識別名)
            $UpdateData = array("publicFlg"  => "2");
            $recordId = $triggerRecord["item"]["_id"];
            $resultRecordUpdate = $commonBase->apiCurlAction("PATCH", "/apps/". APP_ID. "/dbs/". PROPERTY_DB_ID . "/records/". $recordId, $UpdateData);
            print_r($resultRecordUpdate);
        }
    }else{
        // 公開日が先で登録処理なしで、公開準備フラグを公開(publicDateは物件マスタDBの公開日の識別名)
        $UpdateData = array("publicFlg"  => "2");
        $recordId = $triggerRecord["item"]["_id"];
        $resultRecordUpdate = $commonBase->apiCurlAction("PATCH", "/apps/". APP_ID. "/dbs/". PROPERTY_DB_ID . "/records/". $recordId, $UpdateData);
        // print_r($resultRecordUpdate);
        // echo $triggerRecord["item"]["propertyName"] . "の公開日は" . $nextSunday . "以降です。<br>";
    }
}else{
    // echo "公開準備以外";
}

//------------------------------
// 共通モジュール
//------------------------------
class CommonBase {
    /**
     * シングルトンインスタンス
     * @var UserManager
     */
    protected static $singleton;

    public function __construct() {
        if (self::$singleton) {
            throw new Exception('must be singleton');
        }
        self::$singleton = $this;
    }
    /**
     * シングルトンインスタンスを返す
     * @return UserManager
     */
    public static function getInstance() {
        if (!self::$singleton) {
            return new CommonBase();
        } else {
            return self::$singleton;
        }
    }
    /**
     * V2用 API送信ロジック
     * @return Result
     */
    function apiCurlAction($method, $addUrlPass, $data = null, $multiPart = null, $jsonDecode = null) {
        $header = array(
            "Authorization:Bearer ". API_KEY,
            "X-Spiral-Api-Version: 1.1",
        );
        if($multiPart) {
            $header = array_merge($header, array($multiPart));
        } else {
            $header = array_merge($header, array("Content-Type:application/json"));
        }
        if(APP_ROLE){
			$header = array_merge($header, array("X-Spiral-App-Role: ".APP_ROLE));
		}
        // curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, API_URL. $addUrlPass);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        if ($method == "POST") {
            if ($multiPart) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            } else {
                curl_setopt($curl, CURLOPT_POSTFIELDS , json_encode($data));
            }
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "PATCH") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "DELETE") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        $response = curl_exec($curl);
        if (curl_errno($curl)) echo curl_error($curl);
        curl_close($curl);
        if($jsonDecode){
			return $response;
		}else{
            return json_decode($response, true);
		}
    }
}
?>

スケジュールトリガのPHP実行について
本アプリでは以下2つのPHPを実行するスケジュールトリガを設定します。

 ・カレンダーDB_スケジュールトリガ登録処理
 ・カレンダーDB_スケジュールトリガ削除処理
具体的な スケジュールトリガのPHP実行アクション の処理発動条件をご案内します。

注意

設定の説明部分にて、ソースコードを記載しております。
API_KEY、DB_ID、APP_ROLE、APP_IDは仮に「xxxxx」、各フィールドの識別名 含めて文言などは、
デモの環境に合わせたものとなります。
実際に同様のものを作成する際は、変更が必要となりますので、ご注意ください。
また、APP_ROLEについては、下記で設定を行いますので、ご参照ください。
ユーザ・グループ・アプリロール・APIエージェント設定:APIエージェントの権限を考える

●スケジュールトリガ:カレンダーDB_スケジュールトリガ登録処理
内覧予約を管理する際、予約日毎にを自動で登録することで予約の管理を軽減することができます。
本PHPアクションでは、物件マスタDBのレコードの「公開フラグ」が「公開」の物件に対し、
3週間後の日付から7日分データを登録するします。
また、登録エラーが発生した際は、エラー内容をエラー内容通知DBに登録します。
メールアクションの設定にて、エラー内容通知DBにエラー内容が登録された際、管理者にメール配信を行う設定をしております。
表示名 カレンダーDB_スケジュールトリガ登録処理
実行タイミング 毎週 日曜日 02:00

PHP:カレンダーDB_スケジュールトリガ登録処理
<?php
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
//APIKEY
define("API_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
//APIアプリロールの識別名
define("APP_ROLE", "xxxxx");
//物件マスタDBのDBID
define("PROPERTY_DB_ID", "xxxxx");
//カレンダーDBのDBID
define("CALENDER_DB_ID", "xxxxx");
//エラー内容メール通知DBのDBID
define("ERRORMAIL_DB_ID", "xxxxx");
//アプリID
define("APP_ID", "xxxxx");

//------------------------------
// API実行
//------------------------------

$commonBase = CommonBase::getInstance();

//------------------------------
// 物件マスタDBの取得
//------------------------------

//公開フラグが公開のフィールドを取得(publicFlgは物件マスタDBの公開フラグの識別名)
$where = "?where=@publicFlg='2'";

//取得するフィールドの決定(propertyID,propertyName,week,seatNum,publicDateは物件マスタDBの物件ID、物件名、予約不可曜日、残席数、公開日の識別名)
$fields = "&fields=propertyID,propertyName,week,seatNum,publicDate";

// totalCountを取得するため、enableTotalCountをtrue
$enableTotalCount = "&enableTotalCount=true";

//レコードの取得
$resultRecordListSelect = $commonBase->apiCurlAction("GET", "/apps/". APP_ID. "/dbs/". PROPERTY_DB_ID. "/records" . $where . $fields . $enableTotalCount);

//------------------------------
// 21日後の日付の取得
//------------------------------

$threeWeekDate = date("Y-m-d",strtotime("+21 day"));

//------------------------------
// 登録するデータの作成
//------------------------------

//予約時間
$reservationTime = array(10,13,16);
//登録するデータを格納する配列
$regData=array();

if($resultRecordListSelect["totalCount"]>0){
    //物件分だけ値を出す
    foreach($resultRecordListSelect["items"] as $propertyValue){
        //1週間分のデータを登録
        for($i=0; $i<7; $i++){
            foreach($reservationTime as $timeValue){
                //登録する日付
                $date = date("Y-m-d",strtotime($threeWeekDate ."+" . $i ." day"));
                if(is_array($propertyValue["week"])){
                    //array_searchで配列の中にその値が含まれているかをチェック(weekは物件マスタDBの予約不可曜日の識別名)
                    if(in_array(date('w', strtotime($date)),$propertyValue["week"])){
                        $regData[] = array(
                            //参照フィールドのid(preview_refはカレンダーDBの参照_物件マスタDBの識別名)
                            "preview_ref"  => $propertyValue["_id"],
                            //物件名(propertyNameはカレンダーDBの物件名の識別名)
                            "propertyName"  => $propertyValue["propertyName"],
                            //予約日付が21日後の$i日後を登録(reservationDateはカレンダーDBの予約日の識別名)
                            "reservationDate" => $date,
                            //予約時間の入力(reservationTimeはカレンダーDBの予約時間の識別名)
                            "reservationTime" => $timeValue . ":0:0",
                            //残席数(seatNumはカレンダーDBの残席数の識別名)
                            "seatNum" => $propertyValue["seatNum"],
                            //値がある場合、休日フラグを立てる(holidayFlagはカレンダーDBの休日フラグの識別名)
                            "holidayFlag" => "2",
                            //予約IDの作成(物件ID_yyyy-mm-dd-hh)(物件ID_yyyy-mm-dd-hh)(reservationIDはカレンダーDBの予約ID、propertyIDは物件マスタDBの物件IDの識別名)
                            "reservationID"  => $propertyValue["propertyID"] . "_" . $date . "-" . $timeValue ,
                            //物件ID(propertyIDはカレンダーDB、$propertyValue["propertyID"]のpropertyIDは物件マスタDBの物件IDの識別名)
                            "propertyID" => $propertyValue["propertyID"]
                        );
                    }else{
                        $regData[] = array(
                            //参照フィールドのid(preview_refはカレンダーDBの参照_物件マスタDBの識別名)
                            "preview_ref"  => $propertyValue["_id"],
                            //物件名(propertyNameはカレンダーDBの物件名の識別名)
                            "propertyName"  => $propertyValue["propertyName"],
                            //予約日付が21日後の$i日後を登録(reservationDateはカレンダーDBの予約日の識別名)
                            "reservationDate" => $date,
                            //予約時間の入力(reservationTimeはカレンダーDBの予約時間の識別名)
                            "reservationTime" => $timeValue . ":0:0",
                            //残席数(seatNumはカレンダーDBの残席数の識別名)
                            "seatNum" => $propertyValue["seatNum"],
                            //値がない場合、休日フラグを立てない(holidayFlagはカレンダーDBの休日フラグの識別名)
                            "holidayFlag" => "1",
                            //予約IDの作成(物件ID_yyyy-mm-dd-hh)(物件ID_yyyy-mm-dd-hh)(reservationIDはカレンダーDBの予約ID、propertyIDは物件マスタDBの物件IDの識別名)
                            "reservationID"  => $propertyValue["propertyID"] . "_" . $date . "-" . $timeValue ,
                            //物件ID(propertyIDはカレンダーDB、$propertyValue["propertyID"]のpropertyIDは物件マスタDBの物件IDの識別名)
                            "propertyID" => $propertyValue["propertyID"]
                        );
                    }
                }else{
                    $regData[] = array(
                        //参照フィールドのid(preview_refはカレンダーDBの参照_物件マスタDBの識別名)
                        "preview_ref"  => $propertyValue["_id"],
                        //物件名(propertyNameはカレンダーDBの物件名の識別名)
                        "propertyName"  => $propertyValue["propertyName"],
                        //予約日付が21日後の$i日後を登録(reservationDateはカレンダーDBの予約日の識別名)
                        "reservationDate" => $date,
                        //予約時間の入力(reservationTimeはカレンダーDBの予約時間の識別名)
                        "reservationTime" => $timeValue . ":0:0",
                        //残席数(seatNumはカレンダーDBの残席数の識別名)
                        "seatNum" => $propertyValue["seatNum"],
                        //値がない場合、休日フラグを立てない(holidayFlagはカレンダーDBの休日フラグの識別名)
                        "holidayFlag" => "1",
                        //予約IDの作成(物件ID_yyyy-mm-dd-hh)(物件ID_yyyy-mm-dd-hh)(reservationIDはカレンダーDBの予約ID、propertyIDは物件マスタDBの物件IDの識別名)
                        "reservationID"  => $propertyValue["propertyID"] . "_" . $date . "-" . $timeValue ,
                        //物件ID(propertyIDはカレンダーDB、$propertyValue["propertyID"]のpropertyIDは物件マスタDBの物件IDの識別名)
                        "propertyID" => $propertyValue["propertyID"]
                    );
                }
            }
        }
    }

    //------------------------------
    // データの複数登録
    //------------------------------

    $bulkInsertData = array("records" => $regData);
    $resultRecordListInsert = $commonBase->apiCurlAction("POST", "/apps/". APP_ID. "/dbs/". CALENDER_DB_ID. "/records/bulk", $bulkInsertData);

    //------------------------------
    //データの登録に失敗したとき
    //------------------------------

    if(array_key_exists('status',$resultRecordListInsert)){
        // スケジュールトリガで登録される予定の最後の日付
        $threeWeekRegistDate = date("Y-m-d",strtotime("+27 day"));
        // 登録するデータを指定
        $insertData = array(
            ////エラーメッセージの作成(errorMessageはエラー内容メール通知DBのエラーメッセージの識別名)
            "errorMessage"  => ("code:" . $resultRecordListInsert["errors"][0]["code"] . "\n" . "message:" . $resultRecordListInsert["errors"][0]["message"] . "\n" . 
                                "locationType:" . $resultRecordListInsert["errors"][0]["locationType"] . "\n" . "location:"  . $resultRecordListInsert["errors"][0]["location"] . "\n\n" .
                                "messageがvalue is duplicatedlocationの場合、カレンダーDBに登録する予定の日付が既に登録されています。" . "\n" .
                                $threeWeekDate . "から" . $threeWeekRegistDate . "の登録されている日付を手動で削除し、スケジュールトリガを手動実行をしてください。") ,
            //エラーフラグをエラーで登録(errorFlgはエラー内容メール通知DBのエラーフラグの識別名)
            "errorFlg"  => "0"
        );
        $resultRecordInsert = $commonBase->apiCurlAction("POST", "/apps/". APP_ID. "/dbs/". ERRORMAIL_DB_ID. "/records", $insertData);
        // 出力チェック
        // print_r($resultRecordInsert);
    }
}else{
    // 出力チェック
    // echo "公開準備が「公開」のフィールドがありません";
}

//------------------------------
// 共通モジュール
//------------------------------
class CommonBase {
    /**
     * シングルトンインスタンス
     * @var UserManager
     */
    protected static $singleton;

    public function __construct() {
        if (self::$singleton) {
            throw new Exception('must be singleton');
        }
        self::$singleton = $this;
    }
    /**
     * シングルトンインスタンスを返す
     * @return UserManager
     */
    public static function getInstance() {
        if (!self::$singleton) {
            return new CommonBase();
        } else {
            return self::$singleton;
        }
    }
    /**
     * V2用 API送信ロジック
     * @return Result
     */
    function apiCurlAction($method, $addUrlPass, $data = null, $multiPart = null, $jsonDecode = null) {
        $header = array(
            "Authorization:Bearer ". API_KEY,
            "X-Spiral-Api-Version: 1.1",
        );
        if($multiPart) {
            $header = array_merge($header, array($multiPart));
        } else {
            $header = array_merge($header, array("Content-Type:application/json"));
        }
        if(APP_ROLE){
            $header = array_merge($header, array("X-Spiral-App-Role: ".APP_ROLE));
        }
        // curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, API_URL. $addUrlPass);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        if ($method == "POST") {
            if ($multiPart) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            } else {
                curl_setopt($curl, CURLOPT_POSTFIELDS , json_encode($data));
            }
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "PATCH") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "DELETE") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        $response = curl_exec($curl);
        if (curl_errno($curl)) echo curl_error($curl);
        curl_close($curl);
        if($jsonDecode){
            return $response;
        }else{
            return json_decode($response, true);
        }
    }
}
?>

●スケジュールトリガ:カレンダーDB_スケジュールトリガ削除処理
内覧予約の日付を過ぎたカレンダーDBの日付は、ゴミデータとして残ってしまうため、
カレンダーDBのデータを削除するスケジュールトリガを作成いたします。
表示名 カレンダーDB_スケジュールトリガ削除処理
実行タイミング 毎週 日曜日 02:00

PHP:カレンダーDB_スケジュールトリガ削除処理
<?php
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
//APIKEY
define("API_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
//APIアプリロールの識別名
define("APP_ROLE", "xxxxx");
//カレンダーDBのDBID
define("CALENDER_DB_ID", "xxxxx");
//アプリID
define("APP_ID", "xxxxx");

//------------------------------
// API実行
//------------------------------

$commonBase = CommonBase::getInstance();

// 検索条件:今日より前の日付(reservationDateにはカレンダーDBの予約日の識別名)
$requestBody = array(
    "where" => "@reservationDate < DATE(NOW())"
);

// 削除バッチ処理
$resultBatch = $commonBase->apiCurlAction("POST", "/apps/". APP_ID. "/dbs/". CALENDER_DB_ID. "/records/batchDeletes", $requestBody);

//------------------------------
// 共通モジュール
//------------------------------
class CommonBase {
    /**
     * シングルトンインスタンス
     * @var UserManager
     */
    protected static $singleton;

    public function __construct() {
        if (self::$singleton) {
            throw new Exception('must be singleton');
        }
        self::$singleton = $this;
    }
    /**
     * シングルトンインスタンスを返す
     * @return UserManager
     */
    public static function getInstance() {
        if (!self::$singleton) {
            return new CommonBase();
        } else {
            return self::$singleton;
        }
    }
    /**
     * V2用 API送信ロジック
     * @return Result
     */
    function apiCurlAction($method, $addUrlPass, $data = null, $multiPart = null, $jsonDecode = null) {
        $header = array(
            "Authorization:Bearer ". API_KEY,
            "X-Spiral-Api-Version: 1.1",
        );
        if($multiPart) {
            $header = array_merge($header, array($multiPart));
        } else {
            $header = array_merge($header, array("Content-Type:application/json"));
        }
        if(APP_ROLE){
            $header = array_merge($header, array("X-Spiral-App-Role: ".APP_ROLE));
        }
        // curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, API_URL. $addUrlPass);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        if ($method == "POST") {
            if ($multiPart) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            } else {
                curl_setopt($curl, CURLOPT_POSTFIELDS , json_encode($data));
            }
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "PATCH") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "DELETE") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        $response = curl_exec($curl);
        if (curl_errno($curl)) echo curl_error($curl);
        curl_close($curl);
        if($jsonDecode){
            return $response;
        }else{
            return json_decode($response, true);
        }
    }
}
?>

以上でDB関連の設定は完了です。
どのフィールドタイプが適しているのか迷った場合は、 フィールドタイプの選び方 をご参考ください。
メールアクションについて
DB作成が完了したら次はメールアクション設定です。
業務フロー図を見てもらうとわかるように本アプリでは 内覧予約通知メールやリマインドメールなど、様々な用途のメール配信を行います。
ページのクリックログインURLに関しては、下記にてページを作成いたします。
サイト設計・構築

▼モデルルーム予約管理アプリ 配信メール一覧
配信名 配信条件・配信先 機能
①内覧予約通知メール 配信条件:常時配信
参照_物件マスタDB > 担当メールアドレス
フォームブロックのメールアクション(登録後、即時配信)
②内覧予約完了メール 配信条件:常時配信
メールアドレス
フォームブロックのメールアクション(登録後、即時配信)
③資料請求通知メール 配信条件:常時配信
参照_物件マスタ > 担当メールアドレス
フォームブロックのメールアクション
(登録後、即時配信)
④資料請求完了メール 配信条件:常時配信
メールアドレス
フォームブロックのメールアクション(登録後、即時配信)
⑤予約キャンセル通知メール 配信条件:常時配信
参照_物件マスタ > 担当メールアドレス
フォームブロックのメールアクション
(登録後、即時配信)
⑥予約キャンセル完了メール 配信条件:常時配信
メールアドレス
フォームブロックのメールアクション(更新後、即時配信)
⑦情報変更通知メール 参照_物件マスタDB > 担当メールアドレス フォームブロックのメールアクション(更新後、即時配信)
⑧情報変更完了メール 参照_物件マスタDB > 担当メールアドレス フォームブロックのメールアクション(更新後、即時配信)
⑨案内後アンケート回答通知メール 配信条件:常時配信
参照_物件マスタ > 担当メールアドレス
フォームブロックのメールアクション(登録後、即時配信)
⑩案内後アンケート回答完了メール 配信条件:常時配信
メールアドレス
フォームブロックのメールアクション(登録後、即時配信)
⑪検討状況アンケート回答回答通知メール 配信条件:常時配信
参照_物件マスタ > 担当メールアドレス
フォームブロックのメールアクション(更新後、即時配信)
⑫検討状況アンケート回答完了メール 配信条件:常時配信
メールアドレス
フォームブロックのメールアクション(更新後、即時配信)
⑬リマインドメール 抽出条件:予約日の1日前
抽出条件:予約キャンセルフラグ:値なし
配信指定方法:複数レコード(メールアドレス)
スケジュールトリガ
メールアクション
毎日10:00
⑭検討状況アンケート回答完了メール 抽出条件:予約日の7日後
案内フラグ:案内完了と等しい
配信指定方法:複数レコード(メールアドレス)
スケジュールトリガ
メールアクション
毎日10:00
⑮アンケートメール配信 抽出条件:配信フラグ(非同期アクション用):等しい:配信する
案内フラグ:等しい:案内完了
指定方法:メールアドレス
【更新トリガ】非同期アクション(内覧予約DB)
経路:一部の経路(操作画面)
⑯スケジュールトリガエラー内容メール送信 抽出条件:エラーフラグ:等しい:エラー
指定方法:固定メールアドレス(運用担当者)
【登録トリガ】非同期アクション(エラー内容メール通知DB)
経路:一部の経路(API)
⑰スケジュールトリガエラー解消メール送信 抽出条件:エラーフラグ:等しい:エラー解消
指定方法:固定メールアドレス(運用担当者)
【更新トリガ】非同期アクション(内覧予約DB)
経路:一部の経路(操作画面)」
ポイント①
DBトリガのメールアクションにおいて、宛先や配信の抽出条件、差替えキーワードに参照フィールドが追加されました。
各機能の詳細に関しては、下記をご覧ください。
DBトリガの非同期アクション
スケジュールトリガのメール配信アクション
以下のメール配信に関しては、個別にクリックログインURL、差替えキーワードを設定いたします。
メールアクション 設定するクリックログインURL・差替えキーワード
②内覧予約完了メール 予約キャンセルページのクリックログインURL
情報変更ページのクリックログインURL
④資料請求完了メール 資料ダウンロードページのクリックログインURL
⑨アンケートメール配信 案内後アンケートのクリックログインURL
⑯スケジュールトリガエラー内容メール送信 差替えキーワード:エラー内容
以上でメール関連の設定は完了です。

最後に

設定後は動作確認を必ず行い、動作に問題がないか確認をしてください。
また、不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。
アプリ(DB・メール)設計・構築が完了したので次はサイト設計・構築に進みます。

関連記事はこちら

解決しない場合はこちら コンテンツに関しての
要望はこちら