API REST #
El API Rest provee un mecanismo de integración para aquellos casos donde no existe un SDK Nativo que permita integrarse con la plataforma de Marketing Automation.
En todos los casos las APIs soportan el formato EDN, que cuenta con ventajas relativas a JSON ya que admite distintos tipos de datos evitando tener que transmitir la información siempre codificada como string.
En caso que se desee utilizar JSON como formato de serialización se debe especificar los encabezados HTTP Content-Type
y Accept
con el valor application/json
.
Trazas #
El API de trazas provee un mecanismo genérico de trazabilidad sin importar el tipo de acción o plataforma donde esta ocurre. Como tal, no asume ningún tipo de capacidad del canal para persistir los identificadores de sesión -por ejemplo cookies-, debiendo cada usuario del API Rest resolver de forma independiente la persistencia y asociación de dicha información.
Para los casos donde si se cuenta con dicha disponibilidad (navegadores de Internet, por ejemplo), se recomienda utilizar el SDK nativo existente.
Traza #
Los clientes interactúan con la plataforma en distintas sesiones, o interacciones que denominamos visitas (trails), las trazas son agrupadores para estas visitas. En el caso más común, antes de convertir un cliente interactúa varias veces con distintas secciones del sitio web, la aplicación móvil u otro canal.
Antes de crear una nueva visita (trail) está debe pertenecer a una traza, por lo que si no existe la traza hay que crearla. La traza debe generarse o bien la primera vez que un usuario visita o entra a la aplicación, o bien cuando se quiere dar por cerrada una traza anterior quizás porque el usuario ya convirtió en otra promoción.
url | method | data |
---|---|---|
/api/traces/trace | POST | EDN o JSON |
El formato de la información posteada es un objeto EDN o JSON con dos campos, ambos opcionales.
data = {
:app-token "D17C100F-0668-400A-AF91-967FE1A09A9E"
:customer-id "5114932"
}
data = {
"app-token": "D17C100F-0668-400A-AF91-967FE1A09A9E",
"customer-id": "5114932"
}
Parámetro | Descripción |
---|---|
app-token | Identificador de aplicación integrada realizando el request de notificaciones |
customer-id | Identificador de cliente iniciando la traza |
El parámetro customer-id
puede estar vacío si la persona interactuando no está identificada, escenario en el cuál el sistema creará un identificador de cliente anónimo para esta interacción.
La respuesta es un objeto EDN o JSON con el identificador de traza generado, este identificador de traza debe ser utilizado luego en cada nueva visita para mantenerlas asociadas. En caso que la traza se genere con un identificador de cliente anónimo, este será retornado como parte del resultado.
response = {
:trace-id "D17C100F-0668-400A-AF91-967FE1A09A9E"
:customer-id "5114932"
}
response = {
"trace-id": "D17C100F-0668-400A-AF91-967FE1A09A9E",
"customer-id": "5114932"
}
El resultado de la operación está dado por uno de los siguientes códigos de estado HTTP.
Código | Descripción |
---|---|
200 | La operación fue completada con éxito |
500 | No se pudo crear la traza |
Visita #
Una nueva visita debe generarse cada vez que un usuario visita el sitio web o abre la aplicación móvil (o utiliza de alguna otra forma un canal alternativo).
url | method | :trace-id | data |
---|---|---|---|
/api/traces/:trace-id/trail | POST | Identificador de traza a la cual asociar esta visita | EDN o JSON |
El formato de la información posteada es un objeto EDN o JSON con tres campos, donde dos de ellos (platform
y language
) son opcionales.
data = {
:language "en-US"
:platform "Chrome Browser"
:channel: :atm
}
data = {
"language": "en-US",
"platform": "Chrome Browser",
"channel": "atm"
}
Parámetro | Descripción |
---|---|
language | Lenguaje del dispositivo utilizado para realizar la visita |
platform | Plataforma utilizada para realizar la visita |
channel | El canal utilizado para la visita |
La respuesta es un objeto EDN o JSON con el identificador de visita generado, el cual deberá ser usado en las subsecuentes acciones generadas dentro de esta visita.
response = {
:trail-id "D17C100F-0668-400A-AF91-967FE1A09A9E"
}
response = {
"trail-id": "D17C100F-0668-400A-AF91-967FE1A09A9E"
}
El resultado de la operación está dado por uno de los siguientes códigos de respuesta HTTP:
Código | Descripción |
---|---|
200 | La operación fue completada con éxito |
500 | No se pudo crear la visita |
Actividad #
Como se mencionó en el documento de primeros pasos, una actividad realizada dentro de una visita puede ser de distinto tipo:
Tipo | Descripción |
---|---|
location | Visita a una página o pantalla |
action | Una acción iniciada por el usuario, ejemplo botón |
conversion | El usuario finalizó con éxito |
dismiss | El usuario indica que no le interesa |
entry-point | El usuario inicia un funnel de conversión |
funnel-step | El usuario avanza un paso en un funnel de conversión |
event | Eventos no generados por el usuario |
La ejecución se realiza mediante el api action
y el formato de la información posteada es un objeto EDN o JSON:
url | method | :trace-id | data |
---|---|---|---|
/api/traces/trail/:trail-id/action | POST | Identificador de traza a la cual asociar esta acción | EDN o JSON |
data = {
:name "conversion"
:type :trail-action/conversion
:data [
{
:name "field1"
:value "value1"
}
{
:name "field2"
:value "value2"
}
]
}
data = {
"name": "conversion",
"type": "conversion",
"data": [
{
"name": "field1",
"value": "value1"
},
{
"name": "field2"
"value": "value2"
}
]
}
Parámetro | Descripción |
---|---|
name | Nombre de la actividad, tiene relación directa con el tipo de acción |
type | Uno de los tipos de actividad descriptos anteriormente, debe ser un keyword de la forma :trail-action/type |
data | Datos asociados a la acción que se quieran persistir |
El resultado de la operación está dado por uno de los códigos de estado HTTP que aparecen a continuación:
Código | Descripción |
---|---|
200 | La operación fue completada con éxito |
500 | No se pudo crear la actividad |
Conversión y No interés #
Mediante el uso del API action
es posible indicar cuando un cliente convierte o marca su falta de interés en una campaña. Para esto cada acción tiene su tipo correspondiente, y el único parámetro requerido a enviar es el tracking-token
obtenido previamente en el canal.
EDN:
Se debe enviar la información que se indica debajo. En el caso de JSON, el tipo de acción se debe enviar sin prefijo.
data = {
:name "conversion"
:type :trail-action/conversion
:data [{:name "tracking-token" :value "value"}]
}
data = {
:name "dismiss"
:type :trail-action/dismiss
:data [{:name "tracking-token" :value "valor"}]
}
data = {
"name": "conversion",
"type": "conversion",
"data": [{"name": "tracking-token", "value": "value"}]
}
data = {
"name": "dismiss",
"type": "dismiss",
"data": [{"name": "tracking-token", "value": "value"}]
}
IMPORTANTE: Una vez que se invoca
conversion
odismiss
en una traza, esta no puede ser utilizada nuevamente y debe crearse una nueva para marcar siguientes acciones, visitas y sincronizaciones. En caso de que se intente seguir utilizando la misma traza se obtendrá un error400
de solicitud inválida.
Campañas #
Funcionalidades de campañas.
Campañas Activas #
Este API permite obtener todas las campañas que tiene activas un cliente dado.
La ejecución es mediante el API:
url | method | data |
---|---|---|
/api/campaigns/active | POST | EDN |
El formato de la información posteada es un objeto EDN:
data = {
:app-token "D17C100F-0668-400A-AF91-967FE1A09A9E"
:customer-id "5114932"
:category "Sales"
:group "Cars"
:trail-id "882252f3-fe70-4402-9195-639d8037f339"
}
Parámetro | Descripción |
---|---|
app-token | Identificador de aplicación integrada realizando el request |
customer-id | Identificador del cliente en caso que este disponible |
category | Opcional Nombre de la categoría de campañas a buscar, parámetro opcional que sirve de filtrado |
group | Opcional Nombre del grupo de campañas a buscar, parámetro opcional que sirve de filtrado. |
trail-id | Identificador de visita asociado |
Banners y Popups #
Los banners y popups se obtienen como resultado de la sincronización de “páginas” o pantallas de aplicaciones. Cada vez que el usuario navega a una nueva página o pantalla se pueden recuperar varios banners juntos, o un popup para esa pantalla. Estas acciones se realizan invocando a una única API (sync-page
) que obtiene todos los elementos correspondientes a esa pantalla para el cliente.
url | method | data |
---|---|---|
/api/campaigns/sync-page | POST | EDN o JSON |
El formato de la información posteada es un objeto EDN o JSON:
data = {
:app-token "D17C100F-0668-400A-AF91-967FE1A09A9E"
:customer-id "5114932"
:trail-id "882252f3-fe70-4402-9195-639d8037f339"
:sync-popups true
:page-location "http://my.domain/page"
:placeholders [{:placeholder "id-placeholder1"} {:placeholder "id-placeholder2"}]
}
data = {
"app-token": "D17C100F-0668-400A-AF91-967FE1A09A9E",
"customer-id": "5114932",
"trail-id": "882252f3-fe70-4402-9195-639d8037f339",
"sync-popups": "true",
"page-location": "http://my.domain/page",
"placeholders": [{"placeholder": "id-placeholder1"}, {"placeholder": "id-placeholder2"}]
}
Parámetro | Descripción |
---|---|
app-token | Identificador de aplicación integrada realizando el request |
customer-id | Identificador del cliente en caso que este disponible |
placeholders | Lista de placeholders definidos en la página para los cuáles se desea recuperar los banners asociados. |
trail-id | Identificador de visita asociado |
page-location | Identificador de página o pantalla siendo visitada actualmente |
sync-popups | Valor booleano que indica si se desea o no recuperar popups para el page-location actual |
La respuesta es un objeto EDN o JSON conteniendo dos tipos de información:
- Los banners a desplegar en cada placeholder
- Información del Popup a desplegar en caso que corresponda.
response = {
:popup = {}
:placeholders = [{} {}]
}
response = {
"popup": {},
"placeholders": [{}, {}]
}
Popup #
La estructura de información del popup contiene los siguientes datos
popup = {
:tracking-token
:campaign
:show-close
:funnel
}
Respuesta | Descripción |
---|---|
tracking-token | Identificador de trazabilidad de la interacción |
campaign | Identificador de campaña |
show-close | Valor booleano que indica si se desea o no recuperar popups para el page-location actual |
funnel | Parámetros de configuración del funnel, vea “Detalle del funnel” más adelante en este documento |
Para desplegar el funnel correspondiente a este popup se debe utilizar la url conformada de la siguiente forma: /api/campaigns/:campaign/funnel?d=:tracking-token&a=:app-token&t=:trail-id&popup=true
Placeholders #
El atributo placeholders en la respuesta del api sync-page
, contiene el resultado de banners a desplegar en cada uno de los placeholders solicitados que contengan información. En caso que algún placeholder no tenga banners asociados a desplegar para el cliente identificado, no se devolverán resultados.
La estructura de respuesta para cada placeholder es la siguiente:
placeholder = {
:customer-id "5114932"
:banners-list [{b1} {b2}]
:is-popup false
:popup-timeout 1000
:transition-time 5000
:width 800
:height 600
}
Descripción del resultado:
Parámetro | Descripción |
---|---|
customer-id | Identificador del cliente, si el cliente era anónimo se retorna el identificador temporal creado. |
banners-list | Lista de banners asociados al placeholder, ver detalle de banner |
transition-time | Tiempo de transición entre imágenes si el placeholder se está desplegando en modo carrusel. |
is-popup | Valor booleano que indica si el banner se debe desplegar o no en un popup según la configuración. |
popup-timeout | Tiempo de timeout en el cuál se debe cerrar el popup en caso que el banner se este desplegando como tal. |
Detalle de banner:
Cada objeto de la lista banners-list
contiene el detalle de uno de los banners a desplegar para ese placeholder. En caso que exista más de uno, se podrán desplegar en distintos formatos: carrusel, grilla, etc.
El detalle de cada objeto banner retornado es el siguiente:
banner-detail = {
:banner {banner object}
:funnel {funnel object}
}
Descripción del objeto banner:
Parámetro | Descripción |
---|---|
width | Ancho definido del placeholder |
height | Alto definido del placeholder |
campaign | Identificador de la campaña para este banner |
tracking-token | Identificador de trazabilidad de la interacción |
link | Opcional,Link a la imagen en caso que el banner sea de imagen |
html-content | Opcional,Contenido html en caso que el banner sea del tipo html |
Descripción del objeto funnel:
Dentro del objeto funnel se encuentran propiedades relativas al proceso de conversión del usuario identificado, junto con los datos correspondientes al primer paso del funnel.
Parámetro | Descripción |
---|---|
style | Estilos particulares a aplicarle al funnel, en formato CSS |
allow-dismiss | Indica si esta campaña tiene activada la funcionalidad de permitir el “no me interesa” al usuario. |
landing-page | Indica si la campaña tiene definida landing page |
always-use-landing | Indica si se debe abrir siempre el funnel en la landing page |
show-progress-bar | Indica si se debe desplegar o no la barra de progreso del funnel |
new-widow | Indica si se debe desplegar o no el funnel en una ventana nueva |
Pasos del Funnel #
Para obtener los pasos definidos del funnel se utiliza advance-funnel
. Esta API obtiene los pasos de a uno, a medida que se van completando los pasos anteriores.
En la medida que el funnel puede tener bifurcaciones condicionadas en base a datos u otras parametrizaciones del usuario, recién al momento de completar un paso se puede determinar cuál paso siguiente corresponde. Esta es la razón por la que se debe utilizar este API tanto para obtener el primer paso del funnel cuando el usuario se interesa en una campaña, así como los pasos siguientes a medida que se va completando cada uno.
url | method | data |
---|---|---|
/api/campaigns/advance-funnel | POST | EDN o JSON |
El formato de la información posteada es un objeto EDN o JSON.
data = {
:trail-id "882252f3-fe70-4402-9195-639d8037f339"
:campaign-id 123123101
:tracking-token "12312-21919-j1b3-121m-1212"
:step-data {}
}
data = {
"trail-id": "882252f3-fe70-4402-9195-639d8037f339",
"campaign-id": "123123101",
"tracking-token": "12312-21919-j1b3-121m-1212",
"step-data": {}
}
Parámetro | Descripción |
---|---|
trail-id | Identificador de visita asociado |
campaign-id | Identificador de campaña a iniciar el funnel |
tracking-token | Identificador de trazabilidad de la interacción |
step-data | En caso que se este avanzando desde un paso anterior, mapa con información del paso |
Los parámetros campaign-id
y tracking-token
deben corresponder a la interacción que el usuario haya realizado, si por ejemplo clickeó en un banner, se debe enviar el dato campaign
y tracking-token
correspondiente a ese banner. Cuando el usuario inicia el funnel no se debe enviar el parámetro step-data
, mientras que en otros casos debe enviarse siempre así sea vacío para lograr avanzar en el funnel.
La estructura de respuesta es la siguiente:
response = {
:type data-capture | message | redirect
:config {}
}
Respuesta | Descripción |
---|---|
type | Tipo del paso a ejecutar |
config | Detalle de configuración del paso dependiendo de su tipo |
A continuación, se describe el detalle de configuración para cada tipo de paso a desplegar.
Paso Mensaje #
step = {
:title
:message
:actions
:remaining-steps
:max-steps
}
step = {
"title":
"message":
"actions":
"remaining-steps":
"max-steps":
}
Dato | Descripción |
---|---|
title | Título del mensaje |
message | Mensaje a desplegar |
actions | Lista de acciones disponibles en el paso: next, cancel, etc |
remaining-steps | Cuántos pasos quedan en el funnel |
max-steps | Máximos pasos en el funnel |
Paso Captura de Datos #
step = {
:fields
:actions
:remaining-steps
:max-steps
}
step = {
"fields":
"actions":
"remaining-steps":
"max-steps":
}
Dato | Descripción |
---|---|
fields | Lista de campos a capturar |
actions | Lista de acciones disponibles en el paso: next, cancel, etc |
remaining-steps | Cuántos pasos quedan en el funnel |
max-steps | Máximos pasos en el funnel |
La lista de campos indica que campos se le deben solicitar al cliente en este paso, y tiene la siguiente estructura para cada campo:
field = {
:label
:name
:control-type
:value
}
field = {
"label":
"name":
"control-type":
"value":
}
Dato | Descripción |
---|---|
label | Etiqueta a desplegar en la captura del campo |
name | Nombre del campo a capturar |
control-type | Tipo de control a utilizar para la captura del dato |
value | Valor actual del dato que ya tiene el cliente, en caso que tenga |
Cuando se solicita el siguiente paso con advance-funnel
, el step-data
debe contener los valores de los campos capturados utilizando name
como referencia.
Paso Redirect #
step = {
:url
:method
:parameters
:include-system-params
:new-window
}
step = {
"url":
"method":
"parameters":
"include-system-params":
"new-window":
}
Dato | Descripción |
---|---|
url | Url a donde realizar la redirección |
method | get o post, de acuerdo al tipo de redirección |
parameters | Lista de parámetros a ser enviados como parte del query string |
include-system-params | Booleano, indica si como parte del query string hay que enviar los parámetros del sistema campaign-id, trail-id y tracking-token |
new-window | Booleano, indica si el redirect se debe realizar en una nueva ventana |
Clientes #
Este API permite crear o actualizar la información de un cliente nuevo o existente a través de la URL que se indica a continuación:
url | method | data |
---|---|---|
/api/customers/ | POST | EDN o JSON |
El formato de la información posteada es un objeto EDN o JSON.
data = {
:customer {:id 12345 :field "xxyyzz"}
:app-token "882252f3-fe70-4402-9195-639d8037f339"
}
data = {
"customer": {"id": "12345", "field": "xxyyzz"},
"app-token": "882252f3-fe70-4402-9195-639d8037f339"
}
Parámetro | Descripción |
---|---|
app-token | Identificador de aplicación integrada realizando el request, debe ser una aplicación que tenga seleccionada la plataforma REST |
customer | Cliente a actualizar. El dato id es requerido, y el resto de los campos que se envíen deben existir en el schema definido y coincidir en el tipo de dato. |
El resultado de la operación está dado por uno de los siguientes códigos de estado HTTP:
Código | Descripción |
---|---|
200 | La operación fue completada con éxito |
404 | El token de aplicación es inválido |
400 | Hay errores en el tipo de datos enviados |
500 | No se pudo actualizar la base de datos |
Eventos de negocio #
Prisma permite disparar campañas a partir de los llamados “Eventos de Negocio” (Business Events). La naturaleza de cada evento de negocio es, por supuesto, particular para cada compañía.
Como los eventos de negocio se definen dentro del scope una aplicación (Settings/Applications), es de esperarse que se cree una aplicación (llamada, por ejemplo, Backend) sobre la cual dar de alta los eventos que se tiene previsto disparar. Cada evento de negocio tiene un nombre (único) y una descripción, y una vez creado, puede ser asignado a una campaña.
La interfaz de configuración se encuentra en Campaign Settings/Business Events. Se debe primero habilitar el canal Business Events para luego poder asignarle los mismos a la campaña. De ser necesario, para cada evento se puede aplicar un filtro que se suma al ya definido por el segmento de la campaña.
Cuando se dispara un evento mediante una solicitud del tipo POST
, se obtienen las campañas activas que lo tienen configurado y se aplica el filtro correspondiente. Luego, se aplica el algoritmo de orquestación de la compañía para seleccionar la mejor campaña para dicho evento y cliente.
url | method | data |
---|---|---|
/api/campaigns/business-event | POST | EDN or JSON |
Donde el cuerpo del request debe contener lo siguiente:
Data | Description |
---|---|
app-token | Token de la aplicación |
event-name | Nombre del evento de negocio |
customer-id | Identificador del cliente |
Un token de aplicación inválido o un evento inexistente generará un error 404
. Un identificador de cliente vacío resultará en un error 400
. Si no se encuentra un cliente con el identificador especificado, entonces se crea uno nuevo.
El campo customer-id
puede ser o bien un text representando el identificador de un cliente o una especificación de búsqueda, es decir: un objeto con parejas de clave-valor que representan los campos de búsqueda. Por ejemplo:
{
:app-token "882252f3-fe70-4402-9195-639d8037f339"
:event-name "newsletter-registration"
:customer-id {:email "jane.doe@example.com"}
}
{
"app-token": "882252f3-fe70-4402-9195-639d8037f339"
"event-name": "newsletter-registration",
"customer-id": {"email": "jane.doe@example.com"},
}
Si se especifica un campo que no existe en el esquema de clientes, se generará un error 400
. Si no se encuentra un cliente con los campos especificados, entonces se crea un cliente nuevo y dichos valores se asignan a los campos correspondientes.
El cuerpo del request también puede contener los siguientes datos opcionales:
Data | Description |
---|---|
context | Información adicional que se considere relevante |
force-funnel-restart? | Bandera booleana. Si vale ’true’, fuerza el reinicio del funnel para el cliente |
En caso de no encontrarse una campaña para el cliente y evento indicado el servidor responde 404 Not Found
. De lo contrario, devolverá 202 Accepted
y los siguientes valores:
Data | Description |
---|---|
campaign | Nombre de la campaña seleccionada |
trace-id | Id de la traza generada |
tracking-token | Id de tracking |
customer-id | Identificador del cliente |
Nota: El servidor responde EDN
o JSON
dependiendo del contenido de los headers Accept
o Content-Type
, donde este último es obligatorio. El campo customer-id
contiene el mismo valor que el campo customer-id
del request. Si el campo customer-id
del request es una especificación de búsqueda, entonces el campo customer-id
del response será el identificador del cliente correspondiente.