カスタム パーソナライゼーション トークンを作成する

概要

ユーザー プロファイルの適切な値に置き換えることができるカスタム パーソナライゼーション トークンを作成します。

Email Experience Manager (EXM) では、トークンを使用して、メール キャンペーン メッセージをパーソナライズできます。たとえば、メッセージの冒頭の挨拶でトークン $name$ を使用すると、メール キャンペーンを送信するときにトークンがコンタクトの名前に置き換えられます。

デフォルトでは使用できないトークンを使用する場合は、メール キャンペーンに使用できるカスタム トークンを作成できます。

注記

カスタム トークンをオンライン プレビュー モードで置き換えるには、getContact パイプラインを拡張する必要があります。

カスタム トークンを作成するには、以下のことを行う必要があります。

カスタム コンタクト ファセットを作成する

Sitecore Experience Database では、新しいカスタム コンタクト ファセットを作成することにより、独自のカスタム データでコンタクトを拡張できます。

作成したカスタム ファセットを読み込むには、次のことを行う必要があります。

  1. Sitecore.EmailExperience.ContentManagement.config ファイルでデフォルトのディスパッチ タスクをオーバーライドします。

    例:

    namespace FooBar
    {
    public class CustomDispatchTask : DispatchTask
    {
        private IContactService _contactService;
        public CustomDispatchTask([NotNull] ShortRunningTaskPool taskPool, [NotNull] IRecipientValidator recipientValidator, [NotNull] IContactService contactService, [NotNull] EcmDataProvider dataProvider, [NotNull] ItemUtilExt itemUtil, [NotNull] IEventDataService eventDataService, [NotNull] IDispatchManager dispatchManager), [NotNull] EmailAddressHistoryManager emailAddressHistoryManager, [NotNull] IRecipientManagerFactory recipientManagerFactory, [NotNull] SentMessageManager sentMessageManager) 
     
            : base(taskPool, recipientValidator, contactService, dataProvider, itemUtil, eventDataService, dispatchManager), emailAddressHistoryManager, recipientManagerFactory, sentMessageManager)
        {
            _contactService = contactService;
        }
        protected override IReadOnlyCollection<IEntityLookupResult<Contact>> GetContacts(List<DispatchQueueItem> dispatchQueueItems)
        {
            return _contactService.GetContacts(dispatchQueueItems.Select(x => x.ContactIdentifier), PersonalInformation.DefaultFacetKey, EmailAddressList.DefaultFacetKey, ConsentInformation.DefaultFacetKey, PhoneNumberList.DefaultFacetKey, ListSubscriptions.DefaultFacetKey, EmailAddressHistory.DefaultFacetKey,  ExmKeyBehaviorCache.DefaultFacetKey, MyCustomFacet.DefaultFacetKey);
        }
    } }
  2. exm/dispatchTaskApp_Config\Sitecore\EmailExperience\Sitecore.EmailExperience.ContentManagement.config ファイルで、デフォルトのディスパッチ タスクをカスタムの dispatchTask に置き換えます。

    例:

    <dispatchTask type="FooBar.CustomDispatchTask, FooBar ">
    <param ref="exm/dispatchFailedTaskPool"/>
    <param desc="recipientValidator" ref="exm/recipientValidator" />
    <param desc="contactService" ref="exm/contactService" />
    <param desc="dataProvider" ref="exm/dataProvider" />
    <param desc="itemUtil" ref="exm/itemUtil" />
    <param desc="eventDataService" ref="exm/eventDataService" />
    <param desc="dispatchManager" ref="exm/dispatchManager" />
    <param desc="emailAddressHistoryManager" ref="exm/emailAddressHistoryManager" />
    <param desc="recipientManagerFactory" ref="exm/recipientManagerFactory" />
    <param desc="sentHistoryManager" ref="exm/sentHistoryManager" />
    
    </dispatchTask>

重要

特定の受信者のメール メッセージをプレビューすると、CustomDispatchTask を使用して実装されたカスタム トークンは表示されません。代わりに、[レビュー] タブの [クイック テストの送信] 機能を使用してください。

トークンとコンタクトのプロパティ間のバインディングを記述する recipientPropertyTokenMap トークン マップ クラスのデフォルトの実装をオーバーライドする必要があります。

recipientPropertyTokenMap トークン マップ クラスをオーバーライドして、トークン キーをカスタム ファセットのプロパティにバインドするには:

  1. App_Config\Sitecore\EmailExperience\Sitecore.EmailExperience.Core.config ファイル内の recipients/recipientPropertyTokenMap 要素をカスタム トークン マップに置き換えるか、パッチを適用します。

    例:

    <recipientPropertyTokenMap type="FooBar.CustomRecipientPropertyTokenMap, FooBar" singleInstance="true" />
    
  2. カスタム トークンを追加して、カスタム トークン マップを作成します。

    例:

    namespace FooBar
    {
    public class CustomRecipientPropertyTokenMap : DefaultRecipientPropertyTokenMap
    {
    protected static readonly MethodInfo GetMyFacetValue = 
    typeof(FacetExtensions).GetMethod(nameof(FacetExtensions.GetMyCustomFacetValue), new[] { typeof(MyCustomFacet) });
    static CustomRecipientPropertyTokenMap()
    {
    if (TokenBindings == null)
    {
    TokenBindings = new Dictionary<Token, RecipientPropertyTokenBinding>();
    }
    RecipientPropertyTokenBinding customTokenBinding = RecipientPropertyTokenBinding.Build<MyCustomFacet>(new Token("customtokenkey"), null, GetMyFacetValue);
    TokenBindings.Add(customTokenBinding.Token, customTokenBinding);
    }
    }
      public static class FacetExtensions
      {
        public static string GetMyCustomFacetValue (this MyCustomFacet facet)
        {
          return facet.SomeProperty;
        }
    }
    }
    

これで、$customtokenkey$ トークンをメール メッセージで使用できるようになりました。これは、該当するコンタクトのカスタム ファセットに保存されている値に置き換えられます。

注記

ファイルから新しいカスタム ファセットをインポートする場合は、コンタクトのインポート ウィザードを拡張して、カスタム コンタクト ファセットを含める (新しいマッピング フィールドとして) ことができます。