Verwenden des Integrationsbeispielprojekts
Jede Interact-Laufzeitinstallation beinhaltet ein Beispielprojekt, das den Prozess der Integration von Intelligent Offer mit Interact demonstriert. Das Beispielprojekt stellt eine vollständige End-to-End-Demonstration zur Verfügung, wie Sie eine Webseite erstellen, die ein Angebot aufruft, das eine Kategorie-ID enthält. Diese Kategorie-ID wird dann an Intelligent Offer übergeben, um eine Liste mit empfohlenen Produkten abzurufen, die an den Interaktionspunkten der Seite dargestellt wird.
Übersicht
Sie können das enthaltene Beispielprojekt ohne Änderungen verwenden, wenn Sie den Integrationsprozess testen möchten. Sie können es auch als Ausgangspunkt verwenden, um eigene benutzerdefinierte Seiten zu entwickeln. Sie finden das Beispielprojekt in der folgenden Datei:
Interact_home/samples/IntelligentOfferIntegration/MySampleStore.jsp
Diese Datei enthält neben einem vollständigen, funktionsfähigen Beispiel des Integrationsprozesses auch umfassende Kommentare, die erklären, was Sie in Interact einrichten müssen, was Sie in der JSP-Datei anpassen müssen und wie Sie die Seite ordnungsgemäß implementieren, damit sie mit Ihrer Installation ausgeführt wird.
MySampleStore.jsp
Zur Vereinfachung ist die Datei „MySampleStore.jsp“ hier dargestellt. Dieses Beispiel wird in nachfolgenden Releases von Interact u. U. aktualisiert. Verwenden Sie daher als Ausgangspunkt für alle Beispiele, die Sie möglicherweise benötigen, die Datei, die Bestandteil Ihrer Installation ist.
<!--
# *******************************************************************************
# Licensed Materials - Property of IBM
# Unica Interact
# (c) Copyright IBM Corporation 2001, 2011.
# US Government Users Restricted Rights - Use, duplication or disclosure
# restricted by GSA ADP Schedule Contract with IBM Corp.
# *******************************************************************************

-->


<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<%@ page import="java.net.URL,
java.net.URLConnection,
java.io.InputStreamReader,
java.io.BufferedReader,
com.unicacorp.interact.api.*,
com.unicacorp.interact.api.jsoverhttp.*,
org.apache.commons.json.JSONObject,
org.apache.commons.json.JSONArray" %>

<%

/*********************************************************************************
* Dieses Beispielprogramm im JSP-Format demonstriert die Integration von Interact mit Intelligent Offer.
*
* Wenn in einem Browser auf die URL für diese JSP-Datei zugegriffen wird, ruft die Logik Interact auf,
* um ein Angebot abzurufen. Anhand der Kategorie-ID, die dem Angebot zugeordnet ist, ruft die Logik
* Intelligent Offer auf, um empfohlene Produkte abzurufen. Das Angebot und die Produkte
* werden angezeigt.
* Zum Wechseln der Kunden-ID, um unterschiedliche Angebote zu demonstrieren, können Sie einfach
* cid=<id> zur URL dieser JSP-Datei hinzufügen.
*
* Voraussetzungen, um diese Demo zu verstehen:
* 1) Vertrautheit mit Interact und der Interact-Java-API
* 2) Vertrautheit mit Intelligent Offer und der Intelligent Offer-REST-API
* 3) Grundlegende Webkenntnisse (HTML, CSS, JavaScript), um eine Webseite zu formatieren
* 4) Technologie zum Erstellen einer Webseite (in dieser Demo wird serverseitiges JSP verwendet)
*
*
* Schritte zum Starten dieser Demo:
* 1) Richten Sie eine Interact-Laufzeitumgebung ein, die Angebote mit den folgenden
* Angebotsattributen bereitstellen kann:
* ImageURL : URL mit dem Link zum Bild des Angebots
* ClickThruURL : URL mit dem Link zur Landing-Page für das Angebot
* CategoryID : Die Intelligent Offer-Kategorie-ID, die dem Angebot zugeordnet ist
* HINWEIS: Für die Attribute können alternative Namen verwendet werden, wenn die Verweise * auf die Attribute in dieser JSP-Datei entsprechend geändert werden.
* 2) Sie benötigen eine gültige REST-API-URL für die Intelligent Offer-Umgebung
* 3) Betten Sie diese JSP-Datei in eine Java-Webanwendung ein
* 4) Stellen Sie sicher, dass interact_client.jar sich im Verzeichnis WEB-INF/lib befindet (Kommunikation mit * Interact)
* 5) Stellen Sie sicher, dass JSON4J_Apache.jar (aus der Interact-Installation) sich im Verzeichnis
* WEB-INF/lib befindet (Kommunikation mit Intelligent Offer)
* 6) Legen Sie die speziellen Eigenschaften Ihrer Umgebung fest, die in den zwei folgenden Abschnitten angegeben sind
**********************************************************************************/

/*********************************************************************************
* *****************ÄNDERN SIE DIESE EINSTELLUNGEN IN ÜBEREINSTIMMUNG MIT IHRER UMGEBUNG********************
* Legen Sie hier die speziellen Eigenschaften Ihrer Interact-Umgebung fest ...
**********************************************************************************/

final String sessionId="123";
final String interactiveChannel = "SampleIO";
final String audienceLevel = "Customer";
final String audienceColumnName="CustomerID";
final String ip="ip1";
int customerId=1;
final String interactURL="http://localhost:7011/interact/servlet/InteractJSService";
final boolean debug=true;
final boolean relyOnExistingSession=true;

/*********************************************************************************
*****************ÄNDERN SIE DIESE EINSTELLUNGEN IN ÜBEREINSTIMMUNG MIT IHRER UMGEBUNG********************
* Legen Sie hier die speziellen Eigenschaften Ihrer Intelligent Offer-Umgebung fest ...
**********************************************************************************/

final String ioURL="http://recs.coremetrics.com/iorequest/restapi";
final String zoneID="ProdRZ1";
final String cID="90007517";



/*********************************************************************************
********************************************************************************/

StringBuilder interactErrorMsg = new StringBuilder();
StringBuilder intelligentOfferErrorMsg = new StringBuilder();

// Kunden-ID abrufen, wenn sie als Parameter übergeben wird
String cid = request.getParameter("cid");
if(cid != null)
{
customerId = Integer.parseInt(cid);
}

// Interact aufrufen, um Angebot abzurufen
Offer offer=getInteractOffer(interactURL,sessionId,interactiveChannel,audienceLevel,
audienceColumnName,ip,customerId,debug,relyOnExistingSession,interactErrorMsg);

// Spezielle Attribute vom Angebot abrufen (Bild-URL, Klickabfolgen-URL & Kategorie-ID)
String offerImgURL=null;
String offerClickThru=null;
String categoryId="";

if(offer != null)
{
for(NameValuePair offerAttribute : offer.getAdditionalAttributes())
{
if(offerAttribute.getName().equalsIgnoreCase("ImageURL"))
{
offerImgURL=offerAttribute.getValueAsString();
}
else if(offerAttribute.getName().equalsIgnoreCase("ClickThruURL"))
{
offerClickThru=offerAttribute.getValueAsString();
}
else if(offerAttribute.getName().equalsIgnoreCase("CategoryID"))
{
categoryId=offerAttribute.getValueAsString();
}
}
}

// Intelligent Offer aufrufen, um Produkte abzurufen
JSONObject products=getProductsFromIntelligentOffer(ioURL, cID, zoneID, categoryId,
intelligentOfferErrorMsg);

%>

<html>
<head>
<title>My Favorite Store</title>

<script language="javascript" type="text/javascript">
var unicacarousel=(function(){var g=false;var h;var j=0;var k=0;var l=0;var m=40;
var n=new Array(0,2,6,20,40,60,80,88,94,97,99,100);var o=function(a){var b=a.parentNode;
h=b.getElementsByTagName("UL")[0];var c=h.getElementsByTagName("LI");j=c[0].offsetWidth;
k=c.length;l=Math.round((b.offsetWidth/j));unicacarousel.recenter()};var p=function(a)
{var b=parseFloat(h.style.left);if(isNaN(b))b=0;for(var i=0;i<n.length;i++)
{setTimeout("unicacarousel.updateposition("+(b+(a*(n[i]/100)))+");",((i*m)+50))}
setTimeout("unicacarousel.recenter();",((i*m)+50))};return{gotonext:function(a,b)
{if(!g){o(a);g=true;p((-1*b*j))}},gotoprev:function(a,b){if(!g){o(a);g=true;p((b*j))}},
updateposition:function(a){h.style.left=a+"px"},recenter:function(){var a=parseFloat(h.style.left);
if(isNaN(a))a=0;var b=j*Math.round(((l-k)/2));var c=Math.abs(Math.round((b-a)/j));
if(a<b){var d=h.getElementsByTagName("LI");var e=new Array();
for(var i=0;i<c;i++){e[e.length]=d[i]}for(var i=0;i<e.length;i++)
{h.insertBefore(e[i],null)}unicacarousel.updateposition(b)}else
if(a>b){var d=h.getElementsByTagName("LI");var e=new Array();
for(var i=0;i<c;i++){e[e.length]=d[d.length-c+i]}var f=d[0];
for(var i=0;i<e.length;i++){h.insertBefore(e[i],f)}unicacarousel.updateposition(b)}g=false}}})();
</script>

<style type="text/css">
.unicaofferblock_container {width:250px; position:relative; display:block;
text-decoration:none; color:#000000; cursor: pointer;}
.unicaofferblock_container .unicateaserimage {margin:0px 0.5em 0.25em 0px; float:left;}
.unicaofferblock_container .unicabackgroundimage {position:absolute; top:0px; left:0px;}
.unicaofferblock_container .unicabackgroundimagecontent {width:360px; height:108px;
padding:58px 4px 4px 20px; position:relative; top:0px;}
.unicaofferblock_container h4 {margin:0px; padding:0px; font-size:14px;}

.unicacarousel {width:588px; position:relative; top:0px;}
.unicacarousel_sizer {width:522px; height:349px; margin:0px 33px; padding:0;
overflow:hidden; position:relative;}
.unicacarousel_rotater {height:348px; width:1000px; margin:0 !important;
padding:0; list-style:none; position:absolute; top:0px;
left:0px;}
.unicacarousel li {width:167px; height:349px; float:left; padding:0 4px;
margin:0px !important; list-style:none !important;
text-indent:0px !important;}
.unicacarousel_gotoprev, .unicacarousel_gotonext {width:18px; height:61px;
top:43px; background:url(../img/carouselarrows.png) no-repeat;
position:absolute; z-index:2; text-align:center; cursor:pointer;
display:block; overflow:hidden; text-indent:-9999px;
font-size:0px; margin:0px !important;}
.unicacarousel_gotoprev {background-position:0px 0; left:0;}
.unicacarousel_gotonext {background-position:-18px 0; right:0;}

</style>


</head>

<body>

<b>Welcome To My Store</b> Mr/Mrs. <%=customerId %>
<br><br>
<% if(offer != null) { %>
<!-- Interact Offer HTML -->

<div onclick="location.href='<%=offerClickThru %>'" class="unicaofferblock_container">
<div class="unicabackgroundimage">
<a href="<%=offerClickThru %>"><img src="<%=offerImgURL %>" height="170"
width="695" border="0"></a>
</div>
</div>


<% } else { %>
No offer available.. <br> <br>
<%=interactErrorMsg.toString() %>
<% } %>

<% if(products != null) { %>
<!-- IntelligentOffer Products HTML -->
<br><br><br> <br><br><br> <br><br><br> <br><br><br> <br>
<div class="unicacarousel">
<div class="unicacarousel_sizer">
<ul class="unicacarousel_rotater">


<% JSONArray recs = products.getJSONObject("io").getJSONArray("recs");
if(recs != null)
{
for(int x=0;x< recs.length();x++)
{
JSONObject rec = recs.getJSONObject(x);
if(rec.getString("Product Page") != null &&
rec.getString("Product Page").trim().length()>0) {
%>

<li>
<a href="<%=rec.getString("Product Page") %>" title="<%=rec.getString("Product Name") %>">
<img src="<%=rec.getString("Image") %>" width="166" height="148" border="0" />
<%=rec.getString("Product Name") %>
</a>
</li>

<% }
}
}
%>
</ul>
</div>
<p class="unicacarousel_gotoprev" onclick="unicacarousel.gotoprev(this,1);"></p>
<p class="unicacarousel_gotonext" onclick="unicacarousel.gotonext(this,1);"></p>
</div>
<% } else { %>
<div>
<br><br> <br><br><br> <br><br><br> <br><br><br> <br>
No products available...<br> <br>
<%=intelligentOfferErrorMsg.toString() %>
</div>
<% } %>

</body>
</html>



<%!
/*********************************************************************************
* Die folgenden Vereinfachungsfunktionen dienen für Abrufe von Interact und
* Intelligent Offer
**********************************************************************************/

/*********************************************************************************
* Intelligent Offer aufrufen, um empfohlene Produkte abzurufen
**********************************************************************************/
private JSONObject getProductsFromIntelligentOffer(String ioURL, String cID,
String zoneID, String categoryID, StringBuilder intelligentOfferErrorMsg)
{

try
{

ioURL += "?cm_cid="+cID+"&cm_zoneid="+zoneID+"&cm_targetid="+categoryID;
System.out.println("CoreMetrics URL:"+ioURL);
URL url = new java.net.URL(ioURL);

URLConnection conn = url.openConnection();

InputStreamReader inReader = new InputStreamReader(conn.getInputStream());
BufferedReader in = new BufferedReader(inReader);

StringBuilder response = new StringBuilder();

while(in.ready())
{
response.append(in.readLine());
}

in.close();

intelligentOfferErrorMsg.append(response.toString());

System.out.println("CoreMetrics:"+response.toString());

if(response.length()==0)
return null;

return new JSONObject(response.toString());
}
catch(Exception e)
{
intelligentOfferErrorMsg.append(e.getMessage());
e.printStackTrace();
}

return null;

}

/*********************************************************************************
* Interact aufrufen, um Angebote abzurufen
**********************************************************************************/
private Offer getInteractOffer(String interactURL,String sessionId,String interactiveChannel,
String audienceLevel,
String audienceColumnName,String ip, int customerId,boolean debug,
boolean relyOnExistingSession, StringBuilder interactErrorMsg)
{
try
{
InteractAPI api = InteractAPI.getInstance(interactURL);
NameValuePairImpl custId = new NameValuePairImpl();
custId.setName(audienceColumnName);
custId.setValueAsNumeric(Double.valueOf(customerId));
custId.setValueDataType(NameValuePair.DATA_TYPE_NUMERIC);
NameValuePairImpl[] audienceId = { custId };

// startSession aufrufen
Response response = api.startSession(sessionId, relyOnExistingSession,
debug, interactiveChannel, audienceId, audienceLevel, null);

if(response.getStatusCode() == Response.STATUS_ERROR)
{
printDetailMessageOfWarningOrError("startSession",response, interactErrorMsg);
}

// getOffers aufrufen
response = api.getOffers(sessionId, ip, 1);
if(response == null || response.getStatusCode() == Response.STATUS_ERROR)
{
printDetailMessageOfWarningOrError("getOffers",response, interactErrorMsg);
}

OfferList offerList=response.getOfferList();

if(offerList != null && offerList.getRecommendedOffers() != null)
{
return offerList.getRecommendedOffers()[0];
}
}
catch(Exception e)
{
interactErrorMsg.append(e.getMessage());
e.printStackTrace();
}
return null;
}

private void printDetailMessageOfWarningOrError(String command, Response response,
StringBuilder interactErrorMsg)
{
StringBuilder sb = new StringBuilder();
sb.append("Calling "+command).append("<br>");
AdvisoryMessage[] messages = response.getAdvisoryMessages();

for(AdvisoryMessage msg : messages)
{
sb.append(msg.getMessage()).append(":");
sb.append(msg.getDetailMessage());
sb.append("<br>");
}
interactErrorMsg.append(sb.toString());
}
%>