Last active
February 28, 2022 16:01
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
var CurrentSheet = SpreadsheetApp.getActiveSpreadsheet(); | |
function doPost(e) { | |
var params = JSON.parse(e.postData.contents); | |
if (params.messages.hasOwnProperty('agentChangedStatus')) { | |
sheetsManager(params); | |
} | |
} | |
// Trata dados e chama a função que gerencia a planilha | |
function sheetsManager(params) { | |
var statusData = params.messages.agentChangedStatus; | |
var dateObject = dateFormat(params.time); | |
statusData.forEach((agent) => outputFormat(agent)); | |
manageTables(statusData, dateObject); | |
} | |
//Cria e atualiza as tabelas na planilha; | |
function manageTables(statusData, dateObject) { | |
CurrentSheet.getSheetByName("Histórico") === null && CurrentSheet.insertSheet("Histórico") && CurrentSheet.getSheetByName("Histórico").appendRow(['Agente', 'On/Off', 'Status', 'Origem da mudança', 'Data', 'Hora', 'Apto a atender']); | |
CurrentSheet.getSheetByName("Status atual") === null && CurrentSheet.insertSheet("Status atual") && CurrentSheet.getSheetByName("Status atual").appendRow(['Agente', 'On/Off', 'Status', 'Data', 'Hora', 'Apto a atender']); | |
CurrentSheet.getSheetByName("Página1") !== null && CurrentSheet.deleteSheet(CurrentSheet.getSheetByName("Página1")); //Exclui a tabela "Página 1" | |
statusData.forEach((agent) => CurrentSheet.getSheetByName("Histórico").appendRow([agent.name, agent.isOnline, agent.statusID, agent.origin, dateObject.date, dateObject.hour, agent.isAvailable])); | |
statusData.forEach((agent) => currentAgentStatusTable(agent, dateObject)); | |
} | |
//Insere o status atual do agente na tabela "Status atual" | |
function currentAgentStatusTable(agent, dateObject) { | |
var dataRow = findAgent(agent.name); | |
dataRow === 0 && CurrentSheet.getSheetByName("Status atual").appendRow([agent.name, agent.isOnline, agent.statusID, dateObject.date, dateObject.hour, agent.isAvailable]); | |
CurrentSheet.getSheetByName("Status atual").getRange(`B${dataRow}`).setValue(agent.isOnline); | |
CurrentSheet.getSheetByName("Status atual").getRange(`C${dataRow}`).setValue(agent.statusID); | |
CurrentSheet.getSheetByName("Status atual").getRange(`D${dataRow}`).setValue(dateObject.date); | |
CurrentSheet.getSheetByName("Status atual").getRange(`E${dataRow}`).setValue(dateObject.hour); | |
CurrentSheet.getSheetByName("Status atual").getRange(`F${dataRow}`).setValue(agent.isAvailable); | |
} | |
//Formata os valores para exibir informações amigáveis na planilha | |
function outputFormat(agent) { | |
agent.isAvailable === true ? agent.isAvailable = "Sim" : agent.isAvailable = "Não"; | |
agent.isOnline === true ? agent.isOnline = "Online" : agent.isOnline = "Offline"; | |
// Trata todos os status inclusive os customizados | |
if (agent.isOnline === "Offline") { | |
agent.statusID = "Offline"; | |
} | |
else { | |
switch (agent.statusID) { | |
case null: | |
agent.statusID = "Disponível"; | |
break; | |
case "-1": | |
agent.statusID = "Indisponível"; | |
break; | |
case "-2": | |
agent.statusID = "Em pausa"; | |
break; | |
default: agent.statusID = "Status personalizado"; | |
} | |
/* Para que o nome dos status personalizados apareça na sua planilha, acrescente novos cases nesse switch utilizando o ID deles como parâmetro. | |
Essa informação pode ser obtida acessando o menu lateral do Painel da Huggy > Opções do agente > Meus status. | |
Depois, clique no status desejado e copie o valor numérico presente no final da URL dessa página. Ex.: "https://www.huggy.app/panel/status/{{id}}". */ | |
} | |
return agent; | |
} | |
//Retorna a linha da tabela "Status atual" correspondente ao agente | |
function findAgent(agentName) { | |
var data = CurrentSheet.getSheetByName("Status atual").getRange(1, 1, 500).getValues(); | |
var row = data.findIndex(agents => { return agents[0] === agentName }); | |
return row + 1; | |
} | |
//Separa o atributo "time" em data e hora | |
function dateFormat(time) { | |
return { | |
date: Utilities.formatDate(new Date(time * 1000), "GMT-3", "yyyy-MM-dd"), | |
hour: Utilities.formatDate(new Date(time * 1000), "GMT-3", "HH:mm:ss") | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment