简单交互规划示例
您正在为一家移动电话公司的 Web 站点设计交互。下图显示了移动电话合约摘要页面中的布局。
用于显示交互点的样本 Web 页面
您定义了以下项来满足移动电话合约摘要页面的需求。
在专用于升级相关商品的区域中显示的一项商品
*
必须定义页面上用于显示升级商品的区域。此外,一旦 Interact 选取了要显示的商品,就必须记录信息。
交互点ip_planSummaryBottomRight
事件evt_logOffer
两个用于手机升级的商品
*
交互点ip_planSummaryTopRight
交互点ip_planSummaryBottomLeft
要进行分析,您需要分别记录已接受和已拒绝的商品。
事件evt_offerAccept
事件evt_offerReject
您还知道,只要您记录商品联系、接受或拒绝,就必须传递商品的处理代码。必要时,您将创建 NameValuePair 以包含处理代码,如以下示例中所示。
NameValuePair evtParam_TreatmentCode = new NameValuePairImpl();
evtParam_TreatmentCode.setName("UACIOfferTrackingCode");
evtParam_TreatmentCode.setValueAsString(offer.getTreatmentCode());
evtParam_TreatmentCode.setValueDataType(NameValuePair.DATA_TYPE_STRING);
现在,您可以请设计环境用户来为您创建交互点和事件,而您同时开始编写用于与接触点集成的代码。
对于每个将显示商品的交互点,您需要首先获取商品,然后抽取显示商品而需要的信息。例如,请求位于 Web 页面的右下方区域的商品 (planSummaryBottomRight)
Response response=getOffers(sessionID, ip_planSummaryBottomRight, 1)
这将返回一个包括 OfferList 响应在内的响应对象。但是,您的 Web 页面不能使用 OfferList 对象。您需要商品的图像文件,并且您知道此图像文件是其中一个商品属性 (offerImg)。您需要从 OfferList 中抽取所需要的商品属性。
OfferList offerList=response.getOfferList();
if(offerList.getRecommendedOffers() != null)
{
Offer offer = offerList.getRecommendedOffers()[0];
NameValuePair[] attributes = offer.getAdditionalAttributes();
for(NameValuePair attribute: attributes)
{
if(attribute.getName().equalsIgnoreCase("offerImg"))
{
/* Use this value in your code for the page, for
example: stringHtml = "<img src="+attribute.getValueAsString()+ " > */
}
}
}
由于您在显示商品,因此您希望将其记录为联系。
NameValuePair evtParam_TreatmentCode = new NameValuePairImpl();
evtParam_TreatmentCode.setName("UACIOfferTrackingCode");
evtParam_TreatmentCode.setValueAsString(offer.getTreatmentCode());
evtParam_TreatmentCode.setValueDataType(NameValuePair.DATA_TYPE_STRING);
postEvent(
sessionID, evt_logOffer, evtParam_TreatmentCode)
无需单独调用其中每个方法,而是可以对 Web 页面的 planSummaryBottomLeft 部分使用 executeBatch 方法,如以下示例中所示。
Command getOffersCommand = new CommandImpl();
getOffersCommand.setMethodIdentifier(Command.COMMAND_GETOFFERS);
getOffersCommand.setInteractionPoint(ip_planSummaryBottomLeft);
getOffersCommand.setNumberRequested(1);

Command postEventCommand = new CommandImpl();
postEventCommand.setMethodIdentifier(Command.COMMAND_POSTEVENT);
postEventCommand.setEvent(evt_logOffer);

/** Build command array */
Command[] commands =
{
getOffersCommand,
postEventCommand
};

/** Make the call */
BatchResponse batchResponse = api.executeBatch(
sessionId, commands);
在此示例中,您不需要定义 UACIOfferTrackingCode,这是因为,如果您不提供 UACIOfferTrackingCode,那么 Interact 运行时服务器会自动将最近一次建议的处理列表记录为联系。
您还编写了某些内容以更改对页面上第二个区域(用于显示手机升级商品)每隔 30 秒显示的图像。您已决定旋转显示三个图像,因此您应使用以下代码来检索要进行高速缓存的一组商品,以在用于旋转图像的代码中使用。
Response response=getOffers(sessionID, ip_planSummaryBottomLeft, 3)
OfferList offerList=response.getOfferList();
if(offerList.getRecommendedOffers() != null)
{
for(int x=0;x<3;x++)
{
Offer offer = offerList.getRecommendedOffers()[x];
if(x==0)
{
// grab offerimg attribute value and store somewhere;
// this will be the first image to display
}
else if(x==1)
{
// grab offerimg attribute value and store somewhere;
// this will be the second image to display
}
else if(x==2)
{
// grab offerimg attribute value and store somewhere;
// this will be the third image to display
}
}
}
您必须编写您客户机代码,以从本地高速缓存中进行访存,并且针对每个商品,在显示其图像之后,记录到联系中仅一次。要记录联系,需要一如既往地发布 UACITrackingCode 参数。每个商品将具有不同跟踪代码。
NameValuePair evtParam_TreatmentCodeSTR = new NameValuePairImpl();
NameValuePair evtParam_TreatmentCodeSBR = new NameValuePairImpl();
NameValuePair evtParam_TreatmentCodeSBL = new NameValuePairImpl();

OfferList offerList=response.getOfferList();
if(offerList.getRecommendedOffers() != null)
{
for(int x=0;x<3;x++)
{
Offer offer = offerList.getRecommendedOffers()[x];
if(x==0)
{
evtParam_TreatmentCodeSTR.setName("UACIOfferTrackingCode");
evtParam_TreatmentCodeSTR.setValueAsString(offer.getTreatmentCode());
evtParam_TreatmentCodeSTR.setValueDataType(NameValuePair.DATA_TYPE_STRING);
}
else if(x==1)
{
evtParam_TreatmentCodeSBR.setName("UACIOfferTrackingCode");
evtParam_TreatmentCodeSBR.setValueAsString(offer.getTreatmentCode());
evtParam_TreatmentCodeSBR.setValueDataType(NameValuePair.DATA_TYPE_STRING);
}
else if(x==2)
{
evtParam_TreatmentCodeSBL.setName("UACIOfferTrackingCode");
evtParam_TreatmentCodeSBL.setValueAsString(offer.getTreatmentCode());
evtParam_TreatmentCodeSBL.setValueDataType(NameValuePair.DATA_TYPE_STRING);
}
}
}
对于每个商品,如果单击了商品,那么您应记录已接受的商品和已拒绝的商品。(在此情况下,未显式选择的商品将被视为已拒绝。)以下是在选择了 ip_planSummaryTopRight 商品的情况下的示例:
postEvent(sessionID, evt_offerAccept, evtParam_TreatmentCodeSTR)
postEvent(sessionID, evt_offerReject, evtParam_TreatmentCodeSBR)
postEvent(sessionID, evt_offerReject, evtParam_TreatmentCodeSBL)
实际上,最好是通过 executeBatch 方法来发送这三个 postEvent 调用。
这是一个基本示例,并且未标明编写集成的最佳方法。例如,这些示例中均不包含使用 Response 类的任何错误检查。