Synergy!LEAD

トラッキングページヘのアクセスごとに履歴を作成するには?

Synergy!LEAD ではトラッキングコードを貼り付けたページヘのアクセスは、リード/取引先責任者ごとに1つのキャンペーンメンバーとして登録されるため、複数回のアクセスがあった場合は最新のアクセス日のみが「発生日」として記録されます。
アクセスした回数はキャンペーンメンバーの「アクション数」で確認することができますが、たとえば先週と今週でどの時間にアクセスがあったかはわかりません。

今回は、ページアクセスごとにレコードを作成するApexトリガを用意して、キャンペーンメンバーとは別にアクセスごとにページアクセス履歴のレコードを登録する方法を説明します。

POINT
ページアクセスごとにレコードが作成されるため、組織のストレージに十分な空き容量が必要となります。
通常1レコード2KBの容量となります。したがって月間のべアクセス数が10,000の場合はそれだけで20Mバイトのストレージを消費することになります。

トラッキングページへのアクセスごとに履歴コードを作成するためには次の追加パッケージをログインしている組織にインストールします。

Synergy!LEAD ページアクセス パッケージ
https://login.salesforce.com/packaging/installPackage.apexp?p0=04t10000000Ikkl&newui=1

※ Salesforceにログイン後、以下のページにアクセスするとインストール開始画面が表示されます。
画面の指示に沿ってすすみインストールを完了します。

パッケージをインストールせず手動で トリガを作成する場合はこのあとに説明するカスタムオブジェクトとトリガを作成します。

パッケージをインストールすると、カスタムオブジェクト「ページアクセス」と トリガが作成されます。
以降はそれぞれ作成されるオブジェクトとトリガについて説明します。

カスタムオブジェクト「ページアクセス」

ページアクセスごとに作成するカスタムオブジェクトです。
標準項目の「名前(Name)」およびカスタム項目は以下なります。

項目の表示ラベル  項目名 データ型 説目
 no  Name 自動採番({000000000}) レコードの名前項目
 URL  URL  URL アクセスされたURLアドレス
 アクセス日  date 日付/時間 アクセスされた日時
 リード  lead 参照関係(リード) アクセスのあったリード
取引先責任者 contatc 参照関係(取引先責任者) アクセスのあった取引先責任者
キャンペーン campaign 参照関係(キャンペーン) ページアクセスのキャンペーン

※ 項目名、データ型以外は任意に指定・変更しても問題ありません。

パッケージをインストールすると自動的にこのカスタムオブジェクトが追加されます。
パッケージをインストールせず手動でトリガを作成する場合は上記の項目一覧を参考にしてカスタムオブジェクトを作成します。

トリガ

パッケージをインストールせず、手動でトリガを作成する場合は以下のコードをコピーして、キャンペーンメンバ オブジェクトのトリガを作成します。
パッケージをインストールする場合は自動的にトリガが追加されます。

trigger CampaignMemberUpdateCreatePageAccess on CampaignMember (after insert, after update) {
    Set<Id> idlist = new Set<Id>();
	for (CampaignMember c: Trigger.new) {idList.add(c.campaignid);}
    List<Campaign> campaigns = [select id, type, name, SynergyLead__SourceUrl__c from campaign where id in :idlist];
    Map<Id, Campaign> campainMap = new Map<Id, Campaign>(campaigns);
    List<PageAccess__c> plist = new List<PageAccess__c>();
    for(CampaignMember o : Trigger.new) {
        if (trigger.isUpdate && trigger.oldMap.get(o.id).SynergyLead__BehaviorDateTime__c ==
            trigger.newMap.get(o.id).SynergyLead__BehaviorDateTime__c
            ) {continue;}
        Campaign c = campainMap.get(o.CampaignId);
        if (c == null) {continue; }
        if(c.type == 'ページアクセス') {
             PageAccess__c p = new PageAccess__c();
             p.url__c = c.SynergyLead__SourceUrl__c;
             p.date__c = o.SynergyLead__BehaviorDateTime__c ;
             if (o.leadid != null) {
                p.lead__c  = Id.valueOf(o.leadid);
             }
             if (o.contactid!= null) {
                p.contact__c = Id.valueOf(o.contactid);
             }
             p.campaign__c = c.id;
             plist.add(p);
        }
    }
    insert plist;
}

次のコードはトリガのテストクラスです。

@IsTest
public with sharing class CampaignMemberUpdateCreatePageAccessTest {
    static Campaign getTestCampaign(URL url) {
        Campaign c = new Campaign( Name = 'Test Campaign', type= 'ページアクセス', SynergyLead__SourceUrl__c =url.toExternalForm());
        return c;
    }
    static URL getTestUrl() {
        URL url = new URL('http://dummy.dummy.dymmy?dumuuy=dummy&dummy2=dummy2#dummy');
        return url;
    }
    static Account getTestAccount() {
        Account a = new Account( name = 'Test Account');
        return a;
    }
    static Contact getTestContact(Account a) {
        Contact ct = new Contact( accountid = a.id, lastname = 'Test Contact');
        return ct;
    }
    static Lead getTestLead() {
        Lead l = new Lead( lastname = 'Test Lead', Company = 'Test Company');
        return l;
    }
    static testmethod void testCampaignMemberTriggerCreatePageAccessViaDML()
    {
        Url url = getTestUrl();
        Campaign c = getTestCampaign(url);
        insert c;
        Lead l = getTestLead();
        insert l;
        System.assertNotEquals(l.id, null);
        DateTime bevaviorDate = DateTime.now();
        CampaignMember testCampaignMember = new CampaignMember( CampaignId =
        c.id, leadid = l.id, SynergyLead__BehaviorDateTime__c=bevaviorDate);

        test.startTest();
        insert testCampaignMember;
        test.stopTest();

        testCampaignMember = [select Id from CampaignMember where Id = :testCampaignMember.Id];
        System.assertEquals(testCampaignMember.Id, testCampaignMember.Id);
        PageAccess__c pa = [select id,url__c,date__c,campaign__c,lead__c from PageAccess__c];
        System.assertEquals(pa.campaign__c, c.id);
        System.assertEquals(pa.lead__c, l.id);
        System.assertEquals(pa.date__c, bevaviorDate);
        System.assertEquals(pa.url__c, getTestUrl().toExternalForm());
    }
    static testmethod void testCampaignMemberTriggerCreatePageAccessViaDML2()
    {
        Url url = getTestUrl();
        Campaign c = getTestCampaign(url);
        insert c;
        Account a = getTestAccount();
        insert a;
        Contact ct = getTestContact(a);
        insert ct;
        System.assertNotEquals(c.id, null);
        DateTime bevaviorDate = DateTime.now();
        CampaignMember testCampaignMember = new CampaignMember( CampaignId =
        c.id, contactid= ct.id, SynergyLead__BehaviorDateTime__c=bevaviorDate);

        test.startTest();
        insert testCampaignMember;
        test.stopTest();

        testCampaignMember = [select Id from CampaignMember where Id = :testCampaignMember.Id];
        System.assertEquals(testCampaignMember.Id, testCampaignMember.Id);
        PageAccess__c pa = [select id,url__c,date__c,campaign__c,contact__c from PageAccess__c];
        System.assertEquals(pa.campaign__c, c.id);
        System.assertEquals(pa.contact__c, ct.id);
        System.assertEquals(pa.date__c, bevaviorDate);
        System.assertEquals(pa.url__c, url.toExternalForm());
    }
    static testmethod void testCampaignMemberTriggerCreatePageAccessViaDML3()
    {
        Url url = getTestUrl();
        Campaign c = getTestCampaign(url);
        c.type = 'フォーム登録';
        insert c;
        Account a = getTestAccount();
        insert a;
        Contact ct = getTestContact(a);
        insert ct;
        System.assertNotEquals(c.id, null);
        DateTime bevaviorDate = DateTime.now();
        CampaignMember testCampaignMember = new CampaignMember( CampaignId =
        c.id, contactid= ct.id, SynergyLead__BehaviorDateTime__c=bevaviorDate);

        test.startTest();
        insert testCampaignMember;
        test.stopTest();

        testCampaignMember = [select Id from CampaignMember where Id = :testCampaignMember.Id];
        System.assertEquals(testCampaignMember.Id, testCampaignMember.Id);
        Integer cnt = [select count() from PageAccess__c];
        System.assertEquals(0, cnt);
    }
    static testmethod void testCampaignMemberTriggerUpdatePageAccessViaDML()
    {
        Url url = getTestUrl();
        Campaign c = getTestCampaign(url);
        insert c;
        Lead l = getTestLead();
        insert l;
        System.assertNotEquals(l.id, null);
        DateTime bevaviorDate = DateTime.now().addDays(-1);
        CampaignMember testCampaignMember = new CampaignMember( CampaignId =
        c.id, leadid = l.id, SynergyLead__BehaviorDateTime__c=bevaviorDate);
        insert testCampaignMember;
        DateTime bevaviorDateUpdate = bevaviorDate.addDays(1);
        testCampaignMember.SynergyLead__BehaviorDateTime__c=bevaviorDateUpdate;

        test.startTest();
        update testCampaignMember;
        test.stopTest();

        testCampaignMember = [select Id from CampaignMember where Id = :testCampaignMember.Id];
        System.assertEquals(testCampaignMember.Id, testCampaignMember.Id);
        Integer cnt = [select count() from PageAccess__c];
        System.assertEquals(2, cnt);
        List <PageAccess__c> palist = [select id,url__c,date__c,campaign__c,lead__c from PageAccess__c order by date__c];
        System.assertEquals(palist.get(0).campaign__c, c.id);
        System.assertEquals(palist.get(0).lead__c, l.id);
        System.assertEquals(palist.get(0).date__c, bevaviorDate);
        System.assertEquals(palist.get(0).url__c, getTestUrl().toExternalForm());
        System.assertEquals(palist.get(1).campaign__c, c.id);
        System.assertEquals(palist.get(1).lead__c, l.id);
        System.assertEquals(palist.get(1).date__c, bevaviorDateUpdate);
        System.assertEquals(palist.get(1).url__c, getTestUrl().toExternalForm());
    }
}

ページアクセスのレポート

パッケージをインストールするか手動でカスタムオブジェクト・トリガを作成すると、Synergy!LEADのトラッキングコード貼り付け先ページにアクセスがあるたびにページアクセスのレコードが作成されます。
これは既存のキャンペーンメンバー(ページアクセス)とは別に作成されます。

作成されたレコードを対象にレポートを作成(レポートタイプ:ページアクセス)することでリード/取引先責任者のURLアクセスが時系列で確認することができます。

20150306001

POINT
注意点として、Synergy!LEADの同期処理が起動する間隔(通常5分間)に同じページに複数回のページアクセスがあった場合は1レコードとして登録されます。
これは、同期処理によってのみキャンペーンメンバが作成・更新され、そのタイミングでトリガによりページアクセスレコードも作成されるためです。

Synergy!LEADについて

Synergy!LEADとは

ご利用いただく環境について

セキュリティについて

ご契約について

セミナー運営パッケージとは

利用実績

データ同期

連携項目設定

更新キー設定

配信実績連携設定

オプトアウト設定

仕様

メール配信

フォーム作成

[メール配信(他オブジェクト)]タブ

[メール配信(キャンペーン)]タブ

メールを安心・安全に送るために

パッケージの初期設定

はじめてご利用の方へ

Salesforceの設定

困ったときは?

ご契約内容に関するお手続き

マニュアル

[フォーム]タブ

reCAPTCHA 設定

セキュリティ設定

その他の機能

[トラッキング]タブ

オプション機能

有償オプション:DKIM 作成者署名

拡張機能

パッケージの仕様

有償オプション:独自ドメイン

Salesforce

パッケージを解約するとき

ご契約関連情報

仕様

よくある質問

Salesforceトレーニング

6.問合せ管理・ヘルプデスク業務で使う

7.社内、社外とのコラボレーションで使う

8.データを分析する

9.開発を行い、より高度に活用する

10.拡張パッケージでより使いやすくする

お知らせ

インストール・初期設定

ページのトップへ戻る