---
title: "カスタムパーソナライズトークンの作成"
slug: "create-a-custom-personalization-token"
abstract: "ユーザープロフィールの適切な値を置き換えられるカスタムのパーソナライズトークンを作成しましょう。"
---
# カスタムパーソナライズトークンの作成

Email Experience Manager(EXM)では、トークンを使ってメールキャンペーンのメッセージをパーソナライズできます。例えば、メッセージの冒頭でトークン$name$を使うことで、メールキャンペーンを送信する際にトークンを連絡先の名前に置き換えることができます。

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

> !注オンラインプレビューモードでカスタムトークンを置き換えるには、[*getContact*パイプラインを延長](https://doc.sitecore.com/xp/ja/developers/exm/100/email-experience-manager/create-a-custom-personalization-token.html#UUID-b352dbb4-f820-24af-1eee-42930bf439a4_UUID-d02208c0-c776-a256-2694-4d8c9808bf73)する必要があります。

カスタムトークンを作成するには、以下の条件が必要です:

-   [カスタムコンタクトのファセットを作成する](https://doc.sitecore.com/xp/ja/developers/exm/100/email-experience-manager/create-a-custom-personalization-token.html#UUID-b352dbb4-f820-24af-1eee-42930bf439a4_id__Create_a_custom "Create a custom contact facet")
-   [カスタムディスパッチタスクを作成する](https://doc.sitecore.com/xp/ja/developers/exm/100/email-experience-manager/create-a-custom-personalization-token.html#UUID-b352dbb4-f820-24af-1eee-42930bf439a4_id__Create_a_property "Create a custom dispatch task")
-   [デフォルトのトークンマップを上書きします](https://doc.sitecore.com/xp/ja/developers/exm/100/email-experience-manager/create-a-custom-personalization-token.html#UUID-b352dbb4-f820-24af-1eee-42930bf439a4_id__Add_a_new "Override the default token map")

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

Sitecoreエクスペリエンスデータベースでは、新しい [カスタム連絡先の側面](https://doc.sitecore.com/xp/ja/developers/exm/100/email-experience-manager/extending-the-getcontact-pipeline.html "Extending the getContact pipeline")を作成することで、ご自身のカスタムデータで連絡を拡張できます。

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

作成したカスタムファセットを読み込むには、以下の条件が必要です:

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/dispatchTask*でApp\_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で実装されたカスタムトークンは見えません。代わりに、レビュータブのクイックテスト機能Sendをご利用ください。

## デフォルトのトークンマップを上書きします

*recipientPropertyTokenMap*[トークンとコンタクトのプロパティ間のバインディングを記述するデフォルトの実装を上書きしなければなりません。](https://doc.sitecore.com/xp/ja/developers/exm/100/email-experience-manager/configuring-the-token-map.html "Configuring the token map")

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ドルトークンを使えば、該当する連絡先のカスタム面に保存された値に置き換えられます。

> !注新しいカスタムファセットをファイルからインポートしたい場合は、[インポートコンタクトウィザードを拡張してカスタムコンタクトファセット](https://doc.sitecore.com/xp/en/users/100/sitecore-experience-platform/configure-the-import-contacts-wizard-to-include-custom-contact-facets.html) を新しいマッピングフィールドとして含めることができます。