Eventos de cámara en Google Sheets a través de Google Scripts

Una de las grandes características de Camlytics Single es el soporte de webhooks para cualquier tipo de eventos de cámara. Por ejemplo, si estás realizando conteo de personas con una cámara web en dos de tus tiendas minoristas y deseas agregar todos los datos de conteo en una hoja de cálculo en la nube para un acceso sencillo y gráficos personalizados, puedes hacerlo fácilmente con los webhooks de Camlytics y Google Sheets.

Para automatizar el envío de datos a tu hoja de cálculo de Google, completa los encabezados de las columnas con los nombres exactos de los campos para el ejemplo inmediato de webhook de evento (channel_id, channel_name, event_name, event_origin, event_time, event_type, object_id, rule_id, rule_name) y haz clic en Extensiones > Apps Script. Serás redirigido a una página de Google Script. Copia y pega el script de ejemplo a continuación en el editor de scripts.

function doPost(request){
  return handleResponse(request);
}
	
// How to use
//  1. Enter sheet name where data is to be written below
        var SHEET_NAME = "Sheet1";
        
//  2. Run > setup
//
//  3. Publish > Deploy as web app 
//    - enter Project Version name and click 'Save New Version' 
//    - set security level and enable service (most likely execute as 'me' and access 'anyone, even anonymously) 
//
//  4. Copy the 'Current web app URL' and post this in your Camlytics webhook URL
//
//  5. Insert column names on your destination sheet matching the parameter names of the data you are passing in (exactly matching case)
	
var SCRIPT_PROP = PropertiesService.getScriptProperties();
	
function handleResponse(request) {
  var lock = LockService.getPublicLock();
  lock.waitLock(1000);
  
  try {
    var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
    var sheet = doc.getSheetByName(SHEET_NAME);
    
    var headRow = 1;
    
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow() + 1;
    var row = []; 
    var postData = JSON.parse(request.postData.getDataAsString());
    
    for (i in headers){
        row.push(postData[headers[i]]);
    }
    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);    
    return ContentService
          .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
          .setMimeType(ContentService.MimeType.JSON);
  } catch(e){
    return ContentService
    .createTextOutput(JSON.stringify({"result":"error", "error": e }))
          .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
}
	
function setup() {
    var doc = SpreadsheetApp.getActiveSpreadsheet();
    SCRIPT_PROP.setProperty("key", doc.getId());
}

Al final, recibirás la URL del script de producción que insertarás en la configuración de eventos de Camlytics en este formato (la URL será diferente en tu caso): https://script.google.com/macros/s/a-KfycbwRo7VDNXQSCjplDsj43Y7ev-XioFNvy_bQsNNnofPJ4-1bA52c67/exec

Ejemplo de la salida en la hoja de cálculo de Google que recibirás cuando se generen eventos:

camlytics google sheets

Puedes obtener más información sobre cómo configurar el script aquí.

Si deseas obtener los recuentos de eventos agregados (por ejemplo, cuántas personas cruzaron la Línea 1 en la última hora o en el último día), el siguiente código insertará una nueva hoja en cada llamada (cada hora o cada día).

function doPost(request){
  return handleResponse(request);
}
	
// How to use
       
//  1. Run > setup
//
//  2. Publish > Deploy as web app 
//    - enter Project Version name and click 'Save New Version' 
//    - set security level and enable service (most likely execute as 'me' and access 'anyone, even anonymously) 
//
//  3. Copy the 'Current web app URL' and post this in your Camlytics webhook URL
	
var SHEET_NAME = (new Date()).toLocaleDateString() + ' ' + (new Date()).toLocaleTimeString();
SpreadsheetApp.getActiveSpreadsheet().insertSheet(SHEET_NAME);
var SCRIPT_PROP = PropertiesService.getScriptProperties();
	
function handleResponse(request) {
  var lock = LockService.getPublicLock();
  lock.waitLock(1000);
  
  try {
    var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
    var sheet = doc.getSheetByName(SHEET_NAME);
    
    var headRow = 1;
    
    var headers = ["rule_name", "event_count"];
    var nextRow = sheet.getLastRow() + 1;
    var row = ["Source name", "Event count"]; 
    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
    var nextRow = sheet.getLastRow() + 1;
    row = [];
    
    var postData = JSON.parse(request.postData.getDataAsString());
    
    for (j in postData["rule_id_aggregate"]){
      for (i in headers){
        row.push(postData["rule_id_aggregate"][j][headers[i]]);
      }
      sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
      var nextRow = sheet.getLastRow() + 1;
      row = [];
    }
    
    return ContentService
          .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
          .setMimeType(ContentService.MimeType.JSON);
  } catch(e){
    return ContentService
    .createTextOutput(JSON.stringify({"result":"error", "error": e }))
          .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
}
	
function setup() {
    var doc = SpreadsheetApp.getActiveSpreadsheet();
    SCRIPT_PROP.setProperty("key", doc.getId());
}	

Ejemplo de la salida en la hoja de cálculo de Google que recibirás cuando se generen eventos:

camlytics google sheets

Si tienes dificultades para configurar Google Script, puedes consultar un método más sencillo, utilizando Google Forms.

Descargar Camlytics Single
Visita nuestro Canal de YouTube, donde encontrarás muchas demostraciones reales de análisis de video.

Nuestros clientes