xDBプログラミング:OutcomeをAPIを使用して登録する

samatsu 7/27/2015 1248 N/A xDB Programming

Sitecore 8 から導入された Outcome(結果)をAPIを使用して登録する方法をご紹介します。Outcomeは訪問者(コンタクト)がWebサイト上で行った金額に換算できるような重要なイベントを記録するために使用します(もちろん非常に重要なイベントでも0円換算になる場合も使用できます)。外部連携している場合はオフラインや外部システムのイベントもAPIで登録できます。ゴールはサイトの品質や効果を計測するためのものに対してOutcomeは訪問者がどのような訪問者であるのかを表す指標として使用できます。

例えば、ホテルなどで予約システムのあるWebサイトを考えます。サイトのコンテンツを最適化して訪問者を適切なコンテンツに誘導し、ホテルの予約を獲得できればそれはゴール(サイトの目的)を達成したことになります。予約を行ってくれたそれぞれの訪問者を判断したい場合どうすればよいでしょうか。例えば料金の高い部屋、低い部屋を予約してくれたのかどうかを基準にして訪問者を判断したい場合はゴールとは別の基準を使用する必要があります。そのような場合にOutcomeを使用できます。Outcomeには金額換算にするといくらの価値に値するかを設定するフィールドが用意されています。

つまり、ゴールはインタラクションに紐づき、Outcomeはコンタクト(つまり個人)に紐づくという違いがあります。サイトのコンテンツが最適化できているかを判断するのにゴールを使用し、コンタクトを判断するのに金額換算された重要なイベントすなわち Outcome を使用できます。

Outcomeは金額に換算できるフィールドを持ち、、ゴールと異なり、同じ種類のOutcomeでも固定の金額に換算できない場合が多いので、APIを使って動的に金額値を設定して登録できるようになっています。登録したOutcomeはExperience Profileで確認できます。

1. インタラクション中に発生したOutcomeを登録する

Sitecoreをインストールすると標準で、商品の購入(Product Purchase, {9016E456-95CB-42E9-AD58-997D6D77AE83}) の結果の定義アイテムがあります。eコマースサイトをSitecoreで実装している場合に、訪問者が商品を購入したタイミングで商品の購入結果アイテムを登録する場合は次のようなサンプルコードを実行します。RegisterContactOutcome拡張メソッドを使用するにはソースコードでSitecore.Analytics.Outcome.Extensions をusing句で参照するようにしてください。

/// <summary>
/// 訪問中(インタラクション)の何らかのイベントで、
/// Outcomeを現在のコンタクトに紐づけて登録する
/// </summary>
protected void btnRegister_Click(object sender, EventArgs e)
{
    if (Tracker.IsActive)
    {
        // using Sitecore.Analytics.Outcome.Extensions が必要です
        ContactOutcome x = new ContactOutcome(new ID(), new ID("{9016E456-95CB-42E9-AD58-997D6D77AE83}"), new ID(Tracker.Current.Contact.ContactId));
        x.MonetaryValue = 9999; // 金額に換算できる場合は金額の換算値を設定
        // InteractionIdは必須ではありません。
        //x.InteractionId = new ID(Tracker.Current.Interaction.InteractionId);
        Tracker.Current.RegisterContactOutcome(x);
    }
}

実際にエクスペリエンスプロファイルにOutcomeがタイムラインやアクティビティの結果タブをにOutcomeのデータが表示されることを確認できます。

金額値を設定する場合はOutcome(結果)の定義アイテムの Monetary Value Applicable (適切な通貨値)フィールドが有効になっている必要があります。

以上がSitecore上のインタラクション中に発生した重要なイベントをOutcomeとしてSitecoreのxDBに登録する方法です。

2.外部データソースと連携してOutcomeを登録する

オフラインの重要なイベントや外部システムから連携された重要なアクティビティをOutcomeとして登録することができます。そのような場合は、次のようなサンプルコードを実行するようにします。

/// <summary>
/// 他システムなど外部データソースから連携してOutcomeをコンタクトに登録する
/// </summary>
protected void RegisterFromEternalSource()
{
    var contactid = new ID(); // Outcomeを紐づけるコンタクトIDを何らかの方法で取得
    ContactOutcome x = new ContactOutcome(new ID(), new ID("{9016E456-95CB-42E9-AD58-997D6D77AE83}"), new ID(contactid));
    x.DateTime = DateTime.UtcNow;
    x.MonetaryValue = 9999; // 金額に換算できる場合は金額の換算値を設定
    OutcomeManager manager = Factory.CreateObject("outcome/outcomeManager", true) as OutcomeManager;

    manager.Save(x);

}

インタラクション中やオフラインシステムから連携してコンタクトにOutcomeを関連付けることができるようになりました。

3.まとめ

Outcomeの登録方法をご紹介しました。ちなみに、コンタクトに関連付いたOutcomeを取得する場合は次のようにコードを記述できます。

IReadOnlyCollection<IOutcome> outcomes = manager.GetForEntity<IOutcome>(contactId);

最近docサイトにもAPIを使用してOutcomeを登録する方法が公開されたのでこちらもご参照ください。

Register an outcome programmatically
https://doc.sitecore.net/sitecore%20experience%20platform/xdb%20api%20customization/register%20an%20outcome%20programmatically