Logo

JavaScript

JavaScript #

El siguiente documento describe la estrategia de integración utilizando Javascript.

Esta estrategia es la indicada para todos los casos donde se integren aplicaciones web, tanto en desktop como mobile, así como para soluciones mobile desarrolladas utilizando frameworks con soporte Javascript, como ser Phonegap/Cordova, Titanium y otras.

Utilizando este SDK, no es necesario ningún mecanismo extra de integración o invocación a web services para lograr el acople de los canales web.

Instalando la librería #

Para comenzar a utilizar la librería en un entorno web, se debe insertar el siguiente código dentro del tag <body> de su HTML:

<script type='text/javascript' src='http://SERVER:PORT/sdk/javascript/prisma.js'></script>
<script type = "text/javascript" >
    prisma.load(SERVER, PORT, APP_TOKEN, CUSTOMER_ID, integrations, protocol, options);
</script>

Asegúrese de reemplazar las variables SERVER, PORT, APP_TOKEN y CUSTOMER_ID para que correspondan con su instalación.

Para obtener los parametros server, port y app_token debe dirigirse a la sección Settings/Applications del producto:

Si en esta pantalla se selecciona el canal a integrar, es posible desplegar el snippet de código con los valores pre-cargados.

Recuerde que los parámetros customer_id y el vector de integraciones son responsabilidad de quien integra.

Nota: Este código cargará la librería de forma asincrónica, por lo que el sitio cargará rapidamente a pesar de la dependencia.

Parametrización #

load(server, port, app_token, customer_id, placeholders_vector)
ParámetroTipo de datoRequerido?descripción
serverstringsiDirección del server donde se encuentra la,plataforma de campañas.
portstringsiPuerto de acceso donde se encuentra la plataforma de campañas.
app_tokenstringsiEl token de acceso para la aplicación,siendo integrada.
customer_idstringsiEl cliente identificado en caso que este,se encuentre disponible.
integrationsvectorsiVector conteniendo el conjunto de placeholders a integrar en la página actual.
protocolstringno“http:” o “https:” dependiendo si se cuenta o no con acceso vía SSL.
optionsstringnoParámetros opcionales de configuración de la integración, callbacks y otros elementos.

Placeholders a integrar #

El vector integrations de la función load describe los distintos placeholders a integrar en la página que se está insertando el snippet de integración.

A continuación se describen las distintas claves soportadas por cada elemento de dicho vector.

ClaveTipo de datoRequerido?Descripción
placeholderIdstringsiEl identificador de placeholder según esté configurado en la plataforma de campañas.
elemendIdstringsiIdentificador html donde se cargarán los banners para el placeholder.
unrolledbooleannoIndica en caso que el placeholder soporte varias campañas que se debe desplegar desenrollado. O sea todas las campañas que califican para el placeholder se mostrarán de manera simultánea y no en modo carrusel. Por defecto este valor es false
fallbackUrlstringnoUrl completa de acceso a imágen que se,desea utilizar en caso que la plataforma,de campañas no este disponible.
contextObjectnoContexto particular de integración del placeholder que sirve para seleccionar las campañas que califican filtrando según este contexto.
isolatedbooleannoPara los casos de banners HTML donde el estilo pueda verse afectado, indica que se desea desplegar el banner en un iframe aislado. El valor por defecto es true

En el código de ejemplo a continuación, se realiza una inicialización parametrizada con tres placeholders diferentes integrados.

<script type='text/javascript'>
   prisma.load('localhost', '443', '8e2626da-4ee1-45c7-b269-50df530dbc6e',
      "137-W", [{placeholderId : "MainHomeBanner",
                 elementId : "banner_flash",},
                {placeholderId: "RightHomeBanner",
                 elementId: "banner_right"},
                {placeholderId : "LeftHomeBanner",
                 elementId : "banner_left"}],
                 "https:");
 </script>

En este otro ejemplo, se integra un solo placeholder en modo carousel desenrrollado y utilizando contexto de filtrado.

<script type='text/javascript'>
   prisma.load('localhost', '443', '8e2626da-4ee1-45c7-b269-50df530dbc6e',
      "137-W", [{placeholderId : "PromocionesHome",
                       context : {"productId" : "1234"},
                 unrolled : true,
                 elementId : "promo_list",}
                 "https:");
 </script>

Nota: En los ejemplos se utiliza el valor fijo 137-W como identificador de cliente, para realizar la integración este valor debe ser cargado de forma dinámica según el usuario autenticado.

Parámetros opcionales #

Es posible proveer un parametro con distintas opciones a la integración. El listado de propiedades se detalla a continuación:

ClaveTipo de datoRequerido?Descripción
onLoadedfunctionnoCallback, será llamado una vez finalice la inicialización Ver más detalles
onLoadFailedfunctionnoCallback, será llamado si hay algún error en la inicialización. Ver más detalles
onRedirectfunctionnoCallback, será llamado en caso de que haya una redirección en el funnel de conversión. Ver más detalles
onPopupfunctionnoCallback, permite controlar el despliegue de popups. Ver más detalles
storageTypestringnoDetermina que tipo de storage será utilizado para almacenar información de la navegación, opciones: "local", "cookies". En caso de no proveer un valor se utilizarán cookies
reloadPopupsOnResetbooleannoDetermina si los popups se mostraran nuevamente una vez se recargue la integración (con una conversión por ejemplo). El valor por defecto es: false
languagestringnoDetermina el lenguaje a utilizar para la internacionalización de los textos en la integración. El valor por defecto es: "es"
useTranslatorbooleannoDetermina si se realizará la internacionalización de los textos en la integración. El valor por defecto es: true
channelstringnoDetermina el canal que se está integrando. Los valores disponibles son: web, mobile, mail, facebook, twitter, atm, referral, business-event y sms. El valor por defecto es: web
platformstringnoDetermina la plataforma que se está ejecutando la integración. El valor por defecto el nombre del navegador. (ej : chrome, firefox,etc)

Callback de finalización de carga #

En el caso que se desee controlar cuando finaliza la carga en la integración se puede utilizar el callback onLoaded del SDK.

Realizando la invocación como se indica a continuación:

<div id="container"></div>

<script type='text/javascript'>
var onLoaded = function(banners) {
    console.log("Successfully loaded Prisma Campaigns");
};

prisma.load(
    'campaigns.bank.com',
    '80',
    '8e2626da-4ee1-45c7-b269-50df530dbc6e',
    '137-W',
    [{'placeholderId': 'MainBanner', 'elementId': 'container'}],
    'http:',
    {onLoaded: onLoaded}
);
</script>

En el parámetro options del método load del SDK, se debe indicar un callback onLoaded, que será invocado por la plataforma una vez finalice la carga de la integración.

El callback onLoaded, recibirá como parámetro los banners que fueron obtenidos para el cliente.

Callback de error en la carga #

En el caso que se desee controlar cuando hay un error en la inicialización de la integración se puede utilizar el callback onLoadFailed del SDK.

Realizando la invocación como se indica a continuación:

<div id="container"></div>

<script type='text/javascript'>
var onLoadFailed = function(error) {
    console.log("There has been an error initializing the integration with Prisma Campaigns");
};

prisma.load(
    'campaigns.bank.com',
    '80',
    '8e2626da-4ee1-45c7-b269-50df530dbc6e',
    '137-W',
    [{'placeholderId': 'MainBanner', 'elementId': 'container'}],
    'http:',
    {onLoadFailed: onLoadFailed}
);
</script>

En el parámetro options del método load del SDK, se debe indicar un callback onLoadFailed, que será invocado si hay algún error en la carga.

El callback onLoadFailed, recibirá como parámetro de forma opcional el error de la carga con los siguientes atributos:

clavetipo de datoopcional?descripción
datastringnoEl identificador de placeholder según esté configurado en la plataforma de campañas.
statusstringnoIdentificador html donde se cargarán los banners para el placeholder.

Callback de redirección #

En el caso que se desee controlar cuando hay una redirección a otro sitio como parte de un funnel de conversión se puede utilizar el callback onRedirect del SDK.

Realizando la invocación como se indica a continuación:

<div id="container"></div>

<script type='text/javascript'>
var onRedirect = function(url) {
    console.log("You will be redirected to the website" + url);
};

prisma.load(
    'campaigns.bank.com',
    '80', '8e2626da-4ee1-45c7-b269-50df530dbc6e',
    '137-W',
    [{'placeholderId': 'MainBanner', 'elementId': 'container'}],
    'http:',
    {onRedirect: onRedirect}
);
</script>

En el parámetro options del método load del SDK, se debe indicar un callback onRedirect, que será invocado por la plataforma cuando se ejecute un paso de redirección.

El callback onRedirect, recibirá como parámetro con la URL configurada.

Ejemplos #

Para los ejemplos que siguen se asumen los siguientes parámetros de configuración:

ParámetroValor
servercampaigns.bank.com
port80
app_token175b18e2-08f2-43c2-953a-91f370a0fe23

Acceso público, sin identificar #

El siguiente ejemplo demuestra un sitio público con el cliente sin identificar donde existe un solo placeholder disponible.

En este caso el identificador del placeholder en el sistema es Portal - Main Banner y el nodo html donde se desea desplegar la imagen tiene como identificador mainbanner.

<script type='text/javascript' src='http://campaigns.bank.com:80/sdk/javascript/prisma.js'></script>
<script type = "text/javascript" >
      prisma.load("campaigns.bank.com", "80",
            "175b18e2-08f2-43c2-953a-91f370a0fe23",
            "",
            [{placeholderId : "Portal - Main Banner",
              elementId : "mainbanner",}]);
</script>

Como se observa al no tener cliente identificado el parámetro customer_id se envía vacío.

Asumimos que para el nodo mainbanner no hay restricciones de la etiqueta html a utilizar, pero típicamente serán div:

<div id="mainbanner"></div>

Acceso identificado #

En el caso donde la persona navegando el sitio es un cliente identificado, se debe utilizar el parámetro customer_id de la función load.

<script type='text/javascript' src='http://campaigns.bank.com:80/sdk/javascript/prisma.js'></script>
<script type = "text/javascript" >
    prisma.load("campaigns.bank.com", "80",
          "175b18e2-08f2-43c2-953a-91f370a0fe23",
           session.customer_id,
          [{placeholderId : "Position - Left",
            elementId : "left_banner"}
{placeholderId : "Position - Right",
            elementId : "right_banner"}]);
</script>

En este caso se asume que el identificador de cliente a utilizar se encuentra disponible en el valor session.customer_id. A su vez en este caso tenemos dos placeholders diferentes para cargar imágenes.

<div id="left_banner"></div>
<div id="right_banner"></div>

Lista de Campañas #

En los casos donde no se desee integrar un placeholder específico, es posible obtener todas las campañas que tiene activas un cliente dado.

activeCampaigns(customerId, category, group, fnResults)
ParámetroTipo de datoRequerido?Descripción
customerIdstringSiIdentificador de cliente para el cuál se desea consultar la lista de campañas, en caso de buscar campañas sin identificar debe enviarse vacío “”.
categorystringNoNombre de la categoría de campañas a buscar, parámetro opcional que sirve de filtrado.
groupstringNoNombre del grupo de campañas a buscar, parámetro opcional que sirve de filtrado.
fnResultsfunctionNoFunción a ser invocada de manera asincrónica al obtener los resultados.

Esta función debe invocarse luego de haber realizado el load de la librería como se describe en los apartados superiores.

La función fnResults recibe la lista de campañas conteniendo la siguiente información: name, category, group, customOffer y funnelUrl.

prisma.client.activeCampaigns("137-W", "Sales","Mortgages",
    function (campaigns) {
        for (var i = 0 ; i < campaigns.length; i++) {
            console.log(campaigns[i].name);
        }
    });

Siendo posible iniciar el funnel de conversión a partir de una de las campañas encontradas con la función startFunnel, que inicia el proceso de conversión en una nueva ventana.

En el ejemplo que sigue se buscan las campañas de ventas hipotecarias, y para la más prioritaria que tenga definido el campo tasaHipotecaria se comienza el proceso de conversión.

prisma.client.activeCampaigns("137-W", "Sales","Mortgages",
             function (campaigns) {
               for (var i = 0 ; i < campaigns.length; i++) {
                    if (campaigns[i].customOffer.loanRate != undefined) {
                        campaigns[i].startFunnel();
                    break;
                       }
                  }
             });

Carrusel personalizado #

Cuando se desee crear los banners utilizando algún control o componente a medida, diferente al que provee el SDK. Esto es posible utilizando el evento onLoaded del SDK.

Hay dos puntos a considerar cuando queremos este comportamiento:

  1. El elementId que indica el lugar donde crear el banner automáticamente debe estar en null
  2. La funcion onLoaded recibe la lista de banners descargados.

La lista de banners devuelta es un diccionario, donde cada clave es el identificador de placeholder.

A su vez, cada valor de retorno contiene una lista posible de imágenes, en caso que más de una campaña coincida. Esta lista de coincidencias se encuentra en el atributo images de cada banner.

Luego, utilizando el método show se puede colgar el banner o imagen de cualquier elemento de la página que se desee.

En este ejemplo, se crea un elemento en la página llamado my-parent, en donde se cargan todas las imágenes o banners html recibidos para el placeholder de nombre “MainBanner”.

<div id="my-parent"></div>

<script type='text/javascript'>
var onLoaded = function(banners) {
    var carouselParent = document.getElementById("my-parent");
    var prisma = this;
          var banner = banners["MainBanner"];
          for (var i = 0; i < banner.images.length; i++) {
              var image = banner.images[i];
              image.show(carouselParent);
          }
};

prisma.load('campaigns.bank.com', '80', '8e2626da-4ee1-45c7-b269-50df530dbc6e',
"137-W", [{"placeholderId" : "MainBanner",
                      "elementId" : null},],
           "http:", {onLoaded : onLoaded});
</script>

Popups personalizados #

En el caso que se desee controlar el despliegue de Popups desde la aplicación a integrar, esto es posible utilizando el callback onPopup del SDK.

Realizando la invocación como se indica a continuación:

<div id="my-parent"></div>

<script type='text/javascript'>
var onPopup = function(popup) {
    if (popup.banner.category == "Sales") {
        //display a personalized popup
        //return true to indicate
        //popup was resolved personalized
        return true;
    }
};

prisma.load('campaigns.bank.com', '80', '8e2626da-4ee1-45c7-b269-50df530dbc6e',
"137-W", [{"placeholderId" : "MainBanner",
                      "elementId" : null},],
           "http:", {onPopup : onPopup});
      </script>

En el parámetro options del método load del SDK, se debe indicar un callback onPopup, que será invocado por la plataforma siempre que entre la lista de campañas que califican para el usuario actual, haya un popup que desplegar.

El callback onPopup, recibirá como parámetro el popup a desplegar, con los siguientes atributos:

onPopup(popup)
ParámetroTipo de datoRequerido?Descripción
widthlongSiAncho del placeholder configurado.
heightstringSiAlto del placeholder configurado.
bannerBannerSiConfiguración del banner a desplegar en el popup.
hideClosebooleanSiIndica si se debe ocultar el botón de close del popup, según configuración en la plataforma.
dismissFnfunctionNoEn el caso que la campaña asociada al popup permita realizar el dismiss, está es la función a invocar cuando se quiere realizar el dismiss correspondiente.

El parámetro banner tiene distintos atributos dependiendo si es un banner imagen o un banner html. Esto permite, utilizando el contenido referenciado, utilizarlo para desplegar el popup de forma personalizada según los requerimientos de la aplicación.

BannerHTML()
ParámetroTipo de datoRequerido?Descripción
widthlongSiAncho del placeholder configurado.
heightstringSiAlto del placeholder configurado.
categorystringSiNombre de la categoría de la campaña asociada al banner, string vacío en caso que no exista.
groupstringSiNombre del grupo de la campaña asociada al banner, string vacío en caso que no exista.
FunnelfunnelSiConfiguración del funnel asociado a la campaña
isolatedbooleanSiIndica si el popup se solicito en modo aislado.
contentstringSiContenido HTML del banner a ser desplegado
BannerImage()
ParámetroTipo de datoRequerido?Descripción
widthlongSiAncho del placeholder configurado.
heightstringSiAlto del placeholder configurado.
categorystringSiNombre de la categoría de la campaña asociada al banner, string vacío en caso que no exista.
groupstringSiNombre del grupo de la campaña asociada al banner, string vacío en caso que no exista.
FunnelfunnelSiConfiguración del funnel asociado a la campaña
linkstringSiLink a la imagen a desplegar para el banner.

Conversión #

Marcar la conversión de un cliente en una campaña.

<script type='text/javascript' src='http://SERVER:PORT/sdk/javascript/prisma.js'></script>
<script type = "text/javascript" >
    prisma.convert(server, port, app_token, protocol, campaignId)
</script>
ParámetroTipo de datoRequerido?descripción
serverstringsiDirección del server donde se encuentra la,plataforma de campañas.
portstringsiPuerto de acceso donde se encuentra la,plataforma de campañas.
app_tokenstringsiEl token de acceso para la aplicación,siendo integrada.
protocolstringsi“http:” o “https:” dependiendo si se cuenta o no con acceso vía SSL.
campaignIdstringsiIdentificador de la campaña.
callbackfunctionnoFunción a ejecutar una vez que finaliza la conversión. Debe recibir un parámetro, que será la respuesta del api.

El parámetro campaignId se obtiene como parte de la URL utilizada en el redirect que lleva al sitio en el cual se realiza la integración con Prisma Campaigns.

  • El camino usual es hacer un redirect desde un paso del funnel de Prisma Campaigns hacia una herramienta externa (una aplicación Web).
  • En el redirect se envían 3 parámetros (en el query string): campaign-id, trail-id, funnel-node-id.

Estos parámetros pueden obtenerse con código en el backend de la solución o con código javascript en el navegador:

<script type = "text/javascript" >
    function getParameterByName(name, url) {
        if (!url) url = window.location.href;
        name = name.replace(/[\[\]]/g, "\\$&");
        var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
            results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, " "));
    }
</script>

Cordova #

Para desplegar banners HTML en una app construida sobre Cordova, una de estas opciones es necesaria:

  • Establecer isolated = false para el placeholder, para que el banner no sea creado dentro de un iframe (ver Placeholders a integrar).
  • Agregar la regla <allow-navigation href="about:" /> o <allow-navigation href="*" /> al config.xml de Cordova, para que el iframe del banner sea cargado.