Skip to content

Instantly share code, notes, and snippets.

@sidneycalebe
Last active February 28, 2022 16:01
Show Gist options
  • Save sidneycalebe/0e7f527e2a40dfa7070206e1f1ce86ba to your computer and use it in GitHub Desktop.
Save sidneycalebe/0e7f527e2a40dfa7070206e1f1ce86ba to your computer and use it in GitHub Desktop.
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