Alteração na ura automatica para possibilitar subopçoes
parent
ce0b677c0c
commit
ab7464f776
|
@ -14,6 +14,12 @@ export const initIO = (httpServer: Server): SocketIO => {
|
||||||
|
|
||||||
io.on("connection", socket => {
|
io.on("connection", socket => {
|
||||||
logger.info("Client Connected");
|
logger.info("Client Connected");
|
||||||
|
|
||||||
|
// // test del
|
||||||
|
// let userId = socket.handshake.query;
|
||||||
|
// console.log('SOCKET userId: ', userId)
|
||||||
|
// //
|
||||||
|
|
||||||
socket.on("joinChatBox", (ticketId: string) => {
|
socket.on("joinChatBox", (ticketId: string) => {
|
||||||
logger.info("A client joined a ticket channel");
|
logger.info("A client joined a ticket channel");
|
||||||
socket.join(ticketId);
|
socket.join(ticketId);
|
||||||
|
|
|
@ -10,7 +10,6 @@ const DeleteSchedulingNotifyService = async (id: string | number): Promise<void>
|
||||||
|
|
||||||
if (!schedulingNotify) {
|
if (!schedulingNotify) {
|
||||||
throw new AppError("ERR_NO_SCHEDULING_NOTIFY_FOUND", 404);
|
throw new AppError("ERR_NO_SCHEDULING_NOTIFY_FOUND", 404);
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await schedulingNotify.destroy();
|
await schedulingNotify.destroy();
|
||||||
|
|
|
@ -50,10 +50,10 @@ const FindOrCreateTicketService = async (
|
||||||
//[Op.between]: [+subHours(new Date(), 2), +new Date()]
|
//[Op.between]: [+subHours(new Date(), 2), +new Date()]
|
||||||
|
|
||||||
// Tempo osioso para a ura responder thuanny
|
// Tempo osioso para a ura responder thuanny
|
||||||
[Op.between]: [+subMinutes(new Date(), 30), +new Date()]
|
//[Op.between]: [+subMinutes(new Date(), 30), +new Date()]
|
||||||
|
|
||||||
// Sub seconds
|
// Sub seconds
|
||||||
// [Op.between]: [+subSeconds(new Date(), 3), +new Date()]
|
[Op.between]: [+subSeconds(new Date(), 3), +new Date()]
|
||||||
},
|
},
|
||||||
contactId: contact.id
|
contactId: contact.id
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
const final_message =
|
||||||
|
{
|
||||||
|
"msg":"Nosso atendimento está sempre disponível de segunda a sexta-feira, das 08:00 às 17:00 horas. Um beijo!"
|
||||||
|
}
|
||||||
|
|
||||||
|
export default final_message;
|
|
@ -0,0 +1,56 @@
|
||||||
|
|
||||||
|
const data = [
|
||||||
|
{
|
||||||
|
"id":"1",
|
||||||
|
"option":"Status do Pedido",
|
||||||
|
"description":"Digite aqui umas das opções abaixo para iniciarmos o atendimento, tá? 🧡",
|
||||||
|
"subOptions": [{"subOpt":"Digitar meu CPF","responseToClient":"Digite o seu CPF"}, {"subOpt":"Digitar o Número do Pedido", "responseToClient":"Digite o numero do pedido"}],
|
||||||
|
"atendente":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"2",
|
||||||
|
"option":"Status do Reembolso",
|
||||||
|
"description":"Digite aqui umas das opções abaixo para iniciarmos o atendimento, tá? 🧡",
|
||||||
|
"subOptions": [{"subOpt":"Digitar meu CPF","responseToClient":"Digite o seu CPF"}, {"subOpt":"Digitar o Número do Pedido", "responseToClient":"Digite o numero do pedido"}],
|
||||||
|
"atendente":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"3",
|
||||||
|
"option":"Quero Trocar ou Devolver",
|
||||||
|
"description":"Para solicitar, é bem simples! Disponibilizamos um passo-a-passo bem completo em nossa loja online. \nBasta acessar www.dressto.com.br, ir até nosso rodapé, e clicar em “Como Trocar”, indicamos que leia atentamente nossa política de troca. 😉 \nCaso ainda precise de atendimento",
|
||||||
|
"subOptions": [{"subOpt":"Para continuar", "responseToClient":"Aguarde, um de nossos atendentes vai te atender em breve!"}],
|
||||||
|
"atendente":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"4",
|
||||||
|
"option":"Quero Rastrear meu Pedido",
|
||||||
|
"description":"Digite aqui umas das opções abaixo para iniciarmos o atendimento, tá? 🧡",
|
||||||
|
"subOptions": [{"subOpt":"Digitar meu CPF","responseToClient":"Digite o seu CPF"}, {"subOpt":"Digitar o Número do Pedido", "responseToClient":"Digite o numero do pedido"}],
|
||||||
|
"atendente":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"5",
|
||||||
|
"option":"Cancelamento de Pedido",
|
||||||
|
"description":"Digite aqui umas das opções abaixo para iniciarmos o atendimento, tá? 🧡",
|
||||||
|
"subOptions": [{"subOpt":"Digitar meu CPF","responseToClient":"Digite o seu CPF"}, {"subOpt":"Digitar o Número do Pedido", "responseToClient":"Digite o numero do pedido"}],
|
||||||
|
"atendente":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"6",
|
||||||
|
"option":"Cupons",
|
||||||
|
"description":"Digite o número da opção desejada",
|
||||||
|
"subOptions": [{"subOpt":"Primeira Compra", "responseToClient":"Primeira Compra\nAguarde, um de nossos atendentes vai te atender em breve!"}, {"subOpt":"Aniversariante", "responseToClient":"Aniversariante\nAguarde, um de nossos atendentes vai te atender em breve!"}],
|
||||||
|
"atendente":false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"7",
|
||||||
|
"option":"Outros Assuntos",
|
||||||
|
"description":"7 - Prezado cliente, você está sendo direcionado para um atendente disponível 😊.\nPedimos gentilmente que aguarde para ser atendido.\nLembramos que nosso atendimento está sempre disponível de segunda a sexta-feira, das 08:00 às 17:00 horas. Um beijo! !",
|
||||||
|
"subOptions": [],
|
||||||
|
"atendente":true
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
export default data;
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
const msg_client_transfer =
|
||||||
|
{
|
||||||
|
"msg":"Prezado cliente, você está sendo direcionado para um atendente disponível 😊.\nPedimos gentilmente que aguarde para ser atendido.\nLembramos que nosso atendimento está sempre disponível de segunda a sexta-feira, das 08:00 às 17:00 horas. Um beijo!!"
|
||||||
|
}
|
||||||
|
|
||||||
|
export default msg_client_transfer;
|
|
@ -1,7 +0,0 @@
|
||||||
|
|
||||||
const msg_client_transfer =
|
|
||||||
{
|
|
||||||
"msg":"Seu atendimento foi transferido!\nEm breve você será atendido por um de nossos atendentes."
|
|
||||||
}
|
|
||||||
|
|
||||||
export default msg_client_transfer;
|
|
|
@ -1,60 +0,0 @@
|
||||||
|
|
||||||
const data = [
|
|
||||||
{
|
|
||||||
"id":"1",
|
|
||||||
"option":"Tecle 1 para informações sobre horários de funcionamento",
|
|
||||||
"description":"1 - Play City Shopping Nova América, Play City Bangu Shopping e Play City Grande Rio, Terça a sexta de 18h às 22h, sábados, domingos e feriados de 16h às 22h",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"2",
|
|
||||||
"option":"Tecle 2 para saber os endereços das unidades Play City",
|
|
||||||
"description":"2 - Play City Shopping Nova América:\n\nAv. Pastor Martin Luther King Júnior, 126 Del Castilho, Rio de Janeiro\n\n- Play City Bang Shopping:\nR. Fonseca, 240 - Bangu, Rio de Janeiro\n\n- Play City Grande Rio:\n\nRua Maria Sendas,111 - Parque Barreto, São João de Meriti.",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"3",
|
|
||||||
"option":"Tecle 3 para informações sobre ingressos e passaportes",
|
|
||||||
"description":"3 - Informamos que a venda de Passaportes está ativa somente na Unidade Play City do Shopping Nova América (TERÇA A SEXTA, EXCETO FERIADO) e Bangu Shopping (TERÇA A DOMINGO).\n\nCompre seu passaporte na bilheteria com valor de meia entrada por R$70,00 ou compre de forma antecipada com desconto pelo site e pague R$59,90.\n\n- Ingressos individuais para todas as unidades nas bilheterias por R$8,00.\n\nAs cartelas com 5 ingressos custam R$35,00 e cartelas com 10 ingressos R$60 ou compre sua cartela com 10 ingressos de forma antecipada com desconto pelo site e pague R$49,90. Válido somente de terça a sexta para as 3 unidades.\n\nPara garantir sua cartela com 10 ingressos individuais para fins de semana e feriados, compre pelo site e pague apenas R$54,90. Válido para as 3 unidades Play City.\n\nwww.playcitydiversoes.com.br",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"4",
|
|
||||||
"option":"Tecle 4 para cancelamento",
|
|
||||||
"description":"4 - Para cancelar uma compra envie um email para sac@playcitydiversoes.com.br as seguintes informações:\n1) O nome completo da pessoa que fez a compra.\n2) Número do pedido idêntico ao voucher\n3) Para qual unidade (Nova América, Grande Rio ou Bangu Shopping).\n4) Qual ingresso você comprou (cartela ou passaporte) e quantidade comprada\n5) Dia de semana, ou fim de semana e feriado.\n6) valor exato pago.\nOBS: Somente com todas as informações idênticas ao voucher poderão ter o cancelamento concluído com sucesso.",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"5",
|
|
||||||
"option":"Tecle 5 para promoção de aniversariante do dia",
|
|
||||||
"description":"5 - Aniversariante do dia comprando 20 ingressos na bilheteria com apresentação de documento com foto paga R$120,00 e ganha mais 10 ingressos para curtir de montão!\n\nEsta opção é válida nas 3 unidades Play City.\n\nVocê também pode comprar 1 passaporte e ganhar mais 1! Esta opção é válida somente na unidade Shopping Nova América\n\nPROMOÇÕES NÃO ACUMULATIVAS COM OUTRAS PROMOÇÕES.\n\nOBS: Promoção de aniversarinte de passaporte apenas na unidade do Shopping Nova America(Terça a sexta)\n\n",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"6",
|
|
||||||
"option":"Tecle 6 para saber regras de filmagem ou fotografia com equipamento profissional no parque",
|
|
||||||
"description":"6 - Para filmar ou fotografar com equipamento profissional nos espaços e brinquedos do parque é necessária a autorização prévia. Você pode solicitar e agendar pelo email Marketing@playcitydiversoes.com.br",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"7",
|
|
||||||
"option":"Tecle 7 para parcerias comerciais",
|
|
||||||
"description":"7 - ENVIE UM EMAIL PARA MARKETING@PLAYCITYDIVERSOES.COM.BR",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"8",
|
|
||||||
"option":"Tecle 8 informações do Espaço de Festa Play City",
|
|
||||||
"description":"8 - Se você quer comemorar em um espaço exclusivo e privativo, oferecemos a TENDA DA ALEGRIA! Nela você conta com 16 passaportes, 2 conjuntos de mesa com 8 cadeiras, 4 pufs, 1 mesa grande para bolo, 1 backdrop e você pode decorar como quiser!!!\n\nDe terça a sexta R$649,90 a vista ou 3x no cartão.\n\nSábados, domingos e feriados R$799,90 a vista ou 3x no cartão.\n\nO Espaço TENDA DA ALEGRIA é válido somente para a unidade Play City do Shopping Nova América e Bangu Shopping.\n\nTemos também a opção PREMIUM para você quer uma festa completa!!!! Nela você terá direito a 21 passaportes, espaço climatizado, 6 mesas com 24 cadeiras, 1 mesa grande para bolo, 1 mini freezer e 1 forno elétrico e você pode decorar como quiser!!!\n\nDe terça a sexta R$999,90 a vista ou 3x no cartão.\n\nSábados, domingos e feriados R$1499,90 a vista ou 3x no cartão.\n\nO Espaço PREMIUM é válido somente para a unidade Play City do Shopping Nova América.\n\nPromoções não cumulativas e com taxas de cancelamento.\n\nPara RESERVAR o espaço ( APERTE 9 PARA FALAR COM UM ATENDENTE)",
|
|
||||||
"atendente":false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"9",
|
|
||||||
"option":"Tecle 9 para falar com um de nossos atendentes",
|
|
||||||
"description":"",
|
|
||||||
"atendente":true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
export default data;
|
|
|
@ -32,8 +32,9 @@ import Queue from "../../models/Queue";
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
// test del
|
// test del
|
||||||
import data_ura from './ura_placity'
|
import data_ura from './ura'
|
||||||
import msg_client_transfer from './ura_placity _msg_transfer'
|
import msg_client_transfer from './ura_msg_transfer'
|
||||||
|
import final_message from "./ura _final_message";
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
|
@ -206,6 +207,8 @@ const verifyQueue = async (
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
let botOptions = ''
|
||||||
|
|
||||||
// O bot abre a mensagem na fila para atender o usuario
|
// O bot abre a mensagem na fila para atender o usuario
|
||||||
if(botInfo.isOnQueue){
|
if(botInfo.isOnQueue){
|
||||||
|
|
||||||
|
@ -214,10 +217,20 @@ const verifyQueue = async (
|
||||||
ticketId: ticket.id
|
ticketId: ticket.id
|
||||||
});
|
});
|
||||||
|
|
||||||
|
data_ura.forEach((s, index) => { botOptions += `*${index + 1}* - ${s.option}\n` });
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
const body = `\u200e${choosenQueue.greetingMessage}`;
|
let body = ''
|
||||||
|
|
||||||
|
if(botOptions.length > 0){
|
||||||
|
body = `\u200e${choosenQueue.greetingMessage}\n\n${botOptions}\n${final_message.msg}`;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
body = `\u200e${choosenQueue.greetingMessage}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// const body = `\u200e${choosenQueue.greetingMessage}`;
|
||||||
|
|
||||||
const sentMessage = await wbot.sendMessage(`${contact.number}@c.us`, body);
|
const sentMessage = await wbot.sendMessage(`${contact.number}@c.us`, body);
|
||||||
|
|
||||||
|
@ -408,7 +421,11 @@ const handleMessage = async (
|
||||||
|
|
||||||
const greetingMessage = `\u200e${queue.greetingMessage}`;
|
const greetingMessage = `\u200e${queue.greetingMessage}`;
|
||||||
|
|
||||||
botSendMessage(ticket, contact, wbot, `${greetingMessage}`)
|
let options = "";
|
||||||
|
|
||||||
|
data_ura.forEach((s, index) => { options += `*${index + 1}* - ${s.option}\n` });
|
||||||
|
|
||||||
|
botSendMessage(ticket, contact, wbot, `${greetingMessage}\n\n${options}\n${final_message.msg}`)
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -436,8 +453,6 @@ const handleMessage = async (
|
||||||
|
|
||||||
lastOption = ticket_message[1].body
|
lastOption = ticket_message[1].body
|
||||||
|
|
||||||
// test del
|
|
||||||
|
|
||||||
const queuesWhatsGreetingMessage = await queuesOutBot(wbot, botInfo.botQueueId)
|
const queuesWhatsGreetingMessage = await queuesOutBot(wbot, botInfo.botQueueId)
|
||||||
|
|
||||||
const queues = queuesWhatsGreetingMessage.queues
|
const queues = queuesWhatsGreetingMessage.queues
|
||||||
|
@ -459,11 +474,12 @@ const handleMessage = async (
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// console.log('----------------- ticket_message: ', ticket_message)
|
||||||
|
|
||||||
|
|
||||||
// È numero
|
// È numero
|
||||||
if( !Number.isNaN(Number(msg.body.trim())) && (+msg.body >= 0 && +msg.body <= data_ura.length) ) {
|
if( !Number.isNaN(Number(msg.body.trim())) && (+msg.body >= 0 && +msg.body <= data_ura.length) ) {
|
||||||
|
|
||||||
|
@ -473,7 +489,112 @@ const handleMessage = async (
|
||||||
|
|
||||||
if(data_ura[indexUra].id != opt_user_attendant && lastOption != opt_user_attendant){
|
if(data_ura[indexUra].id != opt_user_attendant && lastOption != opt_user_attendant){
|
||||||
|
|
||||||
botSendMessage(ticket, contact, wbot, `${data_ura[indexUra].description}\n\n *0* - Voltar ao menu principal`)
|
console.log('TICKET MESSAGE: ', ticket_message)
|
||||||
|
|
||||||
|
// test del
|
||||||
|
let next = true
|
||||||
|
|
||||||
|
let indexAux = ticket_message.findIndex((e)=>e.body=='0')
|
||||||
|
|
||||||
|
let listMessage = null
|
||||||
|
|
||||||
|
if(indexAux!=-1){
|
||||||
|
|
||||||
|
listMessage = ticket_message.slice(0, indexAux)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
listMessage = ticket_message
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
let id = ''
|
||||||
|
let subUra = null
|
||||||
|
|
||||||
|
if(listMessage.length > 1){
|
||||||
|
|
||||||
|
id = listMessage[listMessage.length-1].body
|
||||||
|
subUra = data_ura.filter((e)=>e.id == id )[0]
|
||||||
|
|
||||||
|
if(subUra && (!subUra.subOptions || subUra.subOptions.length == 0)){
|
||||||
|
|
||||||
|
listMessage.pop()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(listMessage.length > 1){
|
||||||
|
|
||||||
|
id = listMessage[listMessage.length-1].body
|
||||||
|
subUra = data_ura.filter((e)=>e.id == id )[0]
|
||||||
|
|
||||||
|
if(subUra.subOptions){
|
||||||
|
|
||||||
|
if( !Number.isNaN(Number(msg.body.trim())) && (+msg.body >= 0 && +msg.body <= subUra.subOptions?.length) && subUra.subOptions ) {
|
||||||
|
|
||||||
|
if(subUra.subOptions[+msg.body - 1].responseToClient){
|
||||||
|
|
||||||
|
botSendMessage(ticket, contact, wbot, `*${subUra.option}*\n\n${subUra.subOptions[+msg.body - 1].responseToClient}`)
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
botSendMessage(ticket, contact, wbot, `*${subUra.option}*\n\n${subUra.subOptions[+msg.body - 1].subOpt}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
const queuesWhatsGreetingMessage = await queuesOutBot(wbot, botInfo.botQueueId)
|
||||||
|
|
||||||
|
const queues = queuesWhatsGreetingMessage.queues
|
||||||
|
|
||||||
|
if(queues.length>0){
|
||||||
|
await botTransferTicket(queues[0], ticket, contact, wbot)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
console.log('NO QUEUE!')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
let options = "";
|
||||||
|
let subOptions = subUra.subOptions
|
||||||
|
|
||||||
|
subOptions?.forEach((s, index) => { options += `*${index + 1}* - ${s.subOpt}\n` });
|
||||||
|
|
||||||
|
botSendMessage(ticket, contact, wbot, `*${subUra.option}*\n\nDigite um número válido disponível no menu de opções de atendimento abaixo: \n${options}\n\n*0* - Voltar ao menu principal`)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
next = false
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
if(next){
|
||||||
|
if(data_ura[indexUra].subOptions){
|
||||||
|
|
||||||
|
let options = "";
|
||||||
|
let option = data_ura[indexUra].option
|
||||||
|
let subOptions = data_ura[indexUra].subOptions
|
||||||
|
let description = data_ura[indexUra].description
|
||||||
|
|
||||||
|
subOptions?.forEach((s, index) => { options += `*${index + 1}* - ${s.subOpt}\n` });
|
||||||
|
|
||||||
|
const body = `\u200e${description}:\n${options}`
|
||||||
|
|
||||||
|
botSendMessage(ticket, contact, wbot, `*${option}*\n\n${body}\n\n *0* - Voltar ao menu principal`)
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
botSendMessage(ticket, contact, wbot, `${data_ura[indexUra].description}\n\n *0* - Voltar ao menu principal`)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(data_ura[indexUra].id == opt_user_attendant){
|
else if(data_ura[indexUra].id == opt_user_attendant){
|
||||||
|
|
Loading…
Reference in New Issue