From 864c24381c1d9c5dc750b281c85d796bfc3345ca Mon Sep 17 00:00:00 2001 From: adriano Date: Tue, 27 Jun 2023 11:33:41 -0300 Subject: [PATCH] novos ajustes para slm hit --- backend/src/controllers/HitController.ts | 93 ++++++---- backend/src/helpers/EndpointQuery.ts | 17 +- backend/src/helpers/HitPortalMonitoring.ts | 169 ++++++++++-------- .../WbotServices/wbotMessageListener.ts | 26 ++- 4 files changed, 178 insertions(+), 127 deletions(-) diff --git a/backend/src/controllers/HitController.ts b/backend/src/controllers/HitController.ts index 37a47f7..6d6f03f 100644 --- a/backend/src/controllers/HitController.ts +++ b/backend/src/controllers/HitController.ts @@ -19,6 +19,7 @@ import CheckIsValidContact from "../services/WbotServices/CheckIsValidContact"; import Contact from "../models/Contact"; import GetProfilePicUrl from "../services/WbotServices/GetProfilePicUrl"; import CreateContactService from "../services/ContactServices/CreateContactService"; +import { resourceUsage } from "process"; // type IndexQuery = { @@ -60,7 +61,7 @@ export const hit = async (req: Request, res: Response): Promise => { if (!validNumber) { return res.status(200).json({ "message": "Ok" }); } - + // let contact = await Contact.findOne({ where: { number: validNumber } }); let contact = await Contact.findOne({ where: { number: '5517988325936' } }); @@ -82,8 +83,8 @@ export const hit = async (req: Request, res: Response): Promise => { }); } - - + + if (req.body['action'] === 'atdfechou') { @@ -95,30 +96,37 @@ export const hit = async (req: Request, res: Response): Promise => { if (contact) { - let data = req.body - let str = '' - let str2 = '' - - str = `*Cliente*: ${contact.name}` - - let historico = data['historico'] - - for (const key in historico) { - - const hist = Object.keys(historico[key]); - - hist.forEach((keys, index) => { - - str2 += `*${keys}*: ${historico[key][keys]}\n` - - }); - - str2 += '\n' + let response: any = await hitPortalMonitoring({ 'params[n_chamado_web]': req.body['n_chamado_web'], }) + if (!response || response.length == 0) { + console.log('Empty result from hit portal monitoring. Centro_de_custo: ', req.body['cod_web']) + return res.status(200).json({ "message": "Ok" }); } - console.log('--------------> str: ', str) - console.log('--------------> str2: ', str2) + // let data = req.body + // let str = '' + // let str2 = '' + + // str = `*Cliente*: ${contact.name}` + + // let historico = data['historico'] + + // for (const key in historico) { + + // const hist = Object.keys(historico[key]); + + // hist.forEach((keys, index) => { + + // str2 += `*${keys}*: ${historico[key][keys]}\n` + + // }); + + // str2 += '\n' + + // } + + // console.log('--------------> str: ', str) + // console.log('--------------> str2: ', str2) const botInfo = await BotIsOnQueue('botqueue') @@ -126,7 +134,9 @@ export const hit = async (req: Request, res: Response): Promise => { if (ticket.id && ticket.status == 'pending') { - await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nO chamado da sua loja ${contact.name} foi fechado. Abaixo seguem informações sobre o incidente.\n\n*Situação do chamado*\n\n*Incidente:*\n\n ${str}\n\n*Atualizações*:\n\n${str2}`, ticket); + // await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nO chamado da sua loja ${contact.name} foi fechado. Abaixo seguem informações sobre o incidente.\n\n*Situação do chamado*\n\n*Incidente:*\n\n ${str}\n\n*Atualizações*:\n\n${str2}`, ticket); + + await sendMessageHitMonitoring(response, ticket); } else if (!ticket.id) { @@ -137,8 +147,9 @@ export const hit = async (req: Request, res: Response): Promise => { await UpdateTicketService({ ticketData: { queueId: botInfo.botQueueId }, ticketId: ticket.id }); - await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nO chamado da sua loja ${contact.name} foi fechado pela operadora. Abaixo seguem informações sobre o incidente.\n\n*Situação do chamado*\n\n*Incidente:*\n\n ${str}\n\n*Atualizações*:\n\n${str2}`, ticket); + // await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nO chamado da sua loja ${contact.name} foi fechado pela operadora. Abaixo seguem informações sobre o incidente.\n\n*Situação do chamado*\n\n*Incidente:*\n\n ${str}\n\n*Atualizações*:\n\n${str2}`, ticket); + await sendMessageHitMonitoring(response, ticket); } @@ -158,7 +169,9 @@ export const hit = async (req: Request, res: Response): Promise => { try { - let response = await hitPortalMonitoring(req.body['cod_web']) + let response: any = await hitPortalMonitoring({ 'params[n_chamado_web]': req.body['n_chamado_web'], }) + + console.log('respone: ', response) if (!response || response.length == 0) { console.log('Empty result from hit portal monitoring. Centro_de_custo: ', req.body['cod_web']) @@ -171,7 +184,9 @@ export const hit = async (req: Request, res: Response): Promise => { if (ticket.id && ticket.status == 'pending') { - await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nAtualização do chamado para sua loja ${contact.name}. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + // await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nAtualização do chamado para sua loja ${contact.name}. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + + await sendMessageHitMonitoring(response, ticket); } else if (!ticket.id) { @@ -182,7 +197,9 @@ export const hit = async (req: Request, res: Response): Promise => { await UpdateTicketService({ ticketData: { queueId: botInfo.botQueueId }, ticketId: ticket.id }); - await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nAtualização do chamado para sua loja ${contact.name}. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + // await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nAtualização do chamado para sua loja ${contact.name}. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + + await sendMessageHitMonitoring(response, ticket); } @@ -198,16 +215,18 @@ export const hit = async (req: Request, res: Response): Promise => { } else { - console.log('status: atdatabriu --------------> contact: ', contact) + console.log('status: atdatabriu ') if (contact) { try { - let response = await hitPortalMonitoring(req.body['cod_web']) + let response: any = await hitPortalMonitoring({ 'params[n_chamado_web]': req.body['n_chamado_web'], }) + + console.log('response: ', response) if (!response || response.length == 0) { - console.log('Empty result from hit portal monitoring. Centro_de_custo: ', req.body['cod_web']) + console.log('Empty result from hit portal monitoring. n_chamado_web: ', req.body['n_chamado_web']) return res.status(200).json({ "message": "Ok" }); } @@ -217,7 +236,9 @@ export const hit = async (req: Request, res: Response): Promise => { if (ticket.id && ticket.status == 'pending') { - await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nIdentificamos em nossos monitoramentos que há um problema na internet da sua loja ${contact.name} e já estamos resolvendo. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + // await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nIdentificamos em nossos monitoramentos que há um problema na internet da sua loja ${contact.name} e já estamos resolvendo. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + + await sendMessageHitMonitoring(response, ticket); } else if (!ticket.id) { @@ -228,7 +249,9 @@ export const hit = async (req: Request, res: Response): Promise => { await UpdateTicketService({ ticketData: { queueId: botInfo.botQueueId }, ticketId: ticket.id }); - await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nIdentificamos em nossos monitoramentos que há um problema na internet da sua loja ${contact.name} e já estamos resolvendo. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + // await sendMessageHitMonitoring(`*Olá. Somos o grupo HIT.*\nIdentificamos em nossos monitoramentos que há um problema na internet da sua loja ${contact.name} e já estamos resolvendo. Abaixo seguem informações sobre o incidente para que possam acompanhar.\n\n*Situação do chamado*\n\n*Incidente*:\n\n ${response[0].header}\n${response[0].body}`, ticket); + + await sendMessageHitMonitoring(response, ticket); } @@ -253,7 +276,7 @@ export const hit = async (req: Request, res: Response): Promise => { }; -async function sendMessageHitMonitoring(msg: string, ticket: Ticket) { +async function sendMessageHitMonitoring(msg: any, ticket: Ticket) { if (msg && msg.length > 0) { diff --git a/backend/src/helpers/EndpointQuery.ts b/backend/src/helpers/EndpointQuery.ts index 975253a..20f03e3 100644 --- a/backend/src/helpers/EndpointQuery.ts +++ b/backend/src/helpers/EndpointQuery.ts @@ -3,7 +3,10 @@ const fs = require('fs') import axios from 'axios'; import * as https from "https"; -const endPointQuery = async (url: string, method: string, param: string = '') => { +const endPointQuery = async ( + url: string, + method: string, + params: object) => { let response: any = null @@ -26,14 +29,16 @@ const endPointQuery = async (url: string, method: string, param: string = '') => // const url = 'http://177.107.193.124:8095/labs/zabbix-frontend/api/api.php' - - response = await axios.post(url, { + let payload = { 'auth': '0424bd59b807674191e7d77572075f33', 'jsonrpc': '2.0', - 'method': 'chamado.ematendimento', - 'params[codweb]': param, + 'method': 'omnihit.consultachamado', id: '101' - }, { + } + + payload = {...payload, ...params} + + response = await axios.post(url, payload, { httpsAgent, headers: { 'Content-Type': 'multipart/form-data' }, }); diff --git a/backend/src/helpers/HitPortalMonitoring.ts b/backend/src/helpers/HitPortalMonitoring.ts index ae11884..419e2a1 100644 --- a/backend/src/helpers/HitPortalMonitoring.ts +++ b/backend/src/helpers/HitPortalMonitoring.ts @@ -6,91 +6,102 @@ import endPointQuery from "./EndpointQuery"; import WhatsQueueIndex from "./WhatsQueueIndex"; -const hitPortalMonitoring = async (centro_de_custo: string) => { +const hitPortalMonitoring = async (params: object) => { - let msg_endpoint: any = [] - let response2 = await endPointQuery('http://177.107.193.124:8095/labs/zabbix-frontend/api/api.php', 'post', centro_de_custo.trim()) + let response2 = await endPointQuery('http://177.107.193.124:8095/labs/zabbix-frontend/api/api.php', 'post', params) + + console.log('response2: ', response2.data.result) if (response2 && response2.data.result) { - - response2 = response2.data.result; - - for (let i = 0; i < response2.length; i++) { - - let data = '' - let sub_data = '*Atualizações:*\n\n' - - let properties: any = Object.entries(response2[i]); - - for (let x = 0; x < properties.length; x++) { - - if (typeof (properties[x][1]) != 'object') { - - if (properties[x][0] === 'n_chamado_web') { - properties[x][0] = 'Protocolo' - } - else if (properties[x][0] === 'nome_cliente') { - properties[x][0] = 'Nome do cliente' - } - else if (properties[x][0] === 'quando_inicio') { - properties[x][0] = 'Data de abertura' - } - else if (properties[x][0] === 'nome_filial') { - properties[x][0] = 'Nome da filial' - } - else if (properties[x][0] === 'cod_web') { - properties[x][0] = 'Codigo do cliente' - } - else if (properties[x][0] === 'id' || properties[x][0] === 'cliente_id') { - continue - } - - data += `*${properties[x][0]}*: ${properties[x][1].replace(/(\r\n|\n|\r)/gm, "")}\n` - - } - else if (typeof (properties[x][1]) == 'object') { - - const sub_properties = properties[x][1]; - - for (let k = 0; k < sub_properties.length; k++) { - - const inner_properties: any = Object.entries(sub_properties[k]); - - for (let y = 0; y < inner_properties.length; y++) { - - if (inner_properties[y][0] === 'texto') { - inner_properties[y][0] = 'Informação' - } - else if (inner_properties[y][0] === 'quando') { - inner_properties[y][0] = 'Data da Informação' - } - else if (inner_properties[y][0] === 'login') { - continue - } - - sub_data += `*${inner_properties[y][0]}*: ${inner_properties[y][1].replace(/(\r\n|\n|\r)/gm, "")}\n` - - } - - sub_data += '\n' - - } - - } - - } - - msg_endpoint.push({ header: data, body: sub_data }) - - } - - } - else { - msg_endpoint = null + return response2.data.result + } else { + return null } - return msg_endpoint + // let msg_endpoint: any = [] + + // let response2 = await endPointQuery('http://177.107.193.124:8095/labs/zabbix-frontend/api/api.php', 'post', centro_de_custo.trim()) + + // if (response2 && response2.data.result) { + + // response2 = response2.data.result; + + // for (let i = 0; i < response2.length; i++) { + + // let data = '' + // let sub_data = '*Atualizações:*\n\n' + + // let properties: any = Object.entries(response2[i]); + + // for (let x = 0; x < properties.length; x++) { + + // if (typeof (properties[x][1]) != 'object') { + + // if (properties[x][0] === 'n_chamado_web') { + // properties[x][0] = 'Protocolo' + // } + // else if (properties[x][0] === 'nome_cliente') { + // properties[x][0] = 'Nome do cliente' + // } + // else if (properties[x][0] === 'quando_inicio') { + // properties[x][0] = 'Data de abertura' + // } + // else if (properties[x][0] === 'nome_filial') { + // properties[x][0] = 'Nome da filial' + // } + // else if (properties[x][0] === 'cod_web') { + // properties[x][0] = 'Codigo do cliente' + // } + // else if (properties[x][0] === 'id' || properties[x][0] === 'cliente_id') { + // continue + // } + + // data += `*${properties[x][0]}*: ${properties[x][1].replace(/(\r\n|\n|\r)/gm, "")}\n` + + // } + // else if (typeof (properties[x][1]) == 'object') { + + // const sub_properties = properties[x][1]; + + // for (let k = 0; k < sub_properties.length; k++) { + + // const inner_properties: any = Object.entries(sub_properties[k]); + + // for (let y = 0; y < inner_properties.length; y++) { + + // if (inner_properties[y][0] === 'texto') { + // inner_properties[y][0] = 'Informação' + // } + // else if (inner_properties[y][0] === 'quando') { + // inner_properties[y][0] = 'Data da Informação' + // } + // else if (inner_properties[y][0] === 'login') { + // continue + // } + + // sub_data += `*${inner_properties[y][0]}*: ${inner_properties[y][1].replace(/(\r\n|\n|\r)/gm, "")}\n` + + // } + + // sub_data += '\n' + + // } + + // } + + // } + + // msg_endpoint.push({ header: data, body: sub_data }) + + // } + + // } + // else { + // msg_endpoint = null + // } + + // return msg_endpoint } diff --git a/backend/src/services/WbotServices/wbotMessageListener.ts b/backend/src/services/WbotServices/wbotMessageListener.ts index b508eeb..76cffaf 100644 --- a/backend/src/services/WbotServices/wbotMessageListener.ts +++ b/backend/src/services/WbotServices/wbotMessageListener.ts @@ -71,6 +71,7 @@ import sendWhatsAppMessageSocket from "../../helpers/SendWhatsappMessageSocket"; import { getWhatsappIds, setWhatsappId } from "../../helpers/WhatsappIdMultiSessionControl"; import SendWhatsAppMedia from "./SendWhatsAppMedia"; import AppError from "../../errors/AppError"; +import hitPortalMonitoring from "../../helpers/HitPortalMonitoring"; @@ -221,7 +222,7 @@ const queryEndPointHit = async (centro_de_custo: string) => { let msg_endpoint: any = [] - let response2 = await endPointQuery('http://177.107.193.124:8095/labs/zabbix-frontend/api/api.php', 'post', centro_de_custo.trim()) + let response2 = await endPointQuery('http://177.107.193.124:8095/labs/zabbix-frontend/api/api.php', 'post', { 'params[cod_web]': centro_de_custo.trim(), }) if (response2 && response2.data.result) { @@ -382,22 +383,33 @@ async function sendDelayedMessages(wbot: Session, ticket: Ticket, contact: Conta cod_web = aux[aux.length - 1] } - // let url = msgAction.actions[1].replace(/\.php.*/, '.php') + let params = msgAction.actions[1].split('api.php')[1].slice(1).split('/') - let msg_endpoint2 = await queryEndPointHit(String(cod_web)) + let url = msgAction.actions[1].replace(/\.php.*/, '.php') + let response: any = null - if (msg_endpoint2 && msg_endpoint2.length == 0) { + if (params[0] === 'cod_web') { + + response = await hitPortalMonitoring({ 'params[cod_web]': params[1], }) + + } + else if (params[0] === 'n_chamado_web') { + + response = await hitPortalMonitoring({ 'params[n_chamado_web]': params[1], }) + + } + + if (response && response.trim() == 0) { botSendMessage(ticket, contact, wbot, `Não existe nenhum chamado para essa consulta!\n _Digite *0* para voltar ao menu principal._`) } - else if (msg_endpoint2 && msg_endpoint2.length > 0) { - await monitoramento_response2(msg_endpoint2, wbot, contact, ticket, cod_web, '\n\n', false) + else if (response && response.trim().length > 0) { + await SendWhatsAppMessage({ body: response, ticket }); } else { botSendMessage(ticket, contact, wbot, `Houve um erro ao realizar a consulta!\n _Digite *0* para voltar ao menu principal._`) } - } else if (msgAction.actions[0] == 'queue_transfer') { console.log('>>>>>>>>>>>>>>> msgAction: ', msgAction, ' | msgAction.actions[1]: ', msgAction.actions[1])