martes, 31 de mayo de 2022

Whatsapp API Business (Parte 3) BOT Auto Responder

 Hola a continuación les dejo material para la tercera parte de los tutoriales API whatsapp liberado en el mes de Mayo 2022 e integrarlo con Google Sheet les va permitir autoresponder a botones de solicitud de información

Video Implementación



Página Meta facebook


En la siguiente pagina pueden configurar sus plantillas y mensajes del API Whatsapp Business

https://developers.facebook.com/apps/?show_reminder=true


Y el token lo obtienen desde :



Plantillas

https://business.facebook.com/wa/manage/message-templates


Configuracion webhook


Paso 1 : Configurar el webhook con la URL AppScript

Paso 2 : Aceptar las notificaciones del tipo mensaje:


Página Excel Plantilla


https://docs.google.com/spreadsheets/d/13leXNvtIBGGcKlUKaITGFn980wXdnSeH58TSr3xSads/edit?usp=sharing


Código AppScript 



function onOpen() {

createMenus(); } function createMenus() { var menu = SpreadsheetApp.getUi().createMenu("Whatsapp") menu.addItem('Notificar Whatsapp', 'enviarwhatsapp'); menu.addToUi(); } function enviarwhatsapp() { var response = "No" try { var response = Browser.msgBox('Seguro que quiere enviar msj ahora ?', Browser.Buttons.YES_NO); } catch (e) { Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK); } if (response == "yes") { enviar("Mensajes", "", ""); console.log("Funcion fin programar : la fecha y hora: " + new Date()); Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK); } } function enviar(hoja, numero_enviar, mensaje_buscar) { 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(); if (excel.getSheetByName(hoja)) { var sheet = excel.getSheetByName(hoja); var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); for (var i = 0, l = rows.length; i < l; i++) { var numero = ""; if (numero_enviar != "") { if (mensaje_buscar.toUpperCase() == rows[i][0].toUpperCase()) { numero = numero_enviar; } else { continue; } } else { numero = rows[i][0]; } var plantilla = rows[i][4]; var payload = JSON.parse(JSON.stringify({ "messaging_product": "whatsapp", "to": numero, "type": "template", "template": { "name": plantilla, "language": { "code": "es" }, "components": [] } })); var texto = []; if (rows[i][1]) { texto = rows[i][1].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] }); } } // SE AGREGA IMAGEN AL HEADER var imagen = rows[i][3]; if (imagen) { payload.template.components.push({ "type": "header", "parameters": [{ "type": "image", "image": { "link": imagen } }] }); } // SE AGREGA DOCUMENTO AL HEADER var documento = rows[i][2]; if (documento) { var nombre_archivo = (documento).substring((documento).lastIndexOf("/") + "/".length, (documento).length); payload.template.components.push({ "type": "header", "parameters": [{ "type": "document", "document": { "link": documento, "filename": nombre_archivo } }] }); } 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()); Utilities.sleep(2000); if (numero_enviar == "") { if (json.error) { sheet.getRange(2 + i, 6).setValue("ERROR"); } else { sheet.getRange(2 + i, 6).setValue("EXITO"); } } else { break; } } } } catch (e) { sheet_configuracion.getRange(10, 2).setValue(e); } } function doPost(e) { var operacion = JSON.parse(e.postData.contents); var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_solicitud = excel.getSheetByName("Solicitudes"); var numero = operacion.entry[0].changes[0].value.messages[0].from; var mensaje = operacion.entry[0].changes[0].value.messages[0].button.text; sheet_solicitud.appendRow([numero, mensaje, new Date(),JSON.stringify(operacion)]); enviar("Conversacion", numero, mensaje); var respuesta = {}; return ContentService.createTextOutput(JSON.stringify(operacion)).setMimeType(ContentService.MimeType.JSON); } function doGet(e) { // var callback = e.parameter.callback; var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_configuracion = excel.getSheetByName("Configuracion"); var cadena = e.parameter["hub.challenge"]; 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); }



ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/


lunes, 30 de mayo de 2022

Whatsapp API Business (Parte 2) Imagen, Documento,Botones

 Hola a continuación les dejo material para la segunda parte de los tutoriales API whatsapp liberado en el mes de Mayo 2022 e integrarlo con Google Sheet les va permitir el envio de botones , imagenes, documentos de forma masiva

Video Implementación




Página Meta facebook


En la siguiente pagina pueden configurar sus plantillas y mensajes del API Whatsapp Business

https://developers.facebook.com/apps/?show_reminder=true


Y el token lo obtienen desde :



Plantillas

https://business.facebook.com/wa/manage/message-templates



Página Excel Plantilla


https://docs.google.com/spreadsheets/d/1HSsPHXH3-SNjl6Cth9jyRe_vG505jONCOh2Go-4RIXU/edit?usp=sharing



Código AppScript 


function onOpen() { createMenus(); } function createMenus() { var menu = SpreadsheetApp.getUi().createMenu("Whatsapp") menu.addItem('Notificar Whatsapp', 'enviarwhatsapp'); menu.addToUi(); } function enviarwhatsapp() { var response = "No" try { var response = Browser.msgBox('Seguro que quiere enviar msj ahora ?', Browser.Buttons.YES_NO); } catch (e) { Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK); } if (response == "yes") { enviar(); console.log("Funcion fin programar : la fecha y hora: " + new Date()); Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK); } } function enviar() { 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(); if (excel.getSheetByName("Mensaje")) { var sheet = excel.getSheetByName("Mensaje"); 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 plantilla = rows[i][4]; var payload = JSON.parse(JSON.stringify({ "messaging_product": "whatsapp", "to": numero, "type": "template", "template": { "name": plantilla, "language": { "code": "es" }, "components": [] } })); var texto = []; if (rows[i][1]) { texto = rows[i][1].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] }); } } // SE AGREGA IMAGEN AL HEADER var imagen = rows[i][3]; if (imagen) { payload.template.components.push({ "type": "header", "parameters": [{ "type": "image", "image": { "link": imagen } }] }); } // SE AGREGA DOCUMENTO AL HEADER var documento = rows[i][2]; if (documento) { var nombre_archivo = (documento).substring((documento).lastIndexOf("/") + "/".length, (documento).length); payload.template.components.push({ "type": "header", "parameters": [{ "type": "document", "document": { "link": documento, "filename": nombre_archivo } }] }); } 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()); Utilities.sleep(2000); if (json.error) { sheet.getRange(2 + i, 6).setValue("ERROR"); } else { sheet.getRange(2 + i, 6).setValue("EXITO"); } } } } catch (e) { sheet_configuracion.getRange(10, 2).setValue(e); } }



ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/

martes, 24 de mayo de 2022

Whatsapp API Business (Parte 1)

 

Hola a continuación les dejo material para que puedan implementar su API whatsapp liberado en el mes de Mayo 2022 e integrarlo con Google Sheet.

Video Implementación



Página Meta facebook


En la siguiente pagina pueden configurar sus plantillas y mensajes del API Whatsapp Business

https://developers.facebook.com/apps/?show_reminder=true


Y el token lo obtienen desde :




Página Excel Plantilla


https://docs.google.com/spreadsheets/d/1EtacZpXD6mFFYx8tywMi7SMJ2mVd3E_JAyjQVO2mvPA/edit?usp=sharing


Código AppScript 


function onOpen() {

    createMenus();

}


function createMenus() {

    var menu = SpreadsheetApp.getUi().createMenu("Whatsapp")

    menu.addItem('Notificar Whatsapp', 'enviarwhatsapp');

    menu.addToUi();

}

function enviarwhatsapp() {


    var response = "No"

    try {

        var response = Browser.msgBox('Seguro que quiere enviar msj ahora ?', Browser.Buttons.YES_NO);

    } catch (e) {

        Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK);

    }

    if (response == "yes") {

        enviar();

        console.log("Funcion fin programar : la fecha y hora: " + new Date());

        Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK);

    }

}


function enviar() {


    var excel = SpreadsheetApp.getActiveSpreadsheet();

    var sheet_configuracion = excel.getSheetByName("Configuracion");

    var plantilla = sheet_configuracion.getRange(1, 2).getValue();

    var token = sheet_configuracion.getRange(2, 2).getValue();

    var api = sheet_configuracion.getRange(3, 2).getValue();


  if (excel.getSheetByName("Mensaje")) {

        var sheet = excel.getSheetByName("Mensaje");

        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 nombre = rows[i][1];

            var payload = {

                "messaging_product": "whatsapp",

                "to": numero,

                "type": "template",

                "template": {

                    "name": plantilla,

                    "language": {

                        "code": "en_US"

                    },

                    "components": [{

                        "type": "body",

                        "parameters": [

                            {

                                "type": "text",

                                "text": nombre

                            }

                        ]

                    }]

                }

            }


            var options =

            {

              'headers': { "Content-Type": "application/json","Authorization": token},

                'method': "POST",

                'payload': JSON.stringify(payload)

            };


            try {

                var response = UrlFetchApp.fetch(api, options);

                var json = JSON.parse(response.getContentText());

            } catch (e) {


            }


        }

    }

}


ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/


domingo, 22 de mayo de 2022

whatsapp enviar y programar notificaciones msj,imagen,documento masivamente

 A continuación se muestra una solución para google sheet para enviar masivamente 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

¿ Deseas que se habilite 24 x 7 y que permita enviar sin limites de mensajes al mes ?

 

Video Solucion:


Página para leer código QR:

https://anlusoftware.blogspot.com/

Google Sheet Video

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/1vz9vZ4iMJFZ7QbJga7wR5Zvx_-hKjX2ZZjtiJXJEOQo/edit?usp=sharing

Método que envía mensajes de forma asíncrona a whatsapp

NOTA En whatsapp normal permite enviar mensajes,  imágenes , documentos , botones  en la versión whatsapp business solo envia mensajes

Codigo AppScript (indica en el video)

function onOpen()
{
  createMenus();
}

function createMenus()
{ 
  var menu = SpreadsheetApp.getUi().createMenu("Whatsapp")
  menu.addItem('Enviar Mensajes Ahora', 'enviar'); 
  menu.addToUi();
  menu.addItem('Programar Envio Mensajes', 'programar'); 
  menu.addToUi();
  menu.addItem('Detener Envio Mensajes', 'detenerprogramar'); 
  menu.addToUi();
}


function enviar(){
  
  var response ="No"
  try{
    var response = Browser.msgBox('Seguro que quiere enviar msj ahora ?', Browser.Buttons.YES_NO); 
  } catch (e) {
    Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK);   
  }
  if ( response == "yes")
  {
    solonotificarwhatsapp();
    console.log("Funcion fin programar : la fecha y hora: " + new Date());
    Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK); 
  }
  
}

function detenerprogramar(){
  
  console.log("Funcion inicio programar : la fecha y hora: " + new Date());
  var response ="No"
  try{
    var response = Browser.msgBox('Se detuvo las tareas existentes', Browser.Buttons.YES_NO); 
  } catch (e) {
    Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK);   
  }
  if ( response == "yes")
  {
     //ELIMINAMOS LA PROGRAMACION
     var triggers = ScriptApp.getProjectTriggers();
     for(var i = 0; i < triggers.length; i++){
       if(triggers[i].getTriggerSource() == ScriptApp.TriggerSource.CLOCK && triggers[i].getHandlerFunction()=="solonotificarwhatsapp"){
        ScriptApp.deleteTrigger(triggers[i]);
      };
    };
    Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK); 
  }
  
}


function programar(){
  
  console.log("Funcion inicio programar : la fecha y hora: " + new Date());
  var excel= SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet_configuracion =excel.getSheetByName("Configuracion");
  var horas = sheet_configuracion.getRange(3, 2).getValue();
  var response ="No"
  try{
    var response = Browser.msgBox('Se detuvo las tareas existentes, seguro que quiere programar tarea cada  '+minutos+' minutos ?', Browser.Buttons.YES_NO); 
  } catch (e) {
    Browser.msgBox('La acción no se ha realizado por formato fecha programacion', Browser.Buttons.OK);   
  }
  if ( response == "yes")
  {    
     //ELIMINAMOS LA PROGRAMACION ACTUAL
     var triggers = ScriptApp.getProjectTriggers();
     for(var i = 0; i < triggers.length; i++){
       if(triggers[i].getTriggerSource() == ScriptApp.TriggerSource.CLOCK && triggers[i].getHandlerFunction()=="solonotificarwhatsapp"){
        ScriptApp.deleteTrigger(triggers[i]);
      };
    };
    //cada 5 hora se programa
    ScriptApp.newTrigger("solonotificarwhatsapp").timeBased().everyHours(horas).create();
    console.log("Funcion fin programar : la fecha y hora: " + new Date());
    Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK); 
  }
  
}



var api="https://script.google.com/macros/s/AKfycbyoBhxuklU5D3LTguTcYAS85klwFINHxxd-FroauC4CmFVvS0ua/exec";

function solonotificarwhatsapp(){

   var excel= SpreadsheetApp.getActiveSpreadsheet(); 
   var sheet = excel.getSheetByName("Mensaje");
   var rows = sheet.getRange(2,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues(); 
   var dataArray = [];
   var curDate = Utilities.formatDate(new Date(), "GMT-5", "dd/MM/yyyy HH:mm:ss");
   for(var i = 0, l= rows.length; i<l ; i++){
       var record = {};
       var estado =rows[i][0];
       if(estado==="Si"){
          var numero =rows[i][2];
          var mensaje =rows[i][3];
          var imagen =rows[i][4];
          var url =rows[i][5];
         if(mensaje){
            record['numero'] = numero;
            record['mensaje'] = mensaje;
            dataArray.push(record);    
          }else if(imagen){
            record['numero'] = numero;
            record['imagenbase64'] = imagen;
            dataArray.push(record);           
          }else if(url){
            record['numero'] = numero;
            record['url'] = url;
            dataArray.push(record);           
          }
          sheet.getRange(i+2, 2).setValue(curDate);  
       }
   }
  
  if(dataArray.length>0){
    var sheet_configuracion = excel.getSheetByName("Configuracion");
    var codigoQR = sheet_configuracion.getRange(2, 1).getValue();
    var payload =
        {
          "op":"registermessage",
          "token_qr":codigoQR,
        }
    payload.mensajes =dataArray;
    var options =
        {
          'headers': {"Content-Type" : "application/json"},
          'method' : "POST",
          'payload' : JSON.stringify(payload)
        };
    
    var response = UrlFetchApp.fetch(api, options);
    var json = JSON.parse(response.getContentText());
  }
}

Whatsapp notificacion con google sheets

  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

¿ Deseas que se habilite 24 x 7 y que permita enviar sin limites de mensajes al mes ?

 

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);
    }

}



WHATSAPP BOT con IA GPT-4o

  Hola a continuación le dejo material para que puedan implementar un BOT whatsapp usando IA de Chat GPT modelo 4o Pasos: 1) Crear usuario y...