A continuación se muestra una solución para Google sheet para enviar mensajes , imágenes , documentos a través de WhatsApp
¿ Que necesitas para implementarlo y cuanto mensajes te permite enviar ?
- Crear la hoja Google sheet como indica el video
- Escanear la hoja para obtener token QR
Video Solución:
Google Sheet
Crear una hoja Sheet en su cuenta con los mismo "nombres de las Hojas " con las siguientes "columnas y campos" similares a la siguiente hoja
https://docs.google.com/spreadsheets/d/1vOaz_PwWhAorMowwZrtCVhnLqOBMOYVqTBKWGIXltkE/edit?usp=sharing
Método que envía mensajes de forma asíncrona a WhatsApp
Esperar 10 seg a que aparesca el menu Whatsapp , en caso no aparecer verificar que este logueado con tu cuenta de gmail
Codigo AppScript (indica en el video)
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) Enviar Mensaje Manual - Whatsapp', 'enviarwhatsapp'); 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 == "resultado") { respuesta = resultado(JSON.stringify(operacion)); } return ContentService.createTextOutput(respuesta).setMimeType(ContentService.MimeType.JSON); } function grupos(informacion) { try { var resultado = JSON.parse(informacion); var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet = excel.getSheetByName("Configuracion"); sheet.getRange(4,2).setValue(JSON.stringify(resultado.mensajes)); var result, jo = {}; jo.status = '0'; jo.message = ' Se grabo el registrp'; } catch (e) { jo.status = '-1'; jo.message = e.toString(); } var result = JSON.stringify(jo); return result; } function resultado(informacion) { var jo = {}; try { var resultado = JSON.parse(informacion); var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet = excel.getSheetByName("MensajeManual"); for (let i = 0; i < resultado.mensajes.length; i++) { sheet.getRange((2 + (parseInt(resultado.mensajes[i].posicion))), 6).setValue(resultado.mensajes[i].estado); } jo.status = '0'; jo.message = ' Se grabo el registrp'; } catch (e) { jo.status = '-1'; jo.message = e.toString(); } return JSON.stringify(jo); } function enviarwhatsapp() { var response = "No" var token_session = ""; try { token_session = sheet_qr.getRange(3, 2).getValue(); var response = Browser.msgBox('Seguro que quiere enviar los mensajes grabados en la hoja MensajeManual ahora , 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("MensajeManual")) { var dataArray = []; var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet = excel.getSheetByName("MensajeManual"); var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); for (var i = 0, l = rows.length; i < l; i++) { var numero = rows[i][0]; var mensaje = rows[i][1]; var imagen = rows[i][2]; var url = rows[i][3]; var boton = rows[i][4]; var arrayNumero = ("" + numero).split(";"); for (var ii = 0; ii < arrayNumero.length; ii++) { if (mensaje) { var record = {}; record['numero'] = arrayNumero[ii]; record['mensaje'] = mensaje; record['posicion'] = ""+i; dataArray.push(record); } if (imagen) { var record = {}; record['numero'] = arrayNumero[ii]; record['imagenbase64'] = imagen; record['posicion'] = ""+i; dataArray.push(record); } if (url) { var record = {}; record['numero'] = arrayNumero[ii]; record['url'] = url; record['posicion'] = ""+i; dataArray.push(record); } if (boton) { var record = {}; record['numero'] = arrayNumero[ii]; record['boton'] = "boton"; record['contenido'] = JSON.parse(boton); record['posicion'] = ""+i; dataArray.push(record); } } } var payload = { "op": "registermessage","token_qr":token_session,"listener":true,"mensajes":dataArray,"app_script": appscript}; 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 notificaron los mensajes', Browser.Buttons.OK); } else { Browser.msgBox('Error al iniciar : ' + json.message, Browser.Buttons.OK); } } catch (e) { Browser.msgBox('Se notificaron los mensajes asincrono ', Browser.Buttons.OK); } } } } 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 { // sheet_qr.getRange(3, 2).setValue(""); 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(); } } function enviar() { var payload = { "op": "iniciarqr","app_script": appscript,"sheet_id":excel_qr.getId(), "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()); Browser.msgBox(json.message, Browser.Buttons.OK); } catch (e) { Browser.msgBox(e.toString(), Browser.Buttons.OK); } }
|
Hola estoy interesado en la aplicacion sin limites. Quiero que se notifique cuando se llene el formulario. Seria por 5 años (60 meses) por favor contactame a arngonzalezt@gmail.com para que coordinemos esta aplicacion.
ResponderEliminarHola. Muchas gracias por este buen trabajo. Estoy intentando entender todo el código y me gustaría saber qué es esto: var api_interna = "https://script.google.com/macros/s/AKfycbyoBhxuklU5D3LTguTcYAS85klwFINHxxd-FroauC4CmFVvS0ua/exec";
ResponderEliminarParece una macro. Dónde se encuentra y qué hace? Gracias.
La línea de código que proporcionas es una URL de una aplicación de Google Apps Script que está alojada en Google Drive y que puede ser ejecutada por cualquier usuario con acceso a ella.
EliminarLa parte de https://script.google.com/macros/s/ indica que se trata de una aplicación de Google Apps Script.
AKfycbyoBhxuklU5D3LTguTcYAS85klwFINHxxd-FroauC4CmFVvS0ua es un identificador único que identifica la aplicación de Google Apps Script en particular.
/exec indica que esta es una ejecución de la aplicación de Google Apps Script.
En resumen, la URL que proporcionas se utiliza para ejecutar una aplicación de Google Apps Script. La aplicación de Google Apps Script puede tener cualquier tipo de funcionalidad programada, como enviar un correo electrónico, acceder a datos de una hoja de cálculo de Google Sheets, entre otros.
Una consulta,entiendo que ese link contiene la función que permite conectar whatsapp con AppScript y bueno entiendo que es privada por que dicha función es fruto de tu trabajo,pero quería consultar si para esa funcion/macro api_interna estás usando la API de Whatsapp business o alguna API de whatsapp en específico?Podrías indicar a grandes rasgos que hace por favor.Muchas gracias por el video,muy útil.
EliminarBuenos días Golfredo,
ResponderEliminarPrimero que todo, gracias por compartir conocimientos. En 2do lugar, que es el objeto de éste comentario, cuando haces mención a que es: "una aplicación de Google Apps Script que está alojada en Google Drive y que puede ser ejecutada por cualquier usuario con acceso a ella.", ¿Es una aplicación que está alojada en tu Google Drive? Gracias
Hola, estoy intentando hacer todo el proceso pero me arroja un error en a linea 4 del codigo
ResponderEliminarTypeError: Cannot read properties of null (reading 'getRange')
¿Lograste resolver el problema? para que nos des la solución. Y así saber qué hacer.
Eliminar¿Qué garantías hay en caso yo compre que la aplicación después de un tiempo no funciones?
ResponderEliminaryo realicé todo lo explicado en el video y no me funciona. Otra consulta,si yo quisiera cambiar el mensaje que envía, se puede y cómo se hace? Gracias
ResponderEliminarHola yo solia usar tu software sin problema, hasta hace unos dias que ya no me deja enviar mensajes, y al querer generar un nuevo QR sale un error y no genera el QR
ResponderEliminarDisculpa la molestia. Me aparece este error:
ResponderEliminarException: Request failed for https://fyw27ffv6k.execute-api.us-east-2.amazonaws.com returned code 504. Truncated server response: {"message": "Endpoint request timed out"} (use muteHttpExceptions option to examine full response)
Tiene solucion este problema?
Eliminartengo el mismo problema, alguien lo pudo solucionar?
EliminarMuchas gracias por este código! es uy útil.
ResponderEliminarTengo una consulta, me da este error: "Exception: Attribute provided with no value: url"
Sabés qué estoy haciendo mal?
Muchas gracias denuevo!
Hola amigo, como estas, si lograste solucionar el problema? tengo el mismo
EliminarNo logré
Eliminar