function notificarmeta(plantilla, salida, numero) {
var excel = SpreadsheetApp.getActiveSpreadsheet();
var sheet_configuracion = excel.getSheetByName("Configuracion");
try {
var token = sheet_configuracion.getRange(1, 2).getValue();
var api = sheet_configuracion.getRange(2, 2).getValue();
var payload = JSON.parse(JSON.stringify({
"messaging_product": "whatsapp",
"to": numero,
"type": "template",
"template": {
"name": plantilla,
"language": {
"code": "es"
},
"components": []
}
}));
var texto = [];
if (salida) {
texto = salida.split(":::");
}
// SE AGREGA LOS PARAMETROS DE TEXTO
if (texto.length > 0) {
payload.template.components.push({ "type": "body", "parameters": [] });
for (var il = 0; il < texto.length; il++) {
payload.template.components[0].parameters.push({ "type": "text", "text": texto[il] });
}
}
var options =
{
'headers': { "Content-Type": "application/json", "Authorization": token },
'method': "POST",
'payload': JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(api, options);
var json = JSON.parse(response.getContentText());
} catch (e) {
}
}
function enviar(numero_enviar, mensaje_buscar) {
var jo = {};
/* se recupera la session del cached en caso exista*/
var cache = CacheService.getScriptCache();
var conversaciones = [];
if (cache.get("conversaciones") != null) {
conversaciones = JSON.parse(cache.get("conversaciones"));
}
// RECORREMOS LAS CONVERCACION PARA CONOCER EL EVENTO
var excel = SpreadsheetApp.getActiveSpreadsheet();
var sheet_configuracion = excel.getSheetByName("Configuracion");
var sheet = excel.getSheetByName("Conversacion");
var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
var evento = rows.find((item) => item[1].split(";").includes(mensaje_buscar));
var evento_error = rows.find((item) => item[0] === "bot_pedido_error");
if (evento === undefined) {
var filtroconversacion = conversaciones.filter((item) => item.numero == numero_enviar);
evento = evento_error;
if (filtroconversacion.length > 0) {
var evento_retorno = filtroconversacion[filtroconversacion.length - 1].retornar;
var evento_retornar = rows.find((item) => evento_retorno != "" && item[0] === evento_retorno);
if (evento_retornar !== undefined) {
evento = evento_retornar;
}
}
}
var conversacion_ingresado = { numero: numero_enviar, mensaje_entrada: mensaje_buscar, evento: evento[0], retornar: evento[3], mensaje_salida: evento[2] };
if (conversacion_ingresado.evento == "bot_pedido_consultar_fin") {
// SE RECUPERA EL DETALLE DE LA SOLICITUD
conversacion_ingresado.mensaje_salida = "\\nSolicitud:" + conversacion_ingresado.mensaje_entrada + " No existe \\n"
try {
var sheet_solicitud = excel.getSheetByName("Solicitudes");
var rows_solicitud = sheet_solicitud.getRange(2, 1, sheet_solicitud.getLastRow() - 1, sheet_solicitud.getLastColumn()).getValues();
var mensaje_retornar = rows_solicitud.find((item) => (item[0] + "") === ("" + conversacion_ingresado.mensaje_entrada));
if (mensaje_retornar !== undefined) {
conversacion_ingresado.mensaje_salida = "\\nSolicitud:" + conversacion_ingresado.mensaje_entrada + "\\nCliente:" + mensaje_retornar[5] + "\\nDireccion:" + mensaje_retornar[6] + "\\nPedido:\\n" + mensaje_retornar[4];
}
} catch (e) {
}
} else if (conversacion_ingresado.evento == "bot_pedido_solicitar") {
// SE RECUPERA EL DETALLE DE LA SOLICITUD
conversacion_ingresado.mensaje_salida = "\\nError de productos \\n"
try {
var sheet_producto = excel.getSheetByName("Producto");
var rows_producto = sheet_producto.getRange(2, 1, sheet_producto.getLastRow() - 1, sheet_producto.getLastColumn()).getValues();
var texto = "\\n";
for (var i = 0; i < rows_producto.length; i++) {
texto += rows_producto[i][0] + ") " + rows_producto[i][1] + " Precio : " + rows_producto[i][2] + " " + rows_producto[i][3] + "\\n";
}
conversacion_ingresado.mensaje_salida = texto;
} catch (e) {
}
} else if (conversacion_ingresado.evento == "bot_pedido_terminar_pedido") {
// SE RECUPERA EL DETALLE DE LA SOLICITUD
conversacion_ingresado.mensaje_salida = "\\nError detalle pedido productos \\n";
var sheet_producto = excel.getSheetByName("Producto");
var rows_producto = sheet_producto.getRange(2, 1, sheet_producto.getLastRow() - 1, sheet_producto.getLastColumn()).getValues();
try {
var result_numero = conversaciones.filter(item => item.numero == numero_enviar);
var detalle_pedido = "";
var sumatoria = 0;
var producto_encontrado = {};
for (var i = 0; i < result_numero.length; i++) {
if (result_numero[i].evento == "bot_pedido_producto") {
producto_encontrado = rows_producto.find((item) => (item[0] + "") === ("" + result_numero[i].mensaje_entrada));
if (producto_encontrado !== undefined) {
detalle_pedido += " producto : " + producto_encontrado[1];
}
}
if (result_numero[i].evento == "bot_pedido_continuar_pedido") {
var subtotal = 0;
if (producto_encontrado !== undefined) {
subtotal = parseFloat(parseInt(result_numero[i].mensaje_entrada) * parseFloat(producto_encontrado[2]));
}
sumatoria += subtotal;
detalle_pedido += " Subtotal : " + result_numero[i].mensaje_entrada + " x " + producto_encontrado[2] + " = " + subtotal + "\\n";
}
}
detalle_pedido += " TOTAL :" + sumatoria + "\\n";
conversacion_ingresado.mensaje_salida = detalle_pedido;
} catch (e) {
}
} else if (conversacion_ingresado.evento == "bot_pedido_terminar_pedido_fin") {
var fecha = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd HH:mm:ss");
var excel = SpreadsheetApp.getActiveSpreadsheet();
var sheet_solicitud = excel.getSheetByName("Solicitudes");
var conversaciones_final = conversaciones.filter((item) => item.numero == conversacion_ingresado.numero);
conversacion_ingresado.mensaje_salida = "Su numero de pedido es #" + (sheet_solicitud.getLastRow() + 1);
conversaciones_final.push(conversacion_ingresado);
var cliente = conversaciones_final.find((item) => item.evento == "bot_pedido_terminar_pedido_direccion");
if (cliente == undefined) {
cliente = "Cliente";
}
var direccion = conversaciones_final.find((item) => item.evento == "bot_pedido_terminar_pedido_fin");
if (direccion == undefined) {
direccion = "Direccion";
}
var pedido = conversaciones_final.find((item) => item.evento == "bot_pedido_terminar_pedido");
if (pedido == undefined) {
pedido = "pedido";
}
sheet_solicitud.appendRow([sheet_solicitud.getLastRow() + 1, fecha, conversacion_ingresado.numero, "Pendiente", pedido.mensaje_salida, cliente.mensaje_entrada, direccion.mensaje_entrada, JSON.stringify(conversaciones_final)]);
}
// SE PONE PUSH
conversaciones.push(conversacion_ingresado);
// SE ENVIA A META
notificarmeta(conversacion_ingresado.evento, conversacion_ingresado.mensaje_salida, conversacion_ingresado.numero);
// FIN DE ENVIO A META
if (evento[0].includes("_inicio")) {
var result_numero = conversaciones.filter(item => item.numero !== numero_enviar);
if (result_numero === undefined || result_numero.length == 0) {
conversaciones = [];
} else {
conversaciones = result_numero;
}
conversaciones.push(conversacion_ingresado);
}
cache.put('conversaciones', JSON.stringify(conversaciones), 120);
jo.status = '0';
jo.message = ' Se grabo el registro';
jo.conversaciones = conversaciones;
return JSON.stringify(jo);
}
function doPost(e) {
var operacion = JSON.parse(e.postData.contents);
var numero = operacion.entry[0].changes[0].value.messages[0].from;
var mensaje = "";
if (operacion.entry[0].changes[0].value.messages[0].type == "text") {
mensaje = operacion.entry[0].changes[0].value.messages[0].text.body;
} else if (operacion.entry[0].changes[0].value.messages[0].type == "button") {
mensaje = operacion.entry[0].changes[0].value.messages[0].button.text;
}
/* var excel = SpreadsheetApp.getActiveSpreadsheet();
var sheet_solicitud = excel.getSheetByName("Informacion");
sheet_solicitud.appendRow([numero, mensaje, new Date(), JSON.stringify(operacion)]);*/
var respuesta = enviar(numero, mensaje);
return ContentService.createTextOutput(JSON.stringify(operacion)).setMimeType(ContentService.MimeType.JSON);
}
function doGet(e) {
var cadena = e.parameter["hub.challenge"];
var excel = SpreadsheetApp.getActiveSpreadsheet();
var sheet_configuracion = excel.getSheetByName("Configuracion");
sheet_configuracion.getRange(7, 2).setValue(cadena);
sheet_configuracion.getRange(8, 2).setValue(JSON.stringify(e));
var respuesta = { "status": "OK" };
return ContentService.createTextOutput(cadena).setMimeType(ContentService.MimeType.CSV);
}
|