Created
September 30, 2014 13:33
-
-
Save pengelbrecht/6930fc5aa5836a1175d6 to your computer and use it in GitHub Desktop.
wise words...
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Global variables | |
var BASEURI = 'https://app.firmafon.dk/api/v1'; | |
var OPENTIME, CLOSETIME; | |
var SS = SpreadsheetApp.getActiveSpreadsheet(); | |
function readConfig() { | |
OPENTIME = new Date(); | |
OPENTIME.setHours(SS.getRangeByName("OpenHour").getValue()); | |
OPENTIME.setMinutes(SS.getRangeByName("OpenMinute").getValue()); | |
OPENTIME.setSeconds(0); | |
OPENTIME.setMilliseconds(0); | |
CLOSETIME = new Date(); | |
CLOSETIME.setHours(SS.getRangeByName("CloseHour").getValue()); | |
CLOSETIME.setMinutes(SS.getRangeByName("CloseMinute").getValue()); | |
CLOSETIME.setSeconds(0); | |
CLOSETIME.setMilliseconds(0); | |
} | |
function getIncomingCallStats(from, to, number, userKey) { | |
var thisCall, open; | |
var callTime = new Date(); | |
var fromstr = from.toISOString(); | |
var tostr = to.toISOString(); | |
var stats = new Object(); | |
var missed = 0, answered = 0, voicemail = 0, answeredDuration = 0, closed = 0; | |
var options = { | |
"method" : "get", | |
"headers" : {"Accept" : "application/json", "Firmafon-User-Key": userKey} | |
}; | |
var callLogParams = { | |
"number" : "45" + number, | |
"direction" : "incoming", | |
"from" : fromstr, | |
"to" : tostr, | |
"limit" : 999999 | |
} | |
var URL = BuildURL(BASEURI+"/call_logs", callLogParams); | |
var response = Utilities.jsonParse(UrlFetchApp.fetch(URL, options).getContentText()); | |
for (var i = 0; i < response.call_logs.length; i++) { | |
thisCall = response.call_logs[i]; | |
if (thisCall.direction != "incoming") continue; | |
callTime = getDateFromISOString(thisCall.started_at); | |
open = isOpen(callTime, OPENTIME, CLOSETIME) | |
if (!open) { | |
closed++; | |
continue; | |
} | |
if (thisCall.status == "answered") { | |
answered++; | |
answeredDuration += thisCall.duration; | |
} | |
if (thisCall.status == "missed") missed++; | |
if (thisCall.status == "voicemail") voicemail++; | |
} | |
stats.missed = missed; stats.answered = answered; stats.voicemail = voicemail; stats.answeredDurationMins = answeredDuration/60; stats.closed = closed, stats.open = answered+missed+voicemail; | |
stats.avgDurationMins = (answeredDuration/60)/answered; stats.answerRate = answered/stats.open; | |
if (answered == 0) stats.avgDurationMins = 0; | |
if (stats.open == 0) stats.answerRate = 0; | |
return(stats); | |
} | |
function loadHistorical() { | |
readConfig(); | |
var userKey = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("APIKey").getValue(); | |
var number = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Number").getValue().toString(); | |
var endDate = new Date(); | |
var days = 366; | |
var beginDate = new Date(endDate.getTime() - ((days - 1) * 24 * 60 * 60 * 1000)); | |
for (var i = 0; i < days; i++) { | |
from = new Date(beginDate.getTime() + (i * 24 * 60 * 60 * 1000)); | |
from.setHours(0); from.setMinutes(0); from.setSeconds(0), from.setMilliseconds(0); | |
to = new Date(from.getTime() + (24 * 60 * 60 * 1000)); | |
var stats = getIncomingCallStats(from, to, number, userKey) | |
var statsarr = objectToArray(stats); | |
statsarr.unshift(from); | |
prependRow(SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily Data"), statsarr) | |
} | |
} | |
function updateDaily() { | |
// Adds _yesterdays_ calls to 'Daily Data' sheet. To be triggered early am | |
readConfig(); | |
var userKey = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("APIKey").getValue(); | |
var number = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Number").getValue().toString(); | |
var from = new Date(); // today | |
from = new Date(from.getTime() - (24 * 60 * 60 * 1000)); // yesterday | |
from.setHours(0); from.setMinutes(0); from.setSeconds(0), from.setMilliseconds(0); | |
var to = new Date(from.getTime() + (24 * 60 * 60 * 1000)); | |
var stats = getIncomingCallStats(from, to, number, userKey) | |
var statsarr = objectToArray(stats); | |
statsarr.unshift(from); | |
prependRow(SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily Data"), statsarr) | |
} | |
function updateToday() { | |
// Adds todays stats until now, also last weeks stats for same time interval and weekday. To be triggered regularly | |
readConfig(); | |
var userKey = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("APIKey").getValue(); | |
var number = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Number").getValue().toString(); | |
var to = new Date(); | |
var from = new Date(); | |
from.setHours(0); from.setMinutes(0); from.setSeconds(0), from.setMilliseconds(0); | |
var fromLastWeek = new Date(from.getTime() - (7 * 24 * 60 * 60 * 1000)); | |
var toLastWeek = new Date(to.getTime() - (7 * 24 * 60 * 60 * 1000)); | |
var stats = getIncomingCallStats(from, to, number, userKey) | |
var statsarr = objectToArray(stats); | |
statsarr.unshift(from); | |
var statsLastWeek = getIncomingCallStats(fromLastWeek, toLastWeek, number, userKey) | |
var statsarrLastWeek = objectToArray(statsLastWeek); | |
statsarrLastWeek.unshift(fromLastWeek); | |
replaceRow(SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Today Data"), 2, statsarr) | |
replaceRow(SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Today Data"), 3, statsarrLastWeek) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment