本記事では、アンケートの回答を受け付けた後、
メールにてギフトコードが閲覧可能なURLを送信する方法について紹介します。
全体像
予めギフトコードDBにギフトコードを格納しておきます。
アンケート回答フォームよりアンケートを回答すると、ギフトコードDBのギフトコードに紐づき、
アンケートDBに登録され回答者に通知がされます。
アンケート回答DBの非同期アクションの登録トリガにPHPを設置し、
ギフトコードDBのレコードIDを取得します。
フォームの登録時に発行された、アンケート回答DBのレコードの参照フィールドを更新することで紐づけを行い、
その後更新トリガにて消し込みを行います。
DB設定
以下2つのDBを作成します。
アンケート回答DB
ギフトコードDB
フィールド名 | フィールドタイトル | フィールドタイプ | 自動生成設定 |
---|---|---|---|
アンケート管理ID | enqueteId | 参照フィールド(ギフトコードDBのIDを参照設定) | 自動生成:使用しない |
メールアドレス | メールアドレス | 自動生成:使用しない | |
ギフトコード | giftCode | テキスト | 自動生成:使用しない |
ギフトコードDB
フィールド名 | フィールドタイトル | フィールドタイプ | 自動生成設定 |
---|---|---|---|
ギフトコード | giftCode | テキスト | 自動生成:使用しない |
連携済みフラグ | connectFlg | セレクト(1:未連携、2:連携済み) | デフォルト値:1(未連携) |
連携日時 | connectDate | 日時 | - |
上記のフィールドは必須のフィールドになります。
その他のフィールドは、必要に応じて追加してください。
アンケートDBの非同期アクションの登録トリガにPHPを設置してください。
更新トリガには自DBと他DBの2つのアクションを作成し、
自DB更新アクションにはギフトコードを参照先DBのギフトコードフィールドにマッピングしてください。
他DB更新アクションには連携済みフラグを参照先DBの、
連携済みフラグフィールドに「2:連携済み」をマッピングしてください。
また連携日時フィールドには、自DBの最終更新日時をマッピングしてください。
非同期アクションの設定
登録トリガのPHPは以下のようになります。
PHP
<?php define("API_URL", "https://api.spiral-platform.com/v1"); define("API_KEY", ""); define("APP_ROLE", ""); // 任意 define("APP_ID", ""); define("GIFT_DB_ID", ""); define("ENQUETE_DB_ID", ""); $commonBase = CommonBase::getInstance(); // ギフトコードDBからIDの小さい順に5件取得 $params = "?sort=_id:asc&limit=5"; $giftList = $commonBase->apiCurlAction("GET", "/apps/" . APP_ID . "/dbs/" . GIFT_DB_ID . "/records" . $params); // ここで更新対象のレコードID(アンケートDB側)を設定 $record = $SPIRAL->getRecord(); $targetRecordId = $record["item"]["_id"]; foreach ($giftList["items"] as $gift) { // アンケートDBの特定レコードを更新 $updateData = [ "enqueteId" => $gift["_id"], ]; $result = $commonBase->apiCurlAction("PATCH", "/apps/" . APP_ID . "/dbs/" . ENQUETE_DB_ID . "/records/" . $targetRecordId, $updateData); // エラーが存在するか確認 if (isset($result["status"]) && $result["status"] === 400 && isset($result["errors"])) { // エラー配列をチェックして「value is duplicated」があるか調べる $isDuplicate = false; foreach ($result["errors"] as $error) { if ( isset($error["message"]) && strpos($error["message"], "duplicated") !== false && isset($error["location"]) && $error["location"] === "/enqueteId" ) { $isDuplicate = true; break; } } if ($isDuplicate) { // 重複なら次のギフトコードへ continue; } else { echo "更新エラー: " . json_encode($result["errors"]) . "\n"; continue; } } // 成功した場合 echo "更新成功: " . json_encode($result) . "\n"; break; // 成功したらループ終了 } //------------------------------ // 共通クラス //------------------------------ class CommonBase { protected static $singleton; public function __construct() { if (self::$singleton) throw new Exception('must be singleton'); self::$singleton = $this; } public static function getInstance() { return self::$singleton ?: new CommonBase(); } function apiCurlAction($method, $addUrlPass, $data = null, $multiPart = null, $jsonDecode = false) { $header = [ "Authorization: Bearer " . API_KEY, "X-Spiral-Api-Version: 1.1", ]; $header[] = $multiPart ?: "Content-Type: application/json"; if (APP_ROLE) $header[] = "X-Spiral-App-Role: " . APP_ROLE; $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_URL, API_URL . $addUrlPass); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); if (in_array($method, ["POST", "PATCH", "DELETE"])) { curl_setopt($curl, CURLOPT_POSTFIELDS, $multiPart ? $data : json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } $response = curl_exec($curl); if (curl_errno($curl)) echo curl_error($curl); curl_close($curl); return $jsonDecode ? $response : json_decode($response, true); } }
アンケート回答フォームブロック設定
クリックログインを有効にし、ログイン後ページにギフトコードの差し替えを出力してください。
メールアクションの設定を行い、上記認証エリアに対するクリックログインURLを記載して
フォームの設定は以上になります。