一定期間ログインの無いメンバーへのリマインドおよび自動退会機能を実装する
概要
バッチ処理を利用して、一定期間ログインの無いメンバーに対してリマインド送付と自動退会の機能を実装します。
また、ログインがあった場合に有効期限を伸ばす機能は「ログイン後処理」をトリガーにしたカスタム処理で実装します。
学べること
以下の手順で一定期間ログインの無いメンバーへのリマインドおよび自動退会機能を実装します。
前提条件
動作確認に利用するメンバー及びグループは適宜追加することとします。
事前準備
メンバーにログイン許可の有効期限を設定
ログイン許可の有効期限は、後で設定するカスタム処理で自動的に追加されますが、動作の確認のためまずは手動で設定します。
[メンバー管理] -> [メンバー]をクリックします。
メンバー一覧のページでテーブル右上の歯車マークから、表示項目設定を開き、「ログイン許可期限」の表示を追加しておきます。
メンバー一覧から設定をするメンバーの名前をクリックします。
ログイン許可の有効期限を設定します。
「メルマガ拒否フラグ」のチェックが外れていることを確認します。
同様に動作確認用のメンバーにログイン許可期限を設定して、以下のようにしました。
内部処理用の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]にチェックが入っていることを確認します。
問題なければ [保存する] をクリックします。
リマインド機能の実装
リマインド機能は以下の流れで動作をさせます。
- バッチ処理で毎日06:00に、エンドポイントにリクエストを送る。
- エンドポイントは設定された配信IDに、メッセージひな形の識別子とカスタムメンバーフィルターIDの情報を送る。
- 配信はメッセージひな形の内容をカスタムメンバーフィルター宛に送信する。
カスタムメンバーフィルターの作成
リマインド送付の対象者はカスタムメンバーフィルターで設定します。
[メンバー管理] -> [カスタムメンバーフィルター]をクリックします。
[追加]をクリックします。
以下のフィルタを作成します。
管理者およびDeveloperのメンバーを除いて、有効期限が30日前の場合と、7日を切っている場合をリマインド送付の対象者とします。
項目 | 設定 |
---|---|
タイトル | ログイン許可有効期限のリマインド送付対象者 |
絞り込み条件 | 以下の通り |
[結果を閲覧する]をクリックして、想定通りのメンバーがヒットするか確認します。
複数の条件がある場合はテストメンバーのログイン許可有効期限を手動で変更しながら確認してください。
問題なければ[追加する]をクリックしてカスタムメンバーフィルターを追加します。
作成したカスタムメンバーフィルターのIDは後ほど利用するのでメモをしておきます。
配信の作成
リマインドメールの送付は配信の機能を利用します。
[キャンペーン] -> [配信] をクリックします。
[追加]をクリックします。
以下の内容を設定します。
項目 | 設定 |
---|---|
タイトル | ログイン許可有効期限のリマインド |
メール送信元(From) | noreply@kuroco-mail.app |
その他の設定 | デフォルトのまま |
- バッチ処理実行時に設定するので、あて先も設定なしで構いません。
- fromのメールアドレスを変更したい場合はSendGrid連携方法を参考にSendgridと連携してください。
設定ができたら[追加する]をクリックして配信を追加し、配信IDをメモしておきます。
メッセージひな形の作成
リマインドメールの文面はメッセージひな形を利用して作成します。
[オペレーション] -> [メッセージひな形]をクリックします。
[追加]をクリックします。
以下のように設定します。
項目 | 設定内容 |
---|---|
テンプレート | ログイン許可有効期限のリマインド文言 |
識別子 | expiration_remind_template |
本文 | 以下の内容 |
%name1% %name2% 様<br>
<br>
ログインの有効期限は%login_ok_ymd%までとなっております。<br>
有効期限までに再度ログインしてください。
設定ができたら[追加する]をクリックしてメッセージひな形を追加します。
カスタム処理の作成
配信では%name1%
、%name2%
と記入すると、あて先のメンバーの名前を表示できますが、%login_ok_ymd%
などデフォルトで利用できない項目や、複雑な処理を追加したい場合はカスタム処理を利用します。
[オペレーション] -> [カスタム処理]をクリックします。
[追加]をクリックします。
以下のように入力します。
項目 | 設定 |
---|---|
タイトル | 配信の差し込み |
識別子 | magazine_substitution |
これを使ったコンポーネント | トリガー:配信の差し込み 値:利用する配信ID(2) |
処理 | 以下のコードを入力します。 |
{assign_array var=substitutions values=''}
{assign var=substitutions.name1 value=$member_info.name1}
{assign var=substitutions.name2 value=$member_info.name2}
{assign var=substitutions.login_ok_ymd value=$member_info.login_ok_ymd|date_format:'%Y年%m月%d日'}
設定ができたら[追加する]をクリックしてカスタム処理を追加します。
エンドポイントの作成
次にエンドポイントを作成します。
InternalのAPIから[新しいエンドポイントの追加]をクリックします。
以下のエンドポイントを作成します。
項目 | 設定内容 |
---|---|
パス | expiration_remind |
カテゴリー | 配信 |
モデル | Magazine |
オペレーション | send |
destination_id | カスタムメンバーフィルターのID(1) |
mail_type | 1 |
mail_template_name | メッセージひな形の識別子(expiration_remind_template) |
subject | ログインの有効期限を確認してください |
設定ができたら[追加する]をクリックしてエンドポイントを追加します。
バッチ処理の作成
リマインド機能はバッチ処理で作成し、日次で対象者の確認及びリマインドメールの送付をします。
[オペレーション] -> [バッチ処理]をクリックします。
[追加]をクリックします。
以下のように設定します。
項目 | 設定内容 |
---|---|
テンプレート | ログイン許可有効期限のリマインド送付 |
識別子 | send_remind_mail |
バッチ | 毎日 06:00 |
処理 | 以下のコード |
{api_internal
var='response'
status_var='status'
endpoint='/rcms-api/4/expiration_remind/2'
method='POST'
member_id='1'
}
入力ができたら[追加する]をクリックしてバッチ処理を追加します。
動作確認
最後に、[すぐに実行する]をクリックして動作の確認をします。
正しく設定ができていれば以下のようにリマインドメールが届きます。
自動退会機能の実装
自動退会機能はバッチ処理で作成し、日次で対象メンバーの有無を確認し、対象メンバーが存在する場合はMember::deleteのエンドポイントを利用して削除をします。
カスタムメンバーフィルターの作成
自動退会の対象者はカスタムメンバーフィルターで設定します。
[メンバー管理] -> [カスタムメンバーフィルター]をクリックします。
[追加]をクリックします。
以下のフィルタを作成します。
項目 | 設定 |
---|---|
タイトル | 自動退会処理の対象者 |
絞り込み条件 | 以下の通り |
フィルター結果の確認をして、問題なければ[追加する]をクリックしてカスタムメンバーフィルターを追加します。
作成したカスタムメンバーフィルターのIDは後ほど利用するのでメモをしておきます。
エンドポイントの作成
削除対象のメンバーリストを返すエンドポイントと、メンバーを削除するためのエンドポイントの2つを作成します。
InternalのAPIから[新しいエンドポイントの追加]をクリックします。
delete_member_listエンドポイント
以下のエンドポイントを作成します。
項目 | 設定内容 |
---|---|
パス | delete_member_list |
カテゴリー | メンバー |
モデル | Member |
オペレーション | list |
custom_search_id | カスタムメンバーフィルターのID(2) |
設定ができたら[追加する]をクリックしてエンドポイントを追加します。
expired_member_deleteエンドポイント
同様にメンバーを削除するための以下のエンドポイントを作成します。
項目 | 設定内容 |
---|---|
パス | expired_member_delete |
カテゴリー | メンバー |
モデル | Member |
オペレーション | delete |
allowed_group_ids | 削除対象となるメンバーが所属するグループを設定します。(101,102) |
設定ができたら[追加する]をクリックしてエンドポイントを追加します。
バッチ処理の作成
続いてバッチ処理を作成します。
[オペレーション] -> [バッチ処理]をクリックします。
[追加]をクリックします。
以下のように設定します。
項目 | 設定内容 |
---|---|
タイトル | 有効期限切れメンバーの削除 |
識別子 | delete_expired_member |
バッチ | 毎日 05:00 |
処理 | 以下のコード |
{*対象メンバーの取得*}
{api_internal
var='response'
status_var='status'
endpoint='/rcms-api/4/delete_member_list'
method='GET'
member_id='1'
}
{*対象メンバーの削除*}
{foreach from=$response.list item=n}
{assign var='target' value="/rcms-api/4/expired_member_delete/`$n.member_id`"}
{* member_id=1 -> admin user *}
{api_internal
var='response'
status_var='status'
endpoint=$target
method='POST'
member_id='1'
}
{logger msg1="`$n.name1``$n.name2`(member_id=`$n.member_id`)を削除します。" msg2=$response}
{/foreach}
入力ができたら[追加する]をクリックしてバッチ処理を追加します。
動作確認
最後に、[すぐに実行する]をクリックして動作の確認をします。
正しく設定ができていれば以下のようにカスタムログにログが残り、メンバーが削除されます。
ログイン後にログイン許可の有効期限を延ばす機能の実装
最後に、ログイン後にログイン許可の有効期限を自動で延ばす機能を実装します。
こちらはメンバーのログイン後をトリガーにカスタム処理を実行し、Member::updateのエンドポントでlogin_ok_ymd
を更新します。
エンドポイントの作成
InternalのAPIから[新しいエンドポイントの追加]をクリックします。
以下のエンドポイントを作成します。
項目 | 設定内容 |
---|---|
パス | member/update_login_ok_ymd |
カテゴリー | メンバー |
モデル | Member |
オペレーション | update |
self_only | チェックを入れる |
カスタム処理の作成
[オペレーション] -> [カスタム処理]をクリックします。
[追加]をクリックします。
以下のように入力します。
項目 | 設定 |
---|---|
タイトル | ログインしたらログイン許可期間を延ばす |
識別子 | update_login_permission_date |
これを使ったコンポーネント | トリガー:ログイン後処理 値:0 |
処理 | 以下のコード |
{assign_member_detail assign_group_flg=1 var='member_detail' member_id=$member_id}
{* add extending 1y *}
{assign_array var="payload" keys="login_ok_ymd" values="1 year"|strtotime|date_format:"Y-m-d"}
{if
"1"|rcms_in_array:$member_detail.arrGroup_id ||
"2"|rcms_in_array:$member_detail.arrGroup_id
}
{* skip execution when the user supposed to be administrator *}
{else}
{* member_id=1 -> admin user *}
{api_internal
var='response'
status_var='status'
endpoint='/rcms-api/4/member/update_login_ok_ymd'
method='POST'
queries=$payload
member_id=$member_id
}
{logger msg1="`$member_detail.name1``$member_detail.name2`(member_id=`$member_id`)のlogin_ok_ymdを更新します。" msg2=$response}
{/if}
動作確認
最後に、動作確認のため、対象のメンバーでログインをします。
正しく設定ができていれば以下のようにカスタムログにログが残り、メンバーのログイン許可の有効期限が更新されます。
以上で、一定期間ログインの無いメンバーへのリマインドおよび自動退会機能の実装ができました。
関連ドキュメント
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。