Hola a continuación le dejo material para que puedan implementar un BOT de Solicitud Taxi empleando hoja de calculo google sheet.
¿ Deseas solo probarlo YA?
1) Ingresar a la siguiente pagina
https://anlusoftware.blogspot.com/
2) Seleccionar la opcion "GENERAR TOKEN WHATSAPP PARA BOT" y luego el BOT que deseas activar "Whatsapp chatbot taxi con google sheets"
3) Si todo esta OK se le mostrara mensaje confirmacion
4) Conversele al numero de celular .
5) El BOT trabaja con la siguiente hoja sheet se iran almacenado los registros ahi,
https://docs.google.com/spreadsheets/d/15O5A8MZ4YPzstLMn4aCERfii2IR8wR0FVA9yjlxUIYI/edit?usp=sharing
¿ Necesitas implementarlo tu mismo para realizar cambios ?
- Crear la hoja Google sheet como indica el video
- Escanear la hoja para obtener token QR
- Whatsapp version android no business
Video Implementación
Página Excel Plantilla
https://docs.google.com/spreadsheets/d/15O5A8MZ4YPzstLMn4aCERfii2IR8wR0FVA9yjlxUIYI/edit?usp=sharing
Código AppScript
var excel_qr = SpreadsheetApp.getActiveSpreadsheet(); var sheet_qr = excel_qr.getSheetByName("Configuracion"); var api_interna = "https://script.google.com/macros/s/AKfycbyoBhxuklU5D3LTguTcYAS85klwFINHxxd-FroauC4CmFVvS0ua/exec"; var appscript =sheet_qr.getRange(1,2).getValue(); function onOpen() { createMenus(); } function createMenus() { var menu = SpreadsheetApp.getUi().createMenu("Whatsapp"); menu.addItem('1) Obtener TOKEN Session - QR Whatsapp', 'qrwhatsapp'); menu.addItem('2) Habilitar BOT - Whatsapp', 'enviarconversacion'); menu.addToUi(); } function doPost(e) { var operacion = JSON.parse(e.postData.contents) var respuesta = ""; if (operacion.op == "qr") { respuesta = generar(JSON.stringify(operacion)); } if (operacion.op == "end_conversacion" ){ respuesta = end_conversacion(JSON.stringify(operacion)); } if (operacion.op == "find_word" ){ respuesta = find_word(JSON.stringify(operacion)); } return ContentService.createTextOutput(respuesta).setMimeType(ContentService.MimeType.JSON); } function generar(informacion) { try { var qr = JSON.parse(informacion); sheet_qr.getRange(2, 2).setValue(encodeURIComponent(qr.qr)); var result, jo = {}; if (qr.numero && qr.qr=="CONECTADO") { sheet_qr.getRange(3, 2).setValue(qr.session); } jo.status = '0'; jo.message = ' Se grabo el registro'; } catch (e) { jo.status = '-1'; jo.message = e.toString(); } var result = JSON.stringify(jo); return result; } function qrwhatsapp() { var response = "No" try { var response = Browser.msgBox('Seguro que quiere generar QR ahora ?', Browser.Buttons.YES_NO); } catch (e) { Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK); } if (response == "yes") { enviar(); Browser.msgBox('La acción ha sido realizada , escanear registros luego de 10 segundos', Browser.Buttons.OK); } } function enviar() { var payload = { "op": "iniciarqr","sheet_id":excel_qr.getId(),"app_script": appscript, "fechahora": Utilities.formatDate(new Date(), "GMT-5", "yyMMddHHmmss") }; var options = { 'headers': { "Content-Type": "application/json" }, 'method': "POST", 'payload': JSON.stringify(payload) }; try { var response = UrlFetchApp.fetch(api_interna, options); var json = JSON.parse(response.getContentText()); } catch (e) { } } function enviarconversacion() { var response = "No" var token_session = ""; try { token_session = sheet_qr.getRange(3, 2).getValue(); var response = Browser.msgBox('Seguro que quiere habilitar el BOT con la conversacion , el token de session sera : ' + token_session + ' ?', Browser.Buttons.YES_NO); } catch (e) { Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK); } if (response == "yes") { if (excel_qr.getSheetByName("Conversacion")) { var dataConversacion = []; var sheet = excel_qr.getSheetByName("Conversacion"); var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); for (var i = 0, l = rows.length; i < l; i++) { var dataRow = rows[i]; var record = {}; record['evento'] = dataRow[0]; record['entrada'] =dataRow[1]; record['salida'] = JSON.parse(dataRow[2]); record['retornar'] = dataRow[3]; dataConversacion.push(record); } var payload = { "op": "registermessage","token_qr":token_session,"conversacion":dataConversacion}; var options = { 'headers': { "Content-Type": "application/json" }, 'method': "POST", 'payload': JSON.stringify(payload) }; try { var response = UrlFetchApp.fetch(api_interna, options); var json = JSON.parse(response.getContentText()); if(json.status=="0"){ Browser.msgBox('Se habilito el BOT inicie la conversacion ', Browser.Buttons.OK); }else{ Browser.msgBox('Error al iniciar : '+json.message, Browser.Buttons.OK); } } catch (e) { Browser.msgBox('Se habilito el BOT inicie la conversacion ', Browser.Buttons.OK);
} } } } function find_word(informacion){ var result,jo={}; try{ var resultado = JSON.parse(informacion); var excel= SpreadsheetApp.getActiveSpreadsheet(); var sheet_sede =excel.getSheetByName("Solicitud"); var rows_sede = sheet_sede.getRange(2,1,sheet_sede.getLastRow()-1, sheet_sede.getLastColumn()).getValues(); jo.status = '1'; jo.message = ' No existe'; var numero = (resultado.numero).substring(0, (resultado.numero).lastIndexOf("@")); for(var i2 = 0, l2= rows_sede.length; i2<l2 ; i2++){ var dataRow = rows_sede[i2]; var record = {}; if((dataRow[2]+"")==(numero+"")){ jo.status = '0'; jo.message = ' Hola 👋 '+dataRow[3]+', soy tu operadora de taxi virtual ANLUSOFT 🤖👇 '; jo.conversacion={"mensaje":dataRow[3]}; break; } } } catch (e) { jo.status = '-1'; jo.message = e.toString(); } var result = JSON.stringify(jo); return result;
} function end_conversacion(informacion){ try{ var venta = JSON.parse(informacion); var excel= SpreadsheetApp.getActiveSpreadsheet(); var sheet =excel.getSheetByName("Solicitud"); var fecha = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd HH:mm:ss"); var fecha_solicitud = "."+Utilities.formatDate(new Date(), "GMT", "yy-MM-dd HH:mm"); var nombre_cliente ="" + "132" var ubicacion_cliente =""; var direccion_cliente =""; var mensaje=""; var numero = (venta.numero).substring(0, (venta.numero).lastIndexOf("@"));
for (var ill = 0; ill < venta.conversacion.length; ill++) {
if(venta.conversacion[ill].evento=="MenuInicio"){ nombre_cliente=venta.conversacion[ill].mensaje; } if(venta.conversacion[ill].evento=="Solicitar_Taxi_Reservar"){ fecha_solicitud=venta.conversacion[ill].mensaje; } if(venta.conversacion[ill].evento=="End_Solicitar_Taxi_Reservar"){ if(venta.conversacion[ill].mensaje==="ubicacion_send"){ ubicacion_cliente=venta.conversacion[ill].documento.latitud+","+venta.conversacion[ill].documento.longitud; var response = Maps.newGeocoder().reverseGeocode(venta.conversacion[ill].documento.latitud,venta.conversacion[ill].documento.longitud); for (var iz = 0; iz < response.results.length; iz++) { direccion_cliente= response.results[iz].formatted_address; break; } } mensaje="*Su reserva fue registrada* ✅ \n exitosamente con los siguientes datos* ✅😃:\n "+fecha_solicitud+", "+direccion_cliente+"\nEsté pendiente 30min antes 🕑, que un conductor se podrá en contacto con usted. Gracias por preferirnos."; sheet.appendRow([fecha,fecha_solicitud,numero,nombre_cliente,ubicacion_cliente,direccion_cliente,'Pendiente',JSON.stringify(venta.conversacion)]) } if(venta.conversacion[ill].evento=="End_Solicitar_Taxi_Ahora"){ if(venta.conversacion[ill].mensaje==="ubicacion_send"){ ubicacion_cliente=venta.conversacion[ill].documento.latitud+","+venta.conversacion[ill].documento.longitud; var response = Maps.newGeocoder().reverseGeocode(venta.conversacion[ill].documento.latitud,venta.conversacion[ill].documento.longitud); for (var iz = 0; iz < response.results.length; iz++) { direccion_cliente= response.results[iz].formatted_address; break; } } mensaje="*Su solicitud registrada* ✅ \n exitosamente con los siguientes datos ✅😃:\n *Fecha Y Hora*"+fecha_solicitud+ ", "+ "\n 1 *Direccion:* " +direccion_cliente+"\n En estos momentos 🕑, un conductor se podrá en contacto con usted. Gracias por preferirnos."; sheet.appendRow([fecha,fecha_solicitud,numero,nombre_cliente,+ "\n" + ubicacion_cliente,direccion_cliente,'Pendiente',JSON.stringify(venta.conversacion)]) } if(venta.conversacion[ill].evento=="End_Ver_Mis_Reservas"){ mensaje="No tienes reservas pendientes:"; var rows = sheet.getRange(2,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues(); for(var i = 0, l= rows.length; i<l ; i++){ var dataRow = rows[i]; if((dataRow[2]+"")===""+numero && dataRow[6]==="Pendiente"){ if(i==0){ mensaje = dataRow[3]+", tiene las siguientes reservas pendientes:\n"; } mensaje+= (i+1)+" "+dataRow[1]+" "+dataRow[5]+"\n"; } } break; }
} var result,jo={}; jo.status = '0'; jo.message = mensaje; } catch (e) { jo.status = '-1'; jo.message = e.toString(); } var result = JSON.stringify(jo); return result; } |
HABILITAR BOT 24 x 7 :
La solución BOT emplea Web Whatsapp para recibir y enviar mensajes , por lo cual es necesario la contratación de un servidor para el BOT este operativo 24 x 7 , debido a ello existe un pago mensual de $ 8.00 .
ASESORIA PERSONALIZADA :
En caso necesites alguna asesoría personalizada agéndame un espacio.
https://reservarasesoriaanlusoft.blogspot.com/
No hay comentarios:
Publicar un comentario