一定期間ログインの無いメンバーへのリマインドおよび自動退会機能を実装する

概要

バッチ処理を利用して、一定期間ログインの無いメンバーに対してリマインド送付と自動退会の機能を実装します。
また、ログインがあった場合に有効期限を伸ばす機能は「ログイン後処理」をトリガーにしたカスタム処理で実装します。

学べること

以下の手順で一定期間ログインの無いメンバーへのリマインドおよび自動退会機能を実装します。

前提条件

動作確認に利用するメンバー及びグループは適宜追加することとします。

事前準備

メンバーにログイン許可の有効期限を設定

ログイン許可の有効期限は、後で設定するカスタム処理で自動的に追加されますが、動作の確認のためまずは手動で設定します。
[メンバー管理] -> [メンバー]をクリックします。

Image from Gyazo

メンバー一覧のページでテーブル右上の歯車マークから、表示項目設定を開き、「ログイン許可期限」の表示を追加しておきます。

Image from Gyazo

メンバー一覧から設定をするメンバーの名前をクリックします。

Image from Gyazo

ログイン許可の有効期限を設定します。

Image from Gyazo

同様に動作確認用のメンバーにログイン許可期限を設定して、以下のようにしました。
Image from Gyazo

内部処理用のAPI作成

Kuroco内部でのみ利用するエンドポイントはAPIを分けておくことをお勧めします。
そこで、まずは内部利用のためのAPIを新規で作成します。
既に追加済みの場合は次のステップに進んで構いません。

APIの作成

Kuroco管理画面のAPIより「追加」をクリックします。

Image from Gyazo

API作成画面が表示されるので、下記入力し「追加する」をクリックします。

Image from Gyazo

項目設定内容
タイトルInternal
1.0
ディスクリプション内部処理用のAPI

APIが作成されました。

Image from Gyazo

セキュリティの設定

次にセキュリティの設定をします。[セキュリティ] をクリックします。

Image from Gyazo

セキュリティを[動的アクセストークン]に設定して、[保存する]をクリックします。

Image from Gyazo

セキュリティを[動的アクセストークン]に設定後、Login::tokenのエンドポイントが無い場合、利用をお勧めされますが、内部利用のみの場合は無視して構いません。

Image from Gyazo

CORSの設定

次にCORSの設定をします。[CORSを設定する] をクリックします。

Image from Gyazo

CORS_ALLOW_ORIGINSの [Add Origin] をクリックし、下記を追加します。

  • 管理画面URL

CORS_ALLOW_METHODSの [Add Method] をクリックし、下記を追加します。

  • GET
  • POST
  • OPTIONS

CORS_ALLOW_REDENTIALSの[Allow Credentials]にチェックが入っていることを確認します。

Image from Gyazo

問題なければ [保存する] をクリックします。

リマインド機能の実装

リマインド機能は以下の流れで動作をさせます。

  • バッチ処理で毎日06:00に、エンドポイントにリクエストを送る。
  • エンドポイントは設定された配信IDに、テンプレートひな形の識別子とカスタムメンバーフィルターIDの情報を送る。
  • 配信はテンプレートひな形の内容をカスタムメンバーフィルター宛に送信する。

カスタムメンバーフィルターの作成

リマインド送付の対象者はカスタムメンバーフィルターで設定します。
[メンバー管理] -> [カスタムメンバーフィルター]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のフィルタを作成します。
管理者およびDeveloperのメンバーを除いて、有効期限が30日前の場合と、7日を切っている場合をリマインド送付の対象者とします。

項目設定
タイトルログイン許可有効期限のリマインド送付対象者
絞り込み条件以下の通り

Image from Gyazo

[結果を閲覧する]をクリックして、想定通りのメンバーがヒットするか確認します。
複数の条件がある場合はテストメンバーのログイン許可有効期限を手動で変更しながら確認してください。

Image from Gyazo

問題なければ[追加する]をクリックしてカスタムメンバーフィルターを追加します。
作成したカスタムメンバーフィルターのIDは後ほど利用するのでメモをしておきます。

Image from Gyazo

配信の作成

リマインドメールの送付は配信の機能を利用します。
[キャンペーン] -> [配信] をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下の内容を設定します。

項目設定
タイトルログイン許可有効期限のリマインド
メール送信元(From)noreply@kuroco-mail.app
その他の設定デフォルトのまま

Image from Gyazo

  • バッチ処理実行時に設定するので、あて先も設定なしで構いません。
  • fromのメールアドレスを変更したい場合はSendGrid連携方法を参考にSendgridと連携してください。

設定ができたら[追加する]をクリックして配信を追加し、配信IDをメモしておきます。

Image from Gyazo

メッセージひな形の作成

リマインドメールの文面はメッセージひな形を利用して作成します。
[オペレーション] -> [メッセージひな形]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のように設定します。

項目設定内容
テンプレートログイン許可有効期限のリマインド文言
識別子expiration_remind_template
本文以下の内容
%name1% %name2% 様<br>
<br>
ログインの有効期限は%login_ok_ymd%までとなっております。<br>
有効期限までに再度ログインしてください。

Image from Gyazo

設定ができたら[追加する]をクリックしてメッセージひな形を追加します。

カスタム処理の作成

配信では%name1%%name2%と記入すると、あて先のメンバーの名前を表示できますが、%login_ok_ymd%などデフォルトで利用できない項目や、複雑な処理を追加したい場合はカスタム処理を利用します。

[オペレーション] -> [カスタム処理]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のように入力します。

項目設定
タイトル配信の差し込み
識別子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日'}

Image from Gyazo

設定ができたら[追加する]をクリックしてカスタム処理を追加します。

エンドポイントの作成

次にエンドポイントを作成します。
InternalのAPIから[新しいエンドポイントの追加]をクリックします。

Image from Gyazo

以下のエンドポイントを作成します。

項目設定内容
パスexpiration_remind
カテゴリー配信
モデルMagazine
オペレーションsend
destination_idカスタムメンバーフィルターのID(1)
mail_type1
mail_template_nameメッセージひな形の識別子(expiration_remind_template)
subjectログインの有効期限を確認してください

Image from Gyazo Image from Gyazo

設定ができたら[追加する]をクリックしてエンドポイントを追加します。

バッチ処理の作成

リマインド機能はバッチ処理で作成し、日次で対象者の確認及びリマインドメールの送付をします。
[オペレーション] -> [バッチ処理]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のように設定します。

項目設定内容
テンプレートログイン許可有効期限のリマインド送付
識別子send_remind_mail
バッチ毎日 06:00
処理以下のコード
{api_internal
    var='response'
    status_var='status'
    endpoint='/rcms-api/4/expiration_remind/2'
    method='POST'
    member_id='1'
}

Image from Gyazo

入力ができたら[追加する]をクリックしてバッチ処理を追加します。

動作確認

最後に、[すぐに実行する]をクリックして動作の確認をします。

Image from Gyazo

正しく設定ができていれば以下のようにリマインドメールが届きます。

Image from Gyazo

自動退会機能の実装

自動退会機能はバッチ処理で作成し、日次で対象メンバーの有無を確認し、対象メンバーが存在する場合はMember::deleteのエンドポイントを利用して削除をします。

カスタムメンバーフィルターの作成

自動退会の対象者はカスタムメンバーフィルターで設定します。
[メンバー管理] -> [カスタムメンバーフィルター]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のフィルタを作成します。

項目設定
タイトル自動退会処理の対象者
絞り込み条件以下の通り

Image from Gyazo

フィルター結果の確認をして、問題なければ[追加する]をクリックしてカスタムメンバーフィルターを追加します。

作成したカスタムメンバーフィルターのIDは後ほど利用するのでメモをしておきます。

Image from Gyazo

エンドポイントの作成

削除対象のメンバーリストを返すエンドポイントと、メンバーを削除するためのエンドポイントの2つを作成します。
InternalのAPIから[新しいエンドポイントの追加]をクリックします。

Image from Gyazo

delete_member_listエンドポイント

以下のエンドポイントを作成します。

項目設定内容
パスdelete_member_list
カテゴリーメンバー
モデルMember
オペレーションlist
custom_search_idカスタムメンバーフィルターのID(2)

Image from Gyazo Image from Gyazo

設定ができたら[追加する]をクリックしてエンドポイントを追加します。

expired_member_deleteエンドポイント

同様にメンバーを削除するための以下のエンドポイントを作成します。

項目設定内容
パスexpired_member_delete
カテゴリーメンバー
モデルMember
オペレーションdelete
allowed_group_ids削除対象となるメンバーが所属するグループを設定します。(101,102)

Image from Gyazo Image from Gyazo

設定ができたら[追加する]をクリックしてエンドポイントを追加します。

バッチ処理の作成

続いてバッチ処理を作成します。
[オペレーション] -> [バッチ処理]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のように設定します。

項目設定内容
タイトル有効期限切れメンバーの削除
識別子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}

Image from Gyazo

入力ができたら[追加する]をクリックしてバッチ処理を追加します。

動作確認

最後に、[すぐに実行する]をクリックして動作の確認をします。

Image from Gyazo

正しく設定ができていれば以下のようにカスタムログにログが残り、メンバーが削除されます。

Image from Gyazo

ログイン後にログイン許可の有効期限を延ばす機能の実装

最後に、ログイン後にログイン許可の有効期限を自動で延ばす機能を実装します。
こちらはメンバーのログイン後をトリガーにカスタム処理を実行し、Member::updateのエンドポントでlogin_ok_ymdを更新します。

エンドポイントの作成

InternalのAPIから[新しいエンドポイントの追加]をクリックします。

Image from Gyazo

以下のエンドポイントを作成します。

項目設定内容
パスmember/update_login_ok_ymd
カテゴリーメンバー
モデルMember
オペレーションupdate
self_onlyチェックを入れる

Image from Gyazo Image from Gyazo

カスタム処理の作成

[オペレーション] -> [カスタム処理]をクリックします。

Image from Gyazo

[追加]をクリックします。

Image from Gyazo

以下のように入力します。

項目設定
タイトルログインしたらログイン許可期間を延ばす
識別子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}

Image from Gyazo

動作確認

最後に、動作確認のため、対象のメンバーでログインをします。

正しく設定ができていれば以下のようにカスタムログにログが残り、メンバーのログイン許可の有効期限が更新されます。
Image from Gyazo Image from Gyazo

以上で、一定期間ログインの無いメンバーへのリマインドおよび自動退会機能の実装ができました。

関連ドキュメント

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。