JavaScript API example
From 12.1.9 onwards, for cases where multiple partitions are configured in the Interact
Run-time, it is mandatory to pass the partition in init method for
InteractAPI. If the user enables authentication, this parameter is optional, as the
partition will be fetched for the provided username.
function isJavaScriptAPISelected() {
var radios = document.getElementsByName('api');
for (var i = 0, length = radios.length; i < length; i++) {
if (radios[i].checked) {
if (radios[i].value === 'JavaScript')
return true ;
else // only one radio can be logically checked
break;
}
}
return false;
}
function processFormForJSInvocation(e) {
if (!isJavaScriptAPISelected())
return;
if (e.preventDefault) e.preventDefault();
var serverurl = document.getElementById('serviceUrl').value ;
InteractAPI.init( { "url" : serverurl, "m_partition_name" : partition_name } );
var commandsToExecute = { "ssid" : null, "commands" : [] };
var callback = InteractAPI.Callback.create(onSuccess, onError);
callStartSession(commandsToExecute, callback);
callGetOffers(commandsToExecute, callback);
callGetOffersForMultipleInteractionPoints(commandsToExecute, callback);
callPostEvent(commandsToExecute, callback);
callSetAudience(commandsToExecute, callback);
callGetProfile(commandsToExecute, callback);
callEndSession(commandsToExecute, callback);
callSetDebug(commandsToExecute, callback);
callGetVersion(commandsToExecute, callback);
callExecuteBatch(commandsToExecute, callback);
// You must return false to prevent the default form behavior
return false;
}
function callStartSession(commandsToExecute, callback) {
//read configured start session
var ssId = document.getElementById('ss_sessionId').value;
var icName = document.getElementById('ic').value;
var audId = document.getElementById('audienceId').value;
var audLevel = document.getElementById('audienceLevel').value;
var params = document.getElementById('ss_parameters').value;
var relyOldSs = document.getElementById('relyOnOldSession').value;
var debug = document.getElementById('ss_isDebug').value;
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createStartSessionCmd(
icName, getNameValuePairs(audId),
audLevel, getNameValuePairs(params),
relyOldSs, debug));
}
else {
InteractAPI.startSession(ssId, icName,
getNameValuePairs(audId), audLevel,
getNameValuePairs(params), relyOldSs,
debug, callback) ;
}
}
function callGetOffers(commandsToExecute, callback) {
var ssId = document.getElementById('go_sessionId').value;
var ip = document.getElementById('go_ipoint').value;
var nofRequested = 5 ;
var nreqString = document.getElementById('offersRequested').value;
if (!nreqString && nreqString!== '')
nofRequested = Number(nreqString);
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createGetOffersCmd(ip, nofRequested));
}
else {
InteractAPI.getOffers(ssId, ip, nofRequested, callback);
}
}
function callPostEvent(commandsToExecute, callback) {
var ssId = document.getElementById('pe_sessionId').value;
var ev = document.getElementById('event').value;
var params = document.getElementById('parameters').value;
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.
CommandUtil.createPostEventCmd
(ev, getNameValuePairs(params)));
}
else {
InteractAPI.postEvent(ssId, ev, getNameValuePairs(params), callback);
}
}
function callGetOffersForMultipleInteractionPoints
(commandsToExecute, callback) {
var ssId = document.getElementById('gop_sessionId').value;
var requestDetailsStr = document.getElementById('requestDetail').value;
//trim string
var trimmed = requestDetailsStr.replace(/\{/g, "");
var parts = trimmed.split("}");
//sanitize strings
for(i = 0; i < parts.length; i += 1) {
parts[i] = parts[i].replace(/^\s+|\s+$/g, "");
}
//build get offer requests
var getOffReqs = [];
for(var i = 0; i < parts.length; i += 1) {
var getofReqObj = parseGetOfferReq(parts[i]);
if (getofReqObj) {
getOffReqs.push(getofReqObj);
}
}
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createGetOffersForMultiple
InteractionPointsCmd(getOffReqs));
}
else {
InteractAPI.getOffersForMultipleInteractionPoints
(ssId, getOffReqs, callback);
}
}
function parseGetOfferReq(ofReqStr) {
if (!ofReqStr || ofReqStr==="")
return null;
var posIp = ofReqStr.indexOf(',');
var ip = ofReqStr.substring(0,posIp);
var posNmReq = ofReqStr.indexOf(',', posIp+1);
var numReq = ofReqStr.substring(posIp+1,posNmReq);
var posDup = ofReqStr.indexOf(',', posNmReq+1);
var dupPolicy = null;
var reqAttributes = null;
if (posDup===-1)
dupPolicy = ofReqStr.substring(posNmReq+1);
else
dupPolicy = ofReqStr.substring(posNmReq+1,posDup);
//check if request string has attributes
var reqAttrPos = ofReqStr.search(/\(/g);
if (reqAttrPos!==-1) {
var reqAttributesStr = ofReqStr.substring(reqAttrPos);
reqAttributesStr = trimString(reqAttributesStr);
reqAttributesStr = removeOpenCloseBrackets(reqAttributesStr);
reqAttributes = parseReqAttributes(reqAttributesStr);
}
return InteractAPI.GetOfferRequest.create(ip, parseInt(numReq),
parseInt(dupPolicy), reqAttributes);
}
//trim string
function trimString(strToTrim) {
if (strToTrim)
return strToTrim.replace(/^\s+|\s+$/g, "");
else
return null;
}
function trimStrArray(strArray) {
if (!strArray) return ;
for(var i = 0; i < strArray.length; i += 1) {
strArray[i] = trimString(strArray[i]);
}
}
//remove open and close brackets in the end
function removeOpenCloseBrackets(strToUpdate) {
if (strToUpdate)
return strToUpdate.replace(/^\(+|\)+$/g, "");
else
return null;
}
function parseReqAttributes(ofReqAttrStr) {
//sanitize string
ofReqAttrStr = trimString(ofReqAttrStr);
ofReqAttrStr = removeOpenCloseBrackets(ofReqAttrStr);
if (!ofReqAttrStr || ofReqAttrStr==="")
return null;
//get the number requested
var pos = ofReqAttrStr.indexOf(",");
var numRequested = ofReqAttrStr.substring(0,pos);
ofReqAttrStr = ofReqAttrStr.substring(pos+1);
//first part will be attribute and rest will be child attributes
var parts = [];
pos = ofReqAttrStr.indexOf(",");
if (pos!==-1) {
parts.push(ofReqAttrStr.substring(0,pos));
parts.push(ofReqAttrStr.substring(pos+1));
}
else {
parts.push(ofReqAttrStr);
}
for(var i = 0; i < parts.length; i += 1) {
//sanitize string
parts[i] = trimString(parts[i]);
parts[i] = removeOpenCloseBrackets(parts[i]);
parts[i] = trimString(parts[i]);
}
//build list of attributes
var attributes = [];
var idx = 0;
if (parts[0]) {
var attParts = parts[0].split(";");
for (idx=0; idx<attParts.length; idx++) {
attParts[idx] = trimString(attParts[idx]);
attParts[idx] = removeOpenCloseBrackets(attParts[idx]);
attParts[idx] = trimString(attParts[idx]);
var atrObj = parseAttribute(attParts[idx]);
if (atrObj) attributes.push(atrObj);
}
}
//build list of child attributes
var childAttributes = [];
if (parts[1]) {
var childAttParts = parts[1].split(")");
for (idx=0; idx<childAttParts.length; idx++) {
childAttParts[idx] = trimString(childAttParts[idx]);
childAttParts[idx] = removeOpenCloseBrackets(childAttParts[idx]);
childAttParts[idx] = trimString(childAttParts[idx]);
//get the number requested
var noReqPos = childAttParts[idx].indexOf(",");
var numReqAt = childAttParts[idx].substring(0,noReqPos);
childAttParts[idx] = childAttParts[idx].substring(noReqPos+1);
childAttParts[idx] = trimString(childAttParts[idx]);
var atrObjParsed = parseAttribute(childAttParts[idx]);
if (atrObjParsed) {
var childReq = InteractAPI.OfferAttributeRequirements.create
(parseInt(numReqAt), [atrObjParsed], null);
childAttributes.push(childReq);
}
}
}
return InteractAPI.OfferAttributeRequirements.create(parseInt(numRequested),
attributes, childAttributes);
}
function parseAttribute(attStr) {
attStr = trimString(attStr);
if (!attStr || attStr==="")
return null;
var pos1 = attStr.indexOf("=");
var pos2 = attStr.indexOf("|");
var nvp = InteractAPI.NameValuePair.create
( attStr.substring(0,pos1),
attStr.substring(pos1+1, pos2),
attStr.substring(pos2+1));
return nvp;
}
function callSetAudience(commandsToExecute, callback) {
if (!document.getElementById('checkSetAudience').checked)
return ;
var ssId = document.getElementById('sa_sessionId').value;
var audId = document.getElementById('sa_audienceId').value;
var audLevel = document.getElementById('sa_audienceLevel').value;
var params = document.getElementById('sa_parameters').value;
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createSetAudienceCmd
(getNameValuePairs(audId), audLevel, getNameValuePairs(params)));
}
else {
InteractAPI.setAudience(ssId, getNameValuePairs(audId),
audLevel, getNameValuePairs(params),
callback);
}
}
function callGetProfile(commandsToExecute, callback) {
var ssId = document.getElementById('gp_sessionId').value;
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createGetProfileCmd());
}
else {
InteractAPI.getProfile(ssId, callback);
}
}
function callEndSession(commandsToExecute, callback) {
var ssId = document.getElementById('es_sessionId').value;
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createEndSessionCmd());
}
else {
InteractAPI.endSession(ssId, callback);
}
}
function callSetDebug(commandsToExecute, callback) {
var ssId = document.getElementById('sd_sessionId').value;
var isDebug = document.getElementById('isDebug').value;
if (commandsToExecute && !commandsToExecute.ssid) {
commandsToExecute.ssid = ssId;
}
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createSetDebugCmd(isDebug));
}
else {
InteractAPI.setDebug(ssId, isDebug, callback);
}
}
function callGetVersion(commandsToExecute, callback) {
if (commandsToExecute && commandsToExecute.commands) {
commandsToExecute.commands.push(InteractAPI.CommandUtil.
createGetVersionCmd());
}
else {
InteractAPI.getVersion(callback);
}
}
function callExecuteBatch(commandsToExecute, callback) {
if (!commandsToExecute)
return ;
InteractAPI.executeBatch(commandsToExecute.ssid,
commandsToExecute.commands, callback);
}
function getNameValuePairs(parameters) {
if (parameters === '')
return null ;
var parts = parameters.split(';');
var nvpArray = new Array(parts.length);
for(i = 0; i < parts.length; i += 1) {
var nvp = parts[i].split(',') ;
var value = null;
if (nvp[2]===InteractAPI.NameValuePair.prototype.TypeEnum.NUMERIC) {
if (isNaN(nvp[1])) {
value = nvp[1]; //a non number was provided as number,
pass it to API as it is
}
else {
value = Number(nvp[1]);
}
}
else {
value = nvp[1];
}
//special handling NULL value
if (value && typeof value === 'string') {
if (value.toUpperCase() === 'NULL') {
value = null;
}
}
nvpArray[i] = InteractAPI.NameValuePair.create(nvp[0], value, nvp[2]) ;
}
return nvpArray;
}
function showResponse(textDisplay) {
var newWin = open('','Response','height=300,width=300,titlebar=no,
scrollbars=yes,toolbar=no,
resizable=yes,menubar=no,location=no,status=no');
if (newWin.locationbar !== 'undefined' && newWin.locationbar
&& newWin.locationbar.visible)
newWin.locationbar.visible = false;
var displayHTML = '<META HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=UTF-8">
<html><head><style>TD { border-width : thin; border-style : solid }</style.'
+ "<script language='Javascript'>"
+ "var desiredDomain = 'unicacorp.com'; "
+ "if (location.href.indexOf(desiredDomain)>=0) "
+ "{ document.domain = desiredDomain;} "
+ "</script></head><body> "
+ textDisplay
+ "</body></html>" ;
newWin.document.body.innerHTML = displayHTML;
newWin.focus() ;
}
function onSuccess(response) {
showResponse("********Response********<br> " + JSON.stringify(response)) ;
}
function onError(response) {
showResponse("********Error********<br> " + response) ;
}
function formatResoponse(response) {
}
function printBatchResponse(batResponse) {
}
function printResponse(response) {
}