Mostrando entradas con la etiqueta bot whatsapp. Mostrar todas las entradas
Mostrando entradas con la etiqueta bot whatsapp. Mostrar todas las entradas

viernes, 28 de febrero de 2025

Chatbot whatsapp con IA Claude anthropic

 Hola a continuación le dejo material para que puedan implementar un BOT de un carrito de compras y entregando una factura , enviando una notificacion y enviando un correo, a traves de BOT whatsapp empleando la Super IA Germini de Google

URL Super Sheet Plantilla


WEB Claude generar KEY

https://console.anthropic.com/settings/keys

Entrenamiento:

Eres ChatBOT que vende frutas debes brindar respuestas amigables y cortas sin indicar que eres IA.

Los productos que vendes son :
manzana a 3 soles el kilo
papaya a 1 sol el kilo
plátano a 5 soles el kilo
sandia 1 sol el kilo.

En caso te soliciten imágenes de los productos le entregas los siguientes :
Papaya su imagen es 
https://lirp.cdn-website.com/586fb047/dms3rep/multi/opt/papaya-1920w.jpg
Plátano su imagen es https://www.contactococina.com/media/wysiwyg/bananas-614090_1280.jpg
Sandia su imagen es https://5aldia.cl/wp-content/uploads/2018/03/sandia.jpg

En caso te soliciten el catalogo de la frutería le entregas el siguiente archivo https://superavila.com/pdf/CATALOGO-FYV.pdf

Debes solicitar al cliente su nombre , dirección de envió y los productos a comprar.
Cuando se termine la venta debes brindar el detalle de la venta para que el cliente confirme , solo cuando se confirme la venta debes responder !Pedido en Proceso!

------------------------------------

Palabras de Cierre

!Pedido en Proceso:::Pedido en Proceso!

---------------------------------------

Entrenamiento de Cierre

Eres un analizador de conversaciones recibiras la conversacion de un cliente con nuestra empresa y procederas a realizar los siguientes pasos:
Paso 1 : Analizar la conversacion
Paso 2 : Solo proporcionar una respuesta JSON compatible con RFC8259 siguiendo este formato sin desviaciones utilizando los datos de la ultima cotizacion realizada:
{"nombre":"Nombre Cliente","direccion":"Direccion del cliente","detalleproducto":"Detalle del productos adquiridos","empresa":"ANLUSOFT","moneda":"S/","codigoempresa":"1922727272","productos":[{"nombre":"nombre producto","cantidad":"cantidad del producto ","precio":"precio del producto","subtotal":"subtotal del roducto "}]}



MAS VIDEO SUPER SHEET



CONTRATAR SERVER :

En desea contratar los server dedicados.

1 mes

https://anlusoftware.blogspot.com/?p=f58ac0b0

6 meses

https://anlusoftware.blogspot.com/?p=f58ac0h1

1 año

https://anlusoftware.blogspot.com/?p=f58ac0h21

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

miércoles, 15 de enero de 2025

Chatbot Taxi en whatsapp con Chatgpt

 Hola a continuación le dejo material para que puedan implementar un BOT de solicitud de taxi a traves de BOT whatsapp empleando la Super IA Chatgpt 

URL Super Sheet Plantilla


WEB Chatgpt generar KEY


Entrenamiento :

Eres un agende TAXI Anlusoft tu labor sera registrar las solicitudes de taxi de nuestros clientes
Para lo cual debes seguir los siguientes pasos
Primero : Saludarlo y indicarle el tipo de servicio que desea con una opcion de Menu
1)TAXI
2)TAXI Premium
3) Taxi Compartido
Segundo : Ingrese su nombre
Tercero : Que comparta su ubicacion en donde se encuentra para recogerlo puedes guiarte de la imagen siguiente
https://diariosanrafael.com.ar/wp-content/uploads/2022/03/Como-enviar-mi-ubicacion-en-WhatsApp.jpg
Cuarto : Que ingrese una referencia de su ubicacion
Quinta: Que Indique la direccion destino a donde dirige
Sexto : Si ya cuenta con todos los datos tipo servicio , nombre,ubicacion recogo referencia , direccion destino le mostrar el detalle de los datos y le pediras que los confirme , si lo confirma responderas sin desviaciones Solicitud en Proceso ! en unos minutos un conductor se contactara contigo

------------------------------------

Palabras de Cierre

Solicitud en Proceso:::Solicitud en Proceso !

---------------------------------------

Entrenamiento de Cierre

Eres un analizador de conversaciones recibiras la conversacion de un cliente con nuestra empresa y procederas a realizar los siguientes pasos:
Paso 1 : Analizar la conversacion del cliente y el asesor , en caso no existe al numero de celular del cliente, consideraras este valor @celular@
Paso 2 : Solo proporcionar una respuesta JSON compatible con RFC8259 siguiendo este formato sin desviaciones utilizando los datos de la ultima cotizacion realizada:
{"tiposervicio":"Tipo de Servicio","nombre":"Nombre Cliente",,"celular":"Celular Cliente","referenciarecogo":"Referencia Direccion Recogo","gpsrecogo":"GPS Direccion Recogo (latitud,longitud)","direcciondestino":"Direccion de destino"}

---------------------------------------

Mensaje para notificar al grupo

Se envia la solicitud de taxi
Nombre : @nombre@
Celular: @celular@
TipoServicio : @tiposervicio@
ubicacion recogo : https://www.google.com/maps/search/?api=1&query=@gpsrecogo@
referencia recogo : @referenciarecogo@
direccion destino : @direcciondestino@

MAS VIDEO SUPER SHEET



CONTRATAR SERVER :

En desea contratar los server dedicados.

1 mes

https://anlusoftware.blogspot.com/?p=f58ac0b0

6 meses

https://anlusoftware.blogspot.com/?p=f58ac0h1

1 año

https://anlusoftware.blogspot.com/?p=f58ac0h21

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

lunes, 16 de septiembre de 2024

Asistente Chatgpt whatsapp con Google Sheet

 Hola a continuación le dejo material para que puedan implementar su chatbot con un asistentes de openai con el objetivo de ahooro de costos usando con google sheet

URL Sheet Plantilla



Entrenamiento :

Eres ChatBOT que vende frutas debes brindar respuestas amigables y  cortas sin indicar que eres IA.

Los productos que vendes son : 
manzana a 3 soles el kilo 
papaya a 1 sol el kilo
plátano a 5 soles el kilo
sandia 1 sol el kilo. 

En caso te soliciten imágenes de los productos le entregas los siguientes :
Papaya su imagen es https://elpoderdelconsumidor.org/wp-content/uploads/2024/05/papaya.jpg
Plátano su imagen es https://www.contactococina.com/media/wysiwyg/bananas-614090_1280.jpg
Sandia su imagen es https://5aldia.cl/wp-content/uploads/2018/03/sandia.jpg

En caso te soliciten el catalogo de la frutería le entregas el siguiente archivo https://superavila.com/pdf/CATALOGO-FYV.pdf

Debes solicitar al cliente su nombre , dirección de envió y los productos a comprar. 
Cuando se termine la venta debes brindar el detalle de la venta para que el cliente confirme , solo cuando se confirme la venta debes responder !Solicitud en Proceso!


CONTRATAR SERVER :

En desea contratar los server dedicados.

1 mes

https://anlusoftware.blogspot.com/?p=f58ac0b0

6 meses

https://anlusoftware.blogspot.com/?p=f58ac0h1

1 año

https://anlusoftware.blogspot.com/?p=f58ac0h21

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

jueves, 21 de diciembre de 2023

BOT Chat GPT para la reserva de citas con Google Sheet y Whatsapp

 Hola a continuación le dejo material para que puedan implementar un BOT whatsapp usando ChatGPT de Open IA  y/o otros empleando hoja de calculo google sheet.

Pasos:

1) Entran a la hoja sheet y copian y pegan , rescatan la URL appScript

https://docs.google.com/spreadsheets/d/1VziLhKH6ovrHyCzt3snDP4AO_C4zmSPyHO0ZKcRAaKY/edit#gid=442516491

2) Crear cuenta en OpenAI : https://openai.com/api/

obtienen el token y lo reemplazan hoja configuración 

Como crear el token en este video : https://youtu.be/Y49RkOGX7Dc

3) Activar el BOT

4) Conversan con Hola al BOT Whatsapp

Video Implementación



SI DESEA HABILITAR EL 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 

IR a PAGAR

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

martes, 31 de octubre de 2023

ChatGPT Asistente con BOT Whatsapp paso a paso

  Hola a continuación le dejo material para que puedan implementar un BOT whatsapp usando ChatGPT Asistente y  hoja de calculo google sheet.

Pasos:

1) Entran a la hoja sheet y copian y pegan , rescatan la URL appScript

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

2) En su cuenta de ChatGPT https://platform.openai.com/assistants  crear un asistente y crear api key , poner esos valores al google sheet como indica el video

3) Activar el BOT

4) Conversan con las preguntas al BOT Whatsapp

Video Implementación



SI DESEA HABILITAR EL 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 

IR a PAGAR

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

sábado, 28 de octubre de 2023

BOT Chat PDF , Google Sheet y Whatsapp

  Hola a continuación le dejo material para que puedan implementar un BOT whatsapp usando ChatPDF que es una IA para enviar documentos como entrenamiento y/o otros empleando hoja de calculo google sheet.

Pasos:

1) Entran a la hoja sheet y copian y pegan , rescatan la URL appScript

https://docs.google.com/spreadsheets/d/14bn3akr27ub67LSGT6SrvZjo5yx1UwPWgVbk-a5qK7A/edit?usp=sharing

2) Crear cuenta en ChatPDF :  https://www.chatpdf.com/   y obtiene el API KEY  My Account / Developers lo reemplazan hoja configuración celda 4B

3) Activar el BOT

4) Conversan con las preguntas al BOT Whatsapp

Video Implementación



SI DESEA HABILITAR EL 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 

IR a PAGAR

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

jueves, 6 de octubre de 2022

BOT Whatsapp de reserva de vehiculo con confirmación a grupos

 Hola a continuación le dejo material para que puedan implementar un BOT Whatsapp que le permite reserva vehiculos de tipo taxis , motos y otros y que permite reenviar la confirmación de la reserva a un Grupo de Whatsapp

1) Conversele al numero de celular .

2) El BOT trabaja con la siguiente hoja sheet se iran almacenado los registros ahi,

https://docs.google.com/spreadsheets/d/1YDrkpt7cuovZoMcyrZbcQjVafD6F2NZAOQe1TiMDVdY/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

Video Implementación


Pasos de ejecución

Luego de haber copiado el código appscript y desplegarlo , ejecutar la funcion onOpen y se mostrara un menu de opciones Whatsapp , iniciar con el paso 1 y se mostrara codigo QR que debe escanearlo con su Whatsapp y se obtendra token de session en la celda 3B

Luego ejecutar el paso 2 Menu Whatsapp se iniciara el BOT

Esperar 10 seg a que aparesca el menu Whatsapp

Código AppScript 


var excel_qr = SpreadsheetApp.getActiveSpreadsheet();

var sheet_qr = excel_qr.getSheetByName("Configuracion");

var sheet_informacion = excel_qr.getSheetByName("Informacion");

var sheet_solicitud = excel_qr.getSheetByName("Solicitud");

var rows_solicitud = [];

var gmt = "GMT-5";

try {

  rows_solicitud = sheet_solicitud.getRange(2, 1, sheet_solicitud.getLastRow() - 1, sheet_solicitud.getLastColumn()).getValues();

} catch (ee) {

}

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

var token_session = "" + sheet_qr.getRange(3, 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_v2');

  menu.addItem('3) Recuperar Grupo Whatsapp', 'recuperargrupos');

  menu.addToUi();

}


function recuperargrupos() {


  var response = "No"

  var token_session = "";

  try {

    token_session = sheet_qr.getRange(3, 2).getValue();

    var response = Browser.msgBox('Seguro que quiere recuperar grupos del 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") {

    var dataArray = [{ "mensaje": "grupo" }];

    var payload = { "op": "registermessage", "token_qr": token_session, "listener": "true", "grupos": dataArray };

    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 para recuperar grupos ', Browser.Buttons.OK);

      } else {

        Browser.msgBox('Error al iniciar : ' + json.message, Browser.Buttons.OK);

      }

    } catch (e) {

      Browser.msgBox('Se habilito el BOT para recuperar grupos asincrono ', Browser.Buttons.OK);

    }

  }

}


function doPost(e) {


  var operacion = JSON.parse(e.postData.contents)

  var respuesta = "";

  console.log("INICIO", JSON.stringify(operacion));

  if (operacion.op == "qr") {

    respuesta = generar(JSON.stringify(operacion));

  } else if (operacion.op == "find_conversacion") {

    sheet_informacion.appendRow(["JSON ENTRADA", new Date(), operacion]);

    respuesta = enviar_bot(JSON.stringify(operacion), "Whatsapp");

    sheet_informacion.appendRow(["JSON SALIDA", new Date(), respuesta]);

  } else if (operacion.op == "grupos") {

    respuesta = grupos(JSON.stringify(operacion));

  }

  return ContentService.createTextOutput(respuesta).setMimeType(ContentService.MimeType.JSON);

}


function grupos(informacion) {

  try {

    var resultado = JSON.parse(informacion);

    sheet_qr.getRange(6, 2).setValue(JSON.stringify(resultado.mensajes));

    var result, jo = {};

    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 enviar_bot(messague) {

  var conversacion_ingresado = {};

  try {


    var mensaje_json = JSON.parse(messague);

    if (mensaje_json.mensaje == "documento_send") {

      base64 = mensaje_json.documento.data;

      mensaje_json.documento.data = "Se puso vacio";

    } else if (mensaje_json.mensaje == "ubicacion_send") {

      mensaje_buscar = "ubicacion_send";

    } else {

      mensaje_buscar = mensaje_json.mensaje;

    }

    numero_enviar = (mensaje_json.numero).substring(0, (mensaje_json.numero).lastIndexOf("@"));

    /* 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 sheet = excel_qr.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 + "").toUpperCase()));

    var evento_error = rows.find((item) => item[0] === "Error");

    if (evento === undefined) {

      var filtroconversacion = conversaciones.filter((item) => item.numero == numero_enviar);

    sheet_informacion.appendRow(["filtroconversacion",new Date(),JSON.stringify(filtroconversacion)]);


      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;

        } else {

          // CASO SEAN ARREGLOS ::

          var evento_retorna_arreglo_menu = evento_retorno.split(";");

          if (evento_retorna_arreglo_menu.length > 1) {

            for (let jl = 0; jl < evento_retorna_arreglo_menu.length; jl++) {

              var evento_msj = evento_retorna_arreglo_menu[jl].split(",");

              if ((evento_msj[1] + "") === ("" + mensaje_buscar)) {

                var evento_retornar_menu = rows.find((item) => item[0] === evento_msj[0]);

                if (evento_retornar_menu !== undefined) {

                  evento = evento_retornar_menu;

                  break;

                }

              }

            }

          }

        }

      }

    }

    if (evento[0] == "Error" && evento_start && evento_start[1].includes("%%%")) {

        evento = evento_start;

    }

    var conversacion_ingresado = { status: "0", tipo: "mensaje", numero: numero_enviar, mensaje_entrada: mensaje_buscar, evento: evento[0], retornar: evento[3], mensaje_salida: evento[2] };

    var flag_close = false;

    sheet_informacion.appendRow(["evento",new Date(),JSON.stringify(conversacion_ingresado)]);

    if (conversacion_ingresado.evento == "Start") {

      // VALIDAMOS SI EXISTE NOMBRE   

      var evento_nombre = rows_solicitud.findLast((item) => item[2]+"" === ""+numero_enviar);

      var mensajes_ = [];

      if(evento_nombre){

        conversacion_ingresado.temporal_nombre = evento_nombre[3];

        var mensaje_evento = rows.find((item) => item[0] === "MenuInicio");

        mensajes_.push({ "tipo": "mensaje", "mensaje_salida": conversacion_ingresado.mensaje_salida.replace("@nombre@",evento_nombre[3])});

        mensajes_.push({ "tipo": "mensaje", "mensaje_salida": mensaje_evento[2]});

        conversacion_ingresado.retornar=mensaje_evento[3];

      }else{  

        var mensaje_evento = rows.find((item) => item[0] === "Solicitar_Nombre");

        mensajes_.push({ "tipo": "mensaje", "mensaje_salida": conversacion_ingresado.mensaje_salida.replace("@nombre@","") })

        mensajes_.push({ "tipo": "mensaje", "mensaje_salida": mensaje_evento[2] })

        conversacion_ingresado.retornar=mensaje_evento[3];

      }

      conversacion_ingresado.tipo = "";

      conversacion_ingresado.mensaje_salida = "";

      conversacion_ingresado.mensajes = mensajes_;

    } else if (conversacion_ingresado.evento == "Deseo_Que_Me_Atienda_Una_Persona") {

      flag_close = true;

    } else if (conversacion_ingresado.evento == "End_Ver_Mis_Reservas") {

      var mensaje_ = rows.find((item) => item[0] === "End_Ver_No_Existe_Mis_Reservas")[2];

      var contador = 0;

      for (var i = 0; i < rows_solicitud.length; i++) {

        var dataRow = rows_solicitud[i];

        if ((dataRow[2] + "") === "" + numero_enviar && dataRow[7] === "Pendiente") {

          if (contador == 0) {

            mensaje_ = conversacion_ingresado.mensaje_salida +"\n";

          }

          mensaje_ += (i + 1) + " " + dataRow[1] + " " + dataRow[6] + "\n";

          contador = contador + 1;

        }

      }

      conversacion_ingresado.mensaje_salida = mensaje_;

      flag_close = true;

    } else if (conversacion_ingresado.evento == "End_Solicitar_Taxi_Ahora" || conversacion_ingresado.evento == "End_Solicitar_Taxi_Reservar") {

      var direccion_cliente = "";

      if (mensaje_json.mensaje === "ubicacion_send") {

        ubicacion_cliente = mensaje_json.documento.latitud + "," + mensaje_json.documento.longitud;

        var response = Maps.newGeocoder().reverseGeocode(mensaje_json.documento.latitud, mensaje_json.documento.longitud);

        for (var iz = 0; iz < response.results.length; iz++) {

          direccion_cliente = response.results[iz].formatted_address;

          break;

        }

      }

      var conversaciones_final = conversaciones.filter((item) => item.numero == conversacion_ingresado.numero);

      var tipo_vehiculo = "Auto";

      var evento_tipo_vehiculo = (conversaciones_final.find((item) => item.evento == "Solicitar_Vehiculo_Tipo_Ahora"));

      if (evento_tipo_vehiculo && evento_tipo_vehiculo.mensaje_entrada == "2") {

        tipo_vehiculo = "Moto";

      }

      var nombre = "";

      var evento_nombre = (conversaciones_final.find((item) => item.evento == "MenuInicio"));

      var evento_start = (conversaciones_final.find((item) => item.evento == "Start"));

      nombre = (evento_nombre && evento_nombre.mensaje_entrada ? evento_nombre.mensaje_entrada : evento_start.temporal_nombre);

      var fecha_solicitud = "." + Utilities.formatDate(new Date(), gmt, "yy-MM-dd HH:mm");

      if (conversacion_ingresado.evento == "End_Solicitar_Taxi_Reservar") {

        var evento_reserva = (conversaciones_final.find((item) => item.evento == "Solicitar_Taxi_Reservar"));

        fecha_solicitud = (evento_reserva ? evento_reserva.mensaje_entrada : "Sin Fecha");

      }

      var mensaje = (conversacion_ingresado.mensaje_salida + "").replace("@fechahora@", fecha_solicitud).replace("@celular@", numero_enviar).replace("@nombre@", nombre).replace("@direccion_cliente@", direccion_cliente).replace("@gps@", "https://maps.google.com/?q="+ubicacion_cliente).replace("@tipo@", ubicacion_cliente);

      if (tipo_vehiculo == "Moto") {

        conversacion_ingresado.numeroreenviar = sheet_qr.getRange(4, 2).getValue();

      } else {

        conversacion_ingresado.numeroreenviar = sheet_qr.getRange(5, 2).getValue();

      }

      conversacion_ingresado.mensaje_salida = mensaje;

      conversacion_ingresado.reenviar = mensaje;

      sheet_solicitud.appendRow([new Date(), fecha_solicitud, numero_enviar, nombre, tipo_vehiculo, ubicacion_cliente, direccion_cliente, 'Pendiente', JSON.stringify(conversaciones_final)]);

      flag_close = true;

    }


    // SE PONE PUSH

    conversaciones.push(conversacion_ingresado);

    // FIN DE ENVIO A TELEGRAM

    if (evento[0].includes("Start") || flag_close) {

      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), 240);

  } catch (e) {

    sheet_qr.getRange(11, 11).setValue(e.toString());

    conversacion_ingresado = { status: "-1", message: e.toString() };

  }

  // CALCULO DEL TIPO DE MENSAJE

  if (conversacion_ingresado.tipo == "mensaje" && (conversacion_ingresado.mensaje_salida + "").includes("@@@")) {

    var mensajes_ = [];

    var _lst_ = (conversacion_ingresado.mensaje_salida).split("@@@");

    for (var ii = 0; ii < _lst_.length; ii++) {

      if (_lst_[ii]) {

        if (_lst_[ii].includes("http")) {

          mensajes_.push({ "tipo": "url", "mensaje_salida": _lst_[ii] })

        } else if (_lst_[ii].length > 5) {

          mensajes_.push({ "tipo": "mensaje", "mensaje_salida": _lst_[ii] })

        }

      }

    }

    conversacion_ingresado.tipo = "";

    conversacion_ingresado.mensaje_salida = "";

    conversacion_ingresado.mensajes = mensajes_;

  }

  return JSON.stringify(conversacion_ingresado);

}


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

    Browser.msgBox('La acción ha sido realizada, escanear registros luego de 10 segundos', Browser.Buttons.OK);

  }

}

function enviar() {

  var appscript = sheet_qr.getRange(1, 2).getValue();

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

  } catch (e) {

  }

}

function enviarconversacion_v2() {

  var response = "No"

  try {

    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") {

    var appscript = sheet_qr.getRange(1, 2).getValue();

    var dataConversacion = [{ "inicio": "datos" }, { "inicio": "datos" }];

    var payload = { "op": "sendmessagewk", "error_en_grupos": sheet_qr.getRange(4, 8).getValue(), "token_qr": token_session, "conversacion_bot": dataConversacion, "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 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);

    }

  }

}



SI DESEA HABILITAR EL 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 .

IR a PAGAR 8 DOLARES

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

jueves, 29 de septiembre de 2022

BOT Whatsapp ¿Quién es ese pokémon?

 Hola a continuación le dejo material para que puedan implementar un BOT Whatsapp que invoca a la API Pokemon https://pokeapi.co/  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 "quien es este pokemon" 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/1zXIh0LVrodXtgDpHp5EFaUxniNjQShi8-jy0DPvVptU/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

Video Implementación



Página Excel Plantilla


https://docs.google.com/spreadsheets/d/1zXIh0LVrodXtgDpHp5EFaUxniNjQShi8-jy0DPvVptU/edit?usp=sharing


Pasos de ejecución

Luego de haber copiado el código appscript y desplegarlo , ejecutar la funcion onOpen y se mostrara un menu de opciones Whatsapp , iniciar con el paso 1 y se mostrara codigo QR que debe escanearlo con su Whatsapp y se obtendra token de session en la celda 3B

Luego ejecutar el paso 2 Menu Whatsapp se iniciara el BOT

Esperar 10 seg a que aparesca el menu Whatsapp

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";


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 == "find_conversacion") {

        respuesta = find_conversacion(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 {

//        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();

        Browser.msgBox('La acción ha sido realizada , escanear registros luego de 10 segundos', Browser.Buttons.OK);

    }

}

function enviar() {

    var appscript = sheet_qr.getRange(1, 2).getValue();

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

    } 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") {

        var dataConversacion = [];

        if (excel_qr.getSheetByName("Conversacion")) {

            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++) {

              try{

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

                 } catch (e) {

                   Browser.msgBox('Error en la hoja conversacion revisar valores ', Browser.Buttons.OK);

                   return;

                 }

            }

        }

        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_conversacion(informacion) {

    var result, jo = {};

    try {

        var resultado = JSON.parse(informacion);

        var excel = SpreadsheetApp.getActiveSpreadsheet();

        var numero = (resultado.numero).substring(0, (resultado.numero).lastIndexOf("@"));

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

      sheet_sumarry.getRange(10, 1).setValue(informacion);

        jo.status = '1';

        jo.message = "error";

        var nombre_cliente = "";

        var nombre_adivinar = "";

        var ultimoevento = "";

        var fecha = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd HH:mm:ss");

        for (var ill = 0; ill < resultado.mensaje.length; ill++) {

            if (resultado.mensaje[ill].evento == "validar_pokemon"  || resultado.mensaje[ill].evento == "cerrar_consulta_pokemon" ) {

                nombre_adivinar = resultado.mensaje[ill].mensaje;

            }

          if (resultado.mensaje[ill].evento.includes("adivinar_pokemon_informacion")) {

                nombre_cliente = resultado.mensaje[ill].evento.replace("adivinar_pokemon_informacion","");

            }

            ultimoevento = resultado.mensaje[ill].evento;

        }

        jo.status = '1';

        jo.message = ' No existe';

      

        if (ultimoevento == "adivinar_pokemon") {

            jo.message = "No existe informacion 🚫";

            var options ={'headers': { "Content-Type": "application/json" },'method': "GET"};

            var response = UrlFetchApp.fetch("https://pokeapi.co/api/v2/pokemon?limit=1000000&offset=0", options);

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

            var nombre_aleatorio="";

            if(json.count>0){

              var aleatorio = parseInt((Math.random() * (json.count - 1) + 1));

              var url_detalle = json.results[aleatorio].url;

              var nombre_aleatorio = json.results[aleatorio].name;

              var response_detalle = UrlFetchApp.fetch(url_detalle, options);

              var json_detalle = JSON.parse(response_detalle.getContentText());

              var imagen = json_detalle.sprites.other.home.front_default;

              jo.message = "¡¡¡ Adivina el POKEMON ¡¡¡;*IMAGES*;"+imagen;

            }      

          jo.conversacion = { "mensaje": "", "evento": "adivinar_pokemon_informacion"+nombre_aleatorio, "retornar": "nombre_pokemon" };

          jo.status = '0';

        }else if (ultimoevento == "validar_pokemon") {

            jo.message = "No es el nombre del pokemon 🚫 , se llama "+nombre_cliente;

            if(nombre_cliente.toUpperCase()==nombre_adivinar.toUpperCase()){

             jo.message = "OK el nombre es correcto ✅";

            }      

          jo.conversacion = { "mensaje": "@end@", "evento": "validar_pokemon_v2", "retornar": "validar_pokemon_v2" };

          jo.status = '0';

        } else if (ultimoevento == "cerrar_consulta_pokemon") {

            jo.message = "No existe el nombre "+nombre_adivinar +"  del POKEMON ingresado 🚫 ";

            var options ={'headers': { "Content-Type": "application/json" },'method': "GET"};

            var response = UrlFetchApp.fetch("https://pokeapi.co/api/v2/pokemon?limit=1000000&offset=0", options);

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

            if(json.count>0){

              const result = json.results.find(word => word.name.toUpperCase() == nombre_adivinar.toUpperCase());

              if(result!=undefined){

                 var url_detalle = result.url;

                 var response_detalle = UrlFetchApp.fetch(url_detalle, options);

                 var json_detalle = JSON.parse(response_detalle.getContentText());

                 var imagen = json_detalle.sprites.other.home.front_default;

                jo.message = "¡¡¡ TU POKEMON "+nombre_adivinar+"¡¡¡;*IMAGES*;"+imagen;                

              }  

            }

            jo.conversacion = { "mensaje": "@end@", "evento": "cerrar_consulta_pokemon_v2", "retornar": "cerrar_consulta_pokemon_v2" };

            jo.status = '0';

        }

    } catch (e) {

        jo.status = '-1';

        jo.message = e.toString();

    }

    var result = JSON.stringify(jo);

    return result;

}



SI DESEA HABILITAR EL 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 .

IR a PAGAR 8 DOLARES

ASESORIA PERSONALIZADA :

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

https://reservarasesoriaanlusoft.blogspot.com/

🚀 Crea tu Propio Sistema de Inventario y Úsalo desde tu Celular 📱

 📱📦 Crea tu Sistema de Inventario y úsalo desde tu celular. En este video muestro cómo desarrollar un sistema de inventario con escáner us...