フォーム送信によりメンバー登録されるユーザーのメンバー情報にフォームの回答内容を設定する
概要
フォーム基本設定で自動ユーザ登録にチェックを入れると、フォームの回答を送付したメールアドレスを自動でユーザー登録できます。
このチュートリアルでは、カスタム処理を利用することで、自動で登録されるユーザーのメンバー情報にフォームの回答データを追加で設定する方法を紹介します。
学べること
以下の手順で機能の設定をする流れを学びます。
前提条件
このチュートリアルでは、下記のチュートリアルを参考にフォーム送信と同時にメンバー情報を登録する機能が設定されていることを前提とします。
カスタム処理で利用するAPIを設定する
次に、カスタム処理で利用する下記のAPIを設定します。
内部処理用のAPI設定
Kuroco内部でのみ利用するエンドポイントはAPIを分けておくことをお勧めします。
そこで、まずは内部利用のためのAPIを新規で作成します。
既に追加済みの場合は次のステップに進んで構いません。
APIの作成
Kuroco管理画面のAPIより「追加」をクリックします。
API作成画面が表示されるので、下記入力し「追加する」をクリックします。
項目 | 設定内容 |
---|---|
タイトル | Internal |
版 | 1.0 |
ディスクリプション | 内部処理用のAPI |
APIが作成されました。
セキュリティの設定
次にセキュリティの設定をします。[セキュリティ] をクリックします。
セキュリティを[動的アクセストークン]に設定して、[保存する]をクリックします。
セキュリティを[動的アクセストークン]に設定後、Login::token
のエンドポイントが無い場合、利用をお勧めされますが、内部利用のみの場合は無視して構いません。
CORSの設定
次にCORSの設定をします。[CORSを設定する] をクリックします。
CORS_ALLOW_ORIGINSの [Add Origin] をクリックし、下記を追加します。
- 管理画面URL
CORS_ALLOW_METHODSの [Add Method] をクリックし、下記を追加します。
- GET
- POST
- OPTIONS
CORS_ALLOW_CREDENTIALSの[Allow Credentials]にチェックが入っていることを確認します。
問題なければ [保存する] をクリックします。
内部処理用のAPIエンドポイントの作成
作成したAPIの設定に実際に利用するAPIのエンドポイントを追加します。 このチュートリアルでは下記の2つのエンドポイントの設定をします。
- フォーム回答情報 詳細取得API
- メンバー更新API
フォーム回答情報 詳細取得APIの作成
[新しいエンドポイントの追加]をクリックします。
以下のエンドポイントを作成します。
項目 | 設定内容 |
---|---|
パス | inquiry_details |
カテゴリー | フォーム |
モデル | InaquiryMessage |
オペレーション | details |
GroupAuth | 管理者 内部処理用のAPIグループにしているのでフロントから呼ばれることはありませんが、念のためアクセス制限を付けておきます。 |
inquiry_id | 「事前準備」で作成したフォームのIDを指定します。 |
設定ができたら[追加する]をクリックしてエンドポイントを追加します。
メンバー更新APIの作成
[新しいエンドポイントの追加]をクリックします。
以下のエンドポイントを作成します。
項目 | 設定内容 |
---|---|
パス | self-member-update |
カテゴリー | メンバー |
モデル | Member |
オペレーション | update |
self_only | チェック |
※あくまでも最低限の設定です、実際のサイトに合わせてallowed_group_ids
、use_columns
などを設定してください。
設定ができたら[追加する]をクリックしてエンドポイントを追加します。
カスタム処理を作成する
それではカスタム処理を作成します。
1. カスタム処理の一覧画面を表示する
メニューの[オペレーション] -> [カスタム処理] をクリックします。
2. カスタム処理の編集画面を表示する
カスタム処理一覧画面の右上の [追加] をクリックします。
すると、カスタム処理編集画面が表示されます。
3. タイトル・識別子を記入する
それではカスタム処理を作成していきます。
まずはタイトルと識別子に記入します。今回は下記のように記入します。
- タイトル:お問い合わせ時メンバー登録データ連係
- 識別子:member-register-when-inquiry-send
タイトル・識別子は他のカスタム処理と重複できません。 実装対象のエンドポイント名など、他と重複しない内容で記入してください。
カスタム処理
フォームメッセージの内容を元に登録されたメンバー情報を更新する処理を下記のように記入します。
{assign var=update_member_flg value=1}
{*新規メンバー登録のデータを対象にしたいので未ログインの場合にのみ処理を行う(ログイン済みの場合は既にメンバー登録されている)*}
{if $smarty.session.member_id}
{assign var=update_member_flg value=0}
{/if}
{*既に登録済みメンバーが存在した場合はプリプロセスに判定処理を追加し以下の部分のコメントアウトを解除して下さい*}
{*}
{assign_session var=exist_member_flg key='exist_member_flg'}
{if $exist_member_flg}
{assign var=update_member_flg value=0}
{/if}
{*}
{if $update_member_flg}
{*お問い合わせデータからメンバーID取得*}
{assign var=inquiry_bn_id value=$json.id}
{api_internal endpoint='/rcms-api/2/inquiry_details/'|cat:$inquiry_bn_id member_id=1 method='GET' var=inquiry_response status_var=status}
{if $status==1}
{assign var=member_id value=$inquiry_response.details.member_id}
{if $member_id}
{*問い合わせ情報取得*}
{assign var=tel value=$inquiry_response.details.ext_01}
{assign var=address value=$inquiry_response.details.ext_03}
{assign var=sex value=$inquiry_response.details.ext_04.key}{*選択形式の場合はkeyを連携する*}
{assign var=birth value=$inquiry_response.details.ext_05}
{*メンバー情報更新*}
{assign_array var=queries values=''}
{assign var=queries.tel value=$tel}
{assign var=queries.address1 value=$address}
{assign var=queries.ex_sex value=$sex}
{assign var=queries.ex_date value=$birth}
{api_internal endpoint='/rcms-api/2/self-member-update' method='POST' member_id=$member_id queries=$queries var=member_response status_var=status}
{if $status==1}
{*処理成功*}
{else}
{*エラー処理*}
{logger msg1='member-register-when-inquiry-send' msg2='Cannot set member ext data' msg3=$queries msg4=$member_response}
{/if}
{else}
{*エラー処理、標準処理でメンバー登録に失敗しているケース*}
{logger msg1='member-register-when-inquiry-send' msg2='Cannot get member_id from inquiry details' msg3=$inquiry_response}
{/if}
{else}
{*エラー処理*}
{logger msg1='member-register-when-inquiry-send' msg2='Cannot get inquiry details' msg3=$inquiry_response}
{/if}
{/if}
{$json|@json_encode}
メンバー項目に設定されるフォーム項目の内容
上記のカスタム処理では下記のフォーム設定 / メンバー設定を対応させています。
それぞれの設定は「フォーム項目設定」、「メンバーの拡張項目設定」で実施してください。
フォーム項目 | フォームキー名 | メンバー項目 | メンバーキー名 | 型 | 備考 |
---|---|---|---|---|---|
name | name | 姓 名 | name1 name2 | テキスト | 標準のメンバー登録処理で設定されるので連携時には設定しない |
メールアドレス | テキスト | 標準のメンバー登録処理で設定されるので連携時には設定しない | |||
tel | ext_01 | 電話番号 | tel | テキスト | |
address | ext_03 | 住所1 | address1 | テキスト | |
sex | ext_04 | 拡張-性別 | ex_sex | 選択項目 | 選択肢はフォーム・メンバー共通で下記を設定 1::male 2::female 3::other |
birth | ext_05 | 拡張-生年月日 | ex_date | 日付フォーマット |
フォーム項目設定
メンバー項目設定
4. カスタム処理を保存する
処理の記述が完了したら、[追加する] ボタンをクリックして保存します。
5. 新規登録時のみフォームデータとメンバー項目の連係を行いたい場合
フォーム送信処理でメンバーを新規登録する処理は、既存メンバーにEmailアドレスが存在しない場合のみ行っています。
その為、もし既に登録済みのメンバーがいる場合にはフォームの内容で連携処理を行いたくない場合は下記の処理をプリプロセスで行い、ポストプロセスに記載している下記のコメント処理を行って下さい。
ポストプロセスの該当コメント
{*既に登録済みメンバーが存在した場合はプリプロセスに判定処理を追加し以下の部分のコメントアウトを解除して下さい*}
{*}
{assign_session var=exist_member_flg key='exist_member_flg'}
{if $exist_member_flg}
{assign var=update_member_flg value=0}
{/if}
{*}
プリプロセスで既に登録済みメンバーが存在するかチェックする為のオリジナル処理
{assign_session key='exist_member_flg' value=0}
{if $smarty.request.email}
{*emailでメンバー情報をfilter*}
{assign var=email value=$smarty.request.email}
{assign_array var=method_params values=''}
{assign var=method_params.filter value='email='|cat:$email}
{api_method var=list model="Member" method="list" method_params=$method_params}
{if $list.list|@count > 0}
{*存在する場合は新規登録しないので更新処理も行わない*}
{assign_session key='exist_member_flg' value=1}
{/if}
{/if}
以上でカスタム処理の完成です。
APIのポストプロセスに作成したカスタム処理を設定
APIの一覧画面から「事前準備」で作成したフォーム送信のエンドポイントにポストプロセスを設定する。
Swaggerを利用して動作確認を行う
- Swaggerから下記のサンプルデータでInquiryMessage:sendのAPIを呼び出す
- 追加されたメンバー情報に送信したものと同じ内容のデータが入っていることを確認する
サンプルデータ
{
"name": "test user",
"email": "email@example.com",
"ext_01": "09022223333",
"ext_03": "東京都世田谷区",
"ext_04": "1",
"ext_05": "1980-10-21",
"body": "Example Message",
"inquiry_category_id": 8
}
※inquiry_category_id
は環境によって値の変更、もしくは送信しないで問題ありません。
登録後メンバー情報
以上です。
関連ドキュメント
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。