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

Current version: 10.1

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

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

注記

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

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

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

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

カスタム ディスパッチ タスクを作成する

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

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

    例:

    RequestResponse
    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 に置き換えます。

    例:

    RequestResponse
    <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 要素をカスタム トークン マップに置き換えるか、パッチを適用します。

    例:

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

    例:

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

注記

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

Do you have some feedback for us?

If you have suggestions for improving this article,