Como usar uma planilha para controlar seu horário de atendimento

Bom, vamos lá… Já pensaram em mudar o horário do bot apenas alterando uma planilha? Parece um sonho? Então arrasta pra cima que no caminho eu te explico. :eyes:

Quem me conhece sabe que sou o maluco do Google Sheets e, por isso, vou ensinar vocês a usar ele de uma nova maneira.

Primeiro crie uma planilha usando exatamente esse modelo em anexo (gente, é muito importante que não mude nada além dos horário, ok?). Faça uma cópia do exemplo aqui desse link:

Em seguida, você vai criar a planilha e adicionar esse email aqui como editor googlsheets@sheetsintegrations.iam.gserviceaccount.com. No bloco que verifica o horário, a primeira ação de entrada vai ser a requisição do tipo GET que pega o conteúdo da planilha.

Método: GET

URL:https://googlesheets.cs.blip.ai/sheets/{{código_da_sua_planilha}}/0?field=Domingo&value=

O código da planilha, como pode ver no print:

É esse código no meio da url da sua planilha. Você vai salvar o retorno numa var, no meu caso {{respostasheets}}. Assim que rodar, o retorno deve ser esse aqui:

Até aí tudo bem? Calma que já ta acabando…

Vamos definir uma var chamada offset e configurar o fuso horário. No caso do BR, a maioria dos estados é o -3, assim:

Agora vamos executar um script que vai montar o json de horários para nós! :tada:

Para isso, é só adicionar uma execução de script em sequência nas variáveis de entrada. Vamos passar a {{respostasheets}} e o script será esse aqui:

> function run(json) {
> 
> json = JSON.parse(json)
> 
> hora = json.response
> 
> entrada = hora[0]
> 
> saida = hora[1]
> 
> let workSchedule = [
> 
> {
> 
> "num": 0,
> 
> "name": "Sunday",
> 
> "portugueseName": "Domingo",
> 
> "workTime": [
> 
> {
> 
> "start": entrada.Domingo,
> 
> "end": saida.Domingo
> 
> }
> 
> ]
> 
> },
> 
> {
> 
> "num": 1,
> 
> "name": "Monday",
> 
> "portugueseName": "Segunda",
> 
> "workTime": [
> 
> {
> 
> "start": entrada.Segunda,
> 
> "end": saida.Segunda
> 
> }
> 
> ]
> 
> },
> 
> {
> 
> "num": 2,
> 
> "name": "Tuesday",
> 
> "portugueseName": "Terça",
> 
> "workTime": [
> 
> {
> 
> "start": entrada.Terça,
> 
> "end": saida.Terça
> 
> }
> 
> ]
> 
> },
> 
> {
> 
> "num": 3,
> 
> "name": "Wednesday",
> 
> "portugueseName": "Quarta",
> 
> "workTime": [
> 
> {
> 
> "start": entrada.Quarta,
> 
> "end": saida.Quarta
> 
> }
> 
> ]
> 
> },
> 
> {
> 
> "num": 4,
> 
> "name": "Thursday",
> 
> "portugueseName": "Quinta",
> 
> "workTime": [
> 
> {
> 
> "start": entrada.Quinta,
> 
> "end": saida.Quinta
> 
> }
> 
> ]
> 
> },
> 
> {
> 
> "num": 5,
> 
> "name": "Friday",
> 
> "portugueseName": "Sexta",
> 
> "workTime": [
> 
> {
> 
> "start": entrada.Sexta,
> 
> "end": saida.Sexta
> 
> }
> 
> ]
> 
> },
> 
> {
> 
> "num": 6,
> 
> "name": "Saturday",
> 
> "portugueseName": "Sábado",
> 
> "workTime": [
> 
> {
> 
> "start": entrada.Sabado,
> 
> "end": saida.Sabado
> 
> }
> 
> ]
> 
> }
> 
> ];
> 
> return JSON.stringify(workSchedule); //Return value will be saved as "Return value variable" field name
> 
> }

Agora você vai salvar o resultado em uma var, que no meu caso vai ser {{horario}} e depois é só adicionar uma execução de script igual a que sempre colocamos, ou seja, essa aqui ó:

> // Receive the variables as parameters
> 
> function run(offset, weekSchedule) {
> 
> offset = parseInt(offset);
> 
> weekSchedule = JSON.parse(weekSchedule);
> 
> let today = nowUTC(offset);
> 
> if (isWorkDay(today, weekSchedule)) {
> 
> let todaySchedule = getTodaySchedule(weekSchedule, today);
> 
> let intervalTime = getIntervalTime(todaySchedule, today);
> 
> return checkTime(intervalTime, today);
> 
> }
> 
> return false;
> 
> }
> 
> function getIntervalTime(todaySchedule, today) {
> 
> let intervalTime = [];
> 
> for (let i = 0; i < todaySchedule.workTime.length; i++) {
> 
> intervalTime.push({
> 
> start: utcDate(todaySchedule.workTime[i].start, today),
> 
> end: utcDate(todaySchedule.workTime[i].end, today)
> 
> });
> 
> }
> 
> return intervalTime;
> 
> }
> 
> function checkTime(intervalTime, today) {
> 
> for (let i = 0; i < intervalTime.length; i++) {
> 
> if (today - intervalTime[i].start > 0 && intervalTime[i].end - today > 0)
> 
> return true;
> 
> }
> 
> return false;
> 
> }
> 
> function getTodaySchedule(weekSchedule, today) {
> 
> for (let i = 0; i < weekSchedule.length; i++) {
> 
> if (weekSchedule[i].num == today.getUTCDay()) return weekSchedule[i];
> 
> }
> 
> }
> 
> //Get now UTC Date
> 
> function nowUTC(offset) {
> 
> let now = new Date();
> 
> let utc_timestamp = Date.UTC(
> 
> now.getUTCFullYear(),
> 
> now.getUTCMonth(),
> 
> now.getUTCDate(),
> 
> now.getUTCHours(),
> 
> now.getUTCMinutes(),
> 
> now.getUTCSeconds(),
> 
> now.getUTCMilliseconds()
> 
> );
> 
> return new Date(utc_timestamp + offset * 3600 * 1000);
> 
> }
> 
> //Get UTC Date
> 
> function utcDate(timeString, today) {
> 
> let hour = getValueByString("hour", timeString);
> 
> let minutes = getValueByString("minutes", timeString);
> 
> let utc_timestamp = Date.UTC(
> 
> today.getUTCFullYear(),
> 
> today.getUTCMonth(),
> 
> today.getUTCDate(),
> 
> hour,
> 
> minutes,
> 
> 0,
> 
> 0
> 
> );
> 
> return new Date(utc_timestamp);
> 
> }
> 
> //Get hour/minute by string with pattern HH:mm
> 
> function getValueByString(type, timeString) {
> 
> if (type === "hour") {
> 
> return parseInt(timeString.substring(0, timeString.indexOf(":")));
> 
> } else if (type === "minutes") {
> 
> return parseInt(
> 
> timeString.substring(timeString.indexOf(":") + 1, timeString.length)
> 
> );
> 
> }
> 
> return 0;
> 
> }
> 
> //Get if today is a work day
> 
> function isWorkDay(today, workDays) {
> 
> for (let i = 0; i < workDays.length; i++) {
> 
> if (workDays[i].num == today.getDay().toString()) return true;
> 
> }
> 
> return false;
> 
> }

Agora, basta se lembrar de colocar exatamente nessa ordem as variáveis de entrada: {{offset}} e {{horario}}. Então, vai ter a famosa {{WorkTime}} que no meu caso coloquei como {{calendario}}, e tá aí só o sucesso!!!

Que que vocês acharam? Bom, como eu sou um anjo, tá aqui o JSON do exemplo: https://drive.google.com/file/d/1c8CpX7Wwm7nj3GI2tl-o-P7CDESo5HIO/view?usp=sharing

Se você pedir acesso, eu libero! E, já sabe, né? Caso fique alguma dúvida comenta aí.

Ah! E para quem tá se perguntando sobre os outros conteúdos que prometi juro que um dia eu posto. Por sorte, tenho 3 ou 4 quase prontos para encher vocês de alegria KKKK

Por hoje é só e tudo isso. É como eu sempre digo…

“O Pai é Bom, Confia” - Lucas, Pedro

9 Curtidas

Diz que um é o Power BI :pleading_face:

1 Curtida

pra alegria da nação sim @Murillo_Sousa1 um dia vem eu juro