startSession

startSession メソッドは、ランタイム・セッションを作成および定義します。

startSession(String sessionID, 
	  boolean relyOnExistingSession, 
	  boolean debug, 
	  String interactiveChannel, 
	  NameValuePairImpl[] audienceID, 
	  String audienceLevel, 
	  NameValuePairImpl[] parameters)

startSession は、最大 5 つまで以下のアクションをトリガーできます。

  • ランタイム・セッションを作成します。
  • 現在のオーディエンス・レベルの訪問者のプロファイル・データを、対話式チャネル用に定義されたテーブル・マッピングでロード用にマーク付けされたディメンション・テーブルを含め、ランタイム・セッションにロードします。
  • セグメンテーションをトリガーし、現在のオーディエンス・レベルのすべての対話式フローチャートを実行します。
  • enableOfferSuppressionLookup プロパティーが true に設定されている場合、オファー非表示データをセッションにロードします。
  • enableScoreOverrideLookup プロパティーが true に設定されている場合、スコア・オーバーライド・データをセッションにロードします。

startSession メソッドには以下のパラメーターが必要です。

  • sessionID - セッション ID を識別する文字列。セッション ID を定義する必要があります。例えば、カスタマー ID およびタイム・スタンプの組み合わせを使用できます。

    ランタイム・セッションの作成元を定義するには、セッション ID を指定する必要があります。この値は、クライアントによって管理されます。同じセッション ID のすべてのメソッド呼び出しは、クライアントによって同期される必要があります。同じセッション ID で同時に API を呼び出した場合の動作は定義されていません。

  • relyOnExistingSession - このセッションで新規または既存のセッションを使用するかどうかを定義するブール。有効な値は true または false です。true の場合、startSession メソッドを使用して既存のセッション ID を指定する必要があります。false の場合、新規セッション ID を指定する必要があります。

    relyOnExistingSessiontrue に設定し、セッションが存在する場合、ランタイム環境では、既存のセッション・データを使用します。データの再ロードやセグメンテーションのトリガーは行われません。セッションが存在しない場合、ランタイム環境では、データのロードやセグメンテーションのトリガーなどの新規セッションが作成されます。タッチポイントにランタイム・セッションよりも長いセッションがある場合は、relyOnExistingSession を true に設定し、それをすべての startSession 呼び出しで使用すると便利です。例えば、Web サイト・セッションは 2 時間有効ですが、ランタイム・セッションは 20 分しか有効ではありません。

    同じセッション ID で startSession を 2 回呼び出す場合、relyOnExistingSession が false であれば、最初の startSession 呼び出しのすべてのセッション・データは失われます。

  • debug - デバッグ情報を有効または無効にするブール。有効な値は true または false です。true の場合、Interact はランタイム・サーバー・ログにデバッグ情報を記録します。各セッションに対して個々にデバッグ・フラグが設定されます。このため、個々のセッションのデバッグ・データをトレースできます。
  • interactiveChannel - このセッションが参照する対話式チャネルの名前を定義する文字列。この名前は、Campaign で定義されている対話式チャネルの名前と正確に一致する必要があります。
  • audienceID - NameValuePairImpl オブジェクトの配列。その名前は、オーディエンス ID を含むテーブルの物理的な列名と一致する必要があります。
  • audienceLevel - オーディエンス・レベルを定義する文字列。
  • parameters - startSession で渡す必要のあるパラメーターを識別する NameValuePairImpl オブジェクト。これらの値はセッション・データに格納され、セグメンテーションに使用できます。

    同じオーディエンス・レベルの対話式フローチャートが複数ある場合は、すべてのテーブルのすべての列のスーパーセットを含める必要があります。プロファイル・テーブルをロードするようにランタイムを構成する場合、プロファイル・テーブルに必要なすべての列が含まれているときは、プロファイル・テーブルのデータを上書きする必要がある場合を除いて、パラメーターを渡す必要はありません。プロファイル・テーブルに必要な列のサブセットが含まれている場合は、不足している列をパラメーターとして含める必要があります。

audienceID または audienceLevel が無効で、relyOnExistingSession が false の場合、startSession の呼び出しに失敗する可能性があります。interactiveChannel が無効な場合、relyOnExistingSession が true であるか、false であるかにかかわらず、startSession は失敗します。

relyOnExistingSession が true で、同じ sessionID を使用して 2 回目の startSession 呼び出しを行っても、最初のセッションが期限切れになっている場合、Interact は新規セッションを作成します。

relyOnExistingSession が true で、2 回目の startSession 呼び出しで使用する sessionID は同じでも audienceID または audienceLevel が異なる場合、ランタイム・サーバーは既存のセッションのオーディエンスを変更します。

relyOnExistingSession が true で、2 回目の startSession 呼び出しで使用する sessionID は同じでも interactiveChannel が異なる場合、ランタイム・サーバーは新規セッションを作成します。

戻り値

ランタイム・サーバーは、以下の属性が設定されたレスポンス・オブジェクトを使用して startSession に応答します。

  • AdvisoryMessages (StatusCode が 0 以外の場合)
  • ApiVersion
  • セッション ID
  • StatusCode

以下の例は、startSession を呼び出す 1 つの方法を示します。

String sessionId="MySessionID-123";
String audienceLevel="Customer";
NameValuePair custId = new NameValuePairImpl();
custId.setName("CustomerId");
custId.setValueAsNumeric(1.0);
custId.setValueDataType(NameValuePair.DATA_TYPE_NUMERIC);
NameValuePair[] initialAudienceId = { custId };
boolean relyOnExistingSession=false;
boolean initialDebugFlag=true;
String interactiveChannel="Accounts Website";
NameValuePair parm1 = new NameValuePairImpl();
parm1.setName("SearchString");
parm1.setValueAsString("");
parm1.setValueDataType(NameValuePair.DATA_TYPE_STRING);
        
NameValuePair parm2 = new NameValuePairImpl();
parm2.setName("TimeStamp");
parm2.setValueAsDate(new Date());
parm2.setValueDataType(NameValuePair.DATA_TYPE_DATETIME);
        
NameValuePair parm3 = new NameValuePairImpl();
parm3.setName("Browser");
parm3.setValueAsString("IE6");
parm3.setValueDataType(NameValuePair.DATA_TYPE_STRING);
        
NameValuePair parm4 = new NameValuePairImpl();
parm4.setName("FlashEnabled");
parm4.setValueAsNumeric(1.0);
parm4.setValueDataType(NameValuePair.DATA_TYPE_NUMERIC);
        
NameValuePair parm5 = new NameValuePairImpl();
parm5.setName("TxAcctValueChange");
parm5.setValueAsNumeric(0.0);
parm5.setValueDataType(NameValuePair.DATA_TYPE_NUMERIC);
      
NameValuePair parm6 = new NameValuePairImpl();
parm6.setName("PageTopic");
parm6.setValueAsString("");
parm6.setValueDataType(NameValuePair.DATA_TYPE_STRING);

/** Specifying the parameters (optional) */        
NameValuePair[] initialParameters = { parm1, 
 parm2, 
 parm3, 
 parm4, 
 parm5, 
 parm6 
 };
                
/** Make the call */
response = api.startSession(sessionId, relyOnExistingSession, initialDebugFlag,
	interactiveChannel, initialAudienceId, audienceLevel, initialParameters);
        
/** Process the response appropriately */
processStartSessionResponse(response);

processStartSessionResponse は、startSession によって返されるレスポンス・オブジェクトを処理するメソッドです。

public static void processStartSessionResponse(Response response)
{
  // check if response is successful or not
  if(response.getStatusCode() == Response.STATUS_SUCCESS)
 {
  System.out.println("startSession call processed with no warnings or errors");
 }
  else if(response.getStatusCode() == Response.STATUS_WARNING)
 {
  System.out.println("startSession call processed with a warning");
 }
  else
 {
  System.out.println("startSession call processed with an error");
 }
    
 // For any non-successes, there should be advisory messages explaining why
 if(response.getStatusCode() != Response.STATUS_SUCCESS)
  printDetailMessageOfWarningOrError("StartSession",
  	response.getAdvisoryMessages());
}