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


Reputação 7
Crachá +2

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. 👀


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 [email protected]. 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! 🎉


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


6 comentários

Reputação 7

Diz que um é o Power BI 🥺

Reputação 7
Crachá +2

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

kkk eu nunca duvidei meu bom!


improvisei um por hora, usando o googlesheet… só mais um pouco e sei que dará certo nativamente.


\o/

Olá Pedro, tudo bem? Daria pra utilizar essa mesma url sendo que com o método post, put ou delet?

Reputação 7

ALÔ @Pedro_Lucas, corre aqui!

Reputação 7
Crachá +2

NOP, esse end point da take é bem limitado, estou pra fazer um post sobre ele, e talvez quem sabe mexer nesse endpoint…

Comente