Boa tarde.
@Joao.Caique, não sei se é a forma mais eficiente, mas eu faço assim:
Tenho apenas um bot de atendimento humano, nele eu uso a variável que defino a fila para também encaminhar para blocos diferentes, nesses blocos, cada um possui um json com os seus respectivos horários de atendimento, caso esteja dentro do horário de atendimento, eu encaminho para o bloco de atendimento, caso contrario ele retorna ao usuário que está fora de atendimento.
Mas se não me engano, a extensão Blip Desk Scheduler 2.0 já da a possibilidade de criar horário de atendimento por fila, acredito que seja mais fácil.
Ah que legal a sua ideia @Jessica_Vaz !
Não sei se pode, mas se possível conseguiria mostrar como ficou seu bot e também onde consigo achar essa extensão do Blip Desk que você falou ?
Claro, o fluxo ta meio bagunçado mas acho que da para entender kkkkk
No bloco ‘1.0 - Boas vindas’ eu faço a diferenciação para qual bloco ele vai verificar o horário de atendimento:
No bloco de Verificação eu faço dois scripts nas ações de entrada, um do json com os horários de atendimento:
function run() {
let workSchedule = w
{
"num": 1,
"name": "Monday",
"portugueseName": "Segunda",
"workTime":
{
"start": "07:00",
"end": "21:00"
}
]
},
{
"num": 2,
"name": "Tuesday",
"portugueseName": "Terça",
"workTime":
{
"start": "07:00",
"end": "21:00"
}
]
},
{
"num": 3,
"name": "Wednesday",
"portugueseName": "Quarta",
"workTime":
{
"start": "07:00",
"end": "21:00"
}
]
},
{
"num": 4,
"name": "Thursday",
"portugueseName": "Quinta",
"workTime":
{
"start": "07:00",
"end": "21:00"
}
]
},
{
"num": 5,
"name": "Friday",
"portugueseName": "Sexta",
"workTime":
{
"start": "07:00",
"end": "21:00"
}
]
},
{
"num": 6,
"name": "Saturday",
"portugueseName": "Sábado",
"workTime":
{
"start": "09:00",
"end": "13:00"
}
]
}
];
return JSON.stringify(workSchedule); //Return value will be saved as "Return value variable" field name
}
E outro que verifica se estamos no fora de atendimento ou não:
//v1.2
// The default offset if the offset has not been set
const DEFAULT_OFFSET = -3;
// Receive the variables as parameters
function run(offset, weekSchedule) {
offset = !isNaN(parseInt(offset))? parseInt(offset) : DEFAULT_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 = e];
for (let i = 0; i < todaySchedule.workTime.length; i++) {
intervalTime.push({
start: utcDate(todaySchedule.workTimeyi].start, today),
end: utcDate(todaySchedule.workTimeyi].end, today)
});
}
return intervalTime;
}
function checkTime(intervalTime, today) {
for (let i = 0; i < intervalTime.length; i++) {
if (today - intervalTimedi].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.getDay()) return weekScheduleei];
}
}
//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;
}
Esse ultimo script retorna True para quando se está no horário de atendimento, e False para quando não estamos, com base nisso eu faço a seguinte condição de saída:
E basicamente é isso kkkk
Já a extensão você acha no Blip Store:
Pesquisando o nome já aparece, mas não sei te dizer como funciona, infelizmente nunca usei.
Ahh que Massa! Obrigado @Jessica_Vaz !
Saberia me dizer se caso eu utilize a extensão eu precisaria no caso tirar esse script de hora?
No meu bot também tem um script desse , mas fiquei em dúvida se iria precisar excluir ele caso deseje utilizar a extensão.
Uma dica boa caso vc for usar o script, é deixar os horários em um JSON nos recursos do router, porque aí é mais fácil de outros DEVs que estão mexendo no bot conseguirem encontrar e modificar.
Bom dia!
Eu não consegui fazer a Extensão funcionar =/
Sobre o JSON, onde fica essa parte de recursos @Giovanni_Soares , poderia me mostrar por favor?
Você vai na aba ‘conteúdos’ do seu bot Router
Depois em ‘recursos’
Por último você clica em ‘Adicionar um novo’ e coloca o json dos seus horários, aí fica mais fácil de manipular dentro dos scripts
O json fica ± assim
Ahh Consegui encontrar! Obrigado @Giovanni_Soares Obrigado!
Acredito que ficará bem melhor de mexer mesmo ! , no caso mudar nessa área altera automaticamente o Script é ?
Isso, vc não precisaria usar o primeiro script que vc mandou onde você obtém o
‘weekSchedule’, apenas o segundo. Depois dá uma testada e olha se funciona
Bom dia
Utilizei no meu fluxo, o template de transbordo humano, que define horário nas variáveis de configuração. Se eu fizer a instalação dessa extensão, haverá conflito com o template? o que me sugere ?
obrigado
** complemento,
esses horários são validados por script, em blocos diferenciados pela intenção do usuários.
Pior que eu não sei te responder sobre, nunca utilizei essa extensão 😦
@Giovanni_Soares sabe se da?