lunes, 4 de agosto de 2025

Crear un chatbot de asistencia con WhatsApp y BuilderBot

ChatBot

Los chatbots son asistentes virtuales que realizan alguna o muchas tareas de atención al público por medio de alguna herramienta de comunicación.

En este blog te voy a enseñar cómo hacer un chatbot para que interactúe con el usuario por medio de WhatsApp.

Paso 1: Cuenta en BuilderBot - inicio de sesión

Vamos a utilizar un SaaS, que en sí hay muchos en internet; en mi ejemplo voy a utilizar BuilderBot.

Iniciamos creando una cuenta si no la tienes; si la tienes, inicias sesión y nos aparecerá la pantalla principal.


Luego damos clic en Nuevo.

Paso 2: Configuramos los flujos.

Tenemos que tener un flujo de conversación; en este caso va a ser un ejemplo sencillo de preguntar sobre el requerimiento que tiene el usuario. 






Finalmente, ese dato lo direccionamos en otro flujo para guardar en la hoja de cálculo de Google (Sheets). Utilizamos una solicitud tipo HTTP y en el body enviamos las variables. En la url del post enviamos la implementación web que vamos a realizar en script.




Código de script para guardar los datos en la hoja de sheets:

 // ID de la hoja de cálculo de Google Sheets (reemplaza con tu propio ID)
var spreadsheetId = ''; // Aquí colocas el ID de tu hoaja de cálculo
var sheetName = ''; // El nombre de la hoja

function doPost(e) {
  try {
    // Obtener los datos de la solicitud POST
    var datos = JSON.parse(e.postData.contents);
   
    var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
   
    // Obtener última fila
    var ultimaFila = sheet.getLastRow() + 1;
   
    var fechaHora = new Date(); // variable fecha creada dentro de script
    sheet.getRange(ultimaFila, 1).setValue(fechaHora).setNumberFormat("dd/MM/yyyy HH:mm:ss");
    sheet.getRange(ultimaFila, 2).setValue(datos.nombre); // variable nombre
    sheet.getRange(ultimaFila, 3).setValue(datos.requerimiento); // variable requerimiento

   
    // Retornar respuesta en el formato solicitado
    return ContentService.createTextOutput(JSON.stringify({
      "messages": [
        {
          "type": "to_user",
          "content": "Datos insertados correctamente"
        }
      ]
    })).setMimeType(ContentService.MimeType.JSON);
   
  } catch (error) {
    // En caso de error, mantener el mismo formato de respuesta
    return ContentService.createTextOutput(JSON.stringify({
      "messages": [
        {
          "type": "to_user",
          "content": "Error: " + error.toString()
        }
      ]
    })).setMimeType(ContentService.MimeType.JSON);
  }
}


VIDEO DEMOSTRATIVO






martes, 29 de julio de 2025

Código VBA de macros de Excel (Bingo)

 LINK CONTRASEÑAS MACROS DE BINGO CON EXCEL

Hola, amigos, gracias por formar parte de miembros del canal @jaimeisrael2978.



A continuación comparto el link de un texto donde se encuentran las contraseñas de las macros.

Este link les redirigirá hacia la publicación donde se encuentran las contraseñas de mis archivos con macros publicadas en mi canal (disponible para insignias doradas).




jueves, 8 de mayo de 2025

📲 Crea tu App de Toma de Pedidos con AppSheet: Contenido Premium para Miembros

SER PARTE DE LA COMUNIDAD DE MIEMBROS DE MI CANAL

Explora de manera detallada el proceso de creación de una aplicación de procesamiento de pedidos para tiendas y negocios utilizando AppSheet. Incorpórese a mi canal de YouTube para obtener acceso a contenido exclusivo, soporte en vivo y recursos de vanguardia.

1. ¡Ya está disponible el nuevo video! --> disponible para miembros de Insignia Dorada

He subido un video "App de Toma de Pedidos en #appsheet | Crea Aplicaciones para Tiendas y Negocios" detallado donde te muestro:

  • Cómo diseñar las tablas de datos en AppSheets.

  • Configuración de vistas (formularios, tableros y galerías) para capturar pedidos.

  • Acciones para toma pedido



2. ¿Por qué unirte como miembro?

Al cumplir las 3.000 horas de reproducción y 1.000 suscriptores ( ver mi canal: https://www.youtube.com/@jaimeisrael2978), activé las Membresías de YouTube para ofrecerte:


¿Qué vas a encontrar en el nivel Dorado?

  • Tutoriales completos con casos reales

  • Plantillas descargables (.gsheet, .xlsx, .json)

  • Sesiones Q&A en directo para resolver tus dudas al instante

3. Ventajas de ser miembro “Gold” desde hoy

  1. Acceso inmediato a mi mejor contenido: desde integraciones avanzadas hasta optimización de workflows.

  2. Prioridad en tus consultas: responde tus preguntas directo en el chat de la transmisión.

  3. Material descargable: bases de datos de ejemplo, scripts listos para copiar y adaptar.

  4. *Networking: canal exclusivo de Discord/Telegram para miembros, donde podrás conectar con otros desarrolladores y emprendedores.

 

4. Cómo unirte

  1. Entra a mi canal de YouTube .

  2. Haz clic en “Unirse” y elige tu nivel de Membresía.

  3. ¡Disfruta del nuevo video y prepárate para llevar tus apps de negocio al siguiente nivel


5. Próximos lanzamientos (solo miembros)

  • Automatización avanzada de inventarios con AppSheet + Apps Scrip

    • Crear Menu interactivo de la Aplicación
    • Script para imprimir comprobante
    • Dashboard de ventas





  • Rules Format para App de una forma mas interactiva.

  • Conectar tu base de datos con aplicaciones interactivas como Looker Studio

  • Contenido de calidad y productividad en los videos para miembros



miércoles, 7 de mayo de 2025

Gestión de Órdenes de Trabajo para Empresas Técnicas

 🛠️ Proyecto: Gestión de Órdenes de Trabajo para Empresas Técnicas

Categoría: Telecomunicaciones / Servicios Técnicos
Plataforma: Google AppSheet

📌 Descripción del Proyecto

Esta aplicación fue desarrollada para empresas técnicas de telecomunicaciones con el objetivo de registrar y gestionar órdenes de trabajo en tiempo real desde dispositivos móviles. Facilita la asignación de tareas, el seguimiento del progreso y la comunicación entre el equipo técnico y administrativo.


🔍 Funcionalidades Clave

  • Registro de Órdenes: Creación y edición de órdenes de trabajo con detalles específicos del cliente y del servicio requerido.

  • Asignación de Técnicos: Designación de técnicos responsables para cada orden, con notificaciones automáticas.

  • Seguimiento en Tiempo Real: Actualización del estado de las órdenes y visualización del progreso desde cualquier dispositivo.

  • Generación de Reportes: Informes detallados de las órdenes completadas, pendientes y en proceso.

  • Integración con Google Sheets: Sincronización automática de datos para un análisis más profundo y respaldo de información.

🧰 Tecnologías Utilizadas

  • AppSheet: Plataforma de desarrollo sin código para crear aplicaciones personalizadas.

  • Google Sheets: Base de datos en la nube para almacenar y gestionar la información.

  • Google Apps Script: Automatización de procesos y generación de reportes personalizados.



sábado, 15 de febrero de 2025

Códigos distribuidor cartones de bingo en PDF por medio de correo usando AppSheets

 Script EnviarCorreo Adjuntando PDF

/**
 * Obtener el archivo PDF desde Google Drive usando el Field ID
 */
function obtenerPDFDesdeDrive(fileId) {
  try {
    var file = DriveApp.getFileById(fileId);
    return file.getAs('application/pdf');
  } catch (e) {
    Logger.log("❌ Error al obtener el PDF: " + e.toString());
    return null;
  }
}
function enviarCorreo(correoDestinatario, asunto, cuerpoCorreo, fieldId){
  // Enviar el correo electrónico
  var pdfBlob = obtenerPDFDesdeDrive(fieldId);
  MailApp.sendEmail({
    to: correoDestinatario,
    subject: asunto,
    htmlBody: cuerpoCorreo,
    attachments: [pdfBlob]
  });

  // Mostrar cuota diaria
  Logger.log(MailApp.getRemainingDailyQuota())
}

********************************************************************************************

ENVIAR CORREO ADJUNTANDO IMAGEN

*********************************************************************************************

function enviarCorreoConImagen(correoDestinatario, asunto, cuerpoCorreo, fileId) {
  // Obtener la imagen desde Drive
  var imagenBlob = obtenerImagenDesdeDrive(fileId);
 
  if (!imagenBlob) {
    Logger.log("❌ No se pudo adjuntar la imagen.");
    return;
  }

  // Enviar el correo electrónico con la imagen adjunta
  MailApp.sendEmail({
    to: correoDestinatario,
    subject: asunto,
    htmlBody: cuerpoCorreo,
    attachments: [imagenBlob]
  });

  // Mostrar cuota diaria restante
  Logger.log(MailApp.getRemainingDailyQuota());
}

function obtenerImagenDesdeDrive(fileId) {
  try {
    var file = DriveApp.getFileById(fileId);
    var mimeType = file.getMimeType();
   
    // Verificar si el archivo es una imagen
    if (!mimeType.startsWith("image/")) {
      Logger.log("❌ El archivo no es una imagen.");
      return null;
    }
   
    return file.getBlob();
  } catch (e) {
    Logger.log("❌ Error al obtener la imagen: " + e.toString());
    return null;
  }
}



********************************************************************************************

OBTENER FIELD ID

*********************************************************************************************
function listarCartonesEnCarpeta() {
  // ID de la carpeta de Google Drive
  const folderId = "Aquí reemplaza tu ID de la carpeta contenedora"; // Reemplaza con el ID de tu carpeta
  const folder = DriveApp.getFolderById(folderId);
 
  // Obtén los archivos de la carpeta
  const files = folder.getFiles();
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 
  // Encabezados
  hoja.clear(); // Limpia la hoja actual
  hoja.appendRow(["ID_Carton", "Nombre", "FileId", "URL"]);

  while (files.hasNext()) {
    const file = files.next();
    const fileId = file.getId();
    const nombre = file.getName();
    const url = `https://drive.google.com/uc?export=view&id=${fileId}`;
    const uniqueId = generarUUID(); // Genera un ID único
   
    // Agrega datos a la hoja
    hoja.appendRow([uniqueId, nombre, fileId, url]);
  }
 
  SpreadsheetApp.flush();
  Logger.log("Cartones listados correctamente.");
}

// Función para generar UUID
function generarUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    const r = Math.random() * 16 | 0;
    const v = c === 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
  });
}


Video explicativo sobre enviar correo con AppSheet adjuntando PDF




Video explicativo sobre enviar correo con AppSheet adjuntando imagen





viernes, 3 de enero de 2025

CREACIÓN DE CARTONES DE BINGO EN GOOGLE COLAB

 CARTONES BINGO DE 75 NUMEROS CON PYTHON

Hola amigos, para crear los cartones de bingo sigue los siguientes pasos:
  1. Descarga los archivos base de ejemplo
  2. Abre el link de google colab
  3. Cargar los archivos que descargaste dentro de Colab (lo arrastras al icono de carpeta)
Luego de ello podrás descargar el archivo PDF generado.




Si deseas un modelo personalizado, no dudes en contactarme: jaisizqu87@gmail.com


martes, 12 de noviembre de 2024

Código SVG para imagenes vectoriales

 CÓDIGO SVG PARA APPSHEETS

El siguiente código lo puedes usar para realizar imagenes vectoriales en appsheets, la misma que representa una bileltera de imagen de ingresos y egresos.

CONCATENATE( "data:image/svg+xml;utf8,", substitute( ' <svg width="300" height="150" xmlns="http://www.w3.org/2000/svg"> <!-- Fondo y bordes --> <rect x="10" y="10" width="280" height="130" rx="10" fill="#f8f8f8" stroke="#ddd" stroke-width="2" /> <!-- Ingresos --> <text x="50" y="40" font-size="12" fill="#4caf50" text-anchor="middle">Ingresos</text> <rect x="30" y="50" width="40" height="60" fill="#4caf50" rx="5" id="barraIngresos" /> <text x="50" y="120" font-size="10" fill="#333" text-anchor="middle">$'&[Ingresos]&'</text> <!-- Egresos --> <text x="250" y="40" font-size="12" fill="#f44336" text-anchor="middle">Egresos</text> <rect x="230" y="50" width="40" height="40" fill="#f44336" rx="5" id="barraEgresos" /> <text x="250" y="120" font-size="10" fill="#333" text-anchor="middle">$'&[Egresos]&'</text> <!-- Balance neto --> <text x="150" y="80" font-size="14" fill="#333" text-anchor="middle">Saldo</text> <text x="150" y="100" font-size="16" fill="#333" text-anchor="middle">$'&[saldo]&'</text> <!-- Línea divisoria --> <line x1="150" y1="50" x2="150" y2="110" stroke="#ccc" stroke-width="1" stroke-dasharray="2,2" /> </svg> ', "#", "%23") )

martes, 15 de octubre de 2024

Función Ordenar Aleatorio

 FUNCIÓN VBA ORDENARALEATORIO

A conitnuación te presento una función que ordena de manera aleatoria un rango específico, el cual te puede ayudar a realizar procesos específicos como desordenar un rango de manera aletoria.

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

Function OrdenarAleatoriamente(rango As Variant) As Variant

    'Establecer el rango de celdas que se ordenarán aleatoriamente

    'Crear una matriz para almacenar los valores originales del rango

    Dim valores As Variant

    valores = rango.Value

    'Crear una matriz para almacenar los índices de las filas del rango

    Dim indices() As Integer

    ReDim indices(1 To rango.Rows.Count)

    For i = 1 To rango.Rows.Count

        indices(i) = i

    Next i

    'Ordenar aleatoriamente los índices de las filas

    Randomize

    For i = 1 To rango.Rows.Count - 1

        j = Int((rango.Rows.Count - i + 1) * Rnd + i)

        temp = indices(j)

        indices(j) = indices(i)

        indices(i) = temp

    Next i

    

    'Rearmar los valores del rango en una nueva matriz ordenada aleatoriamente

    Dim valoresOrdenados() As Variant

    ReDim valoresOrdenados(1 To rango.Rows.Count, 1 To rango.Columns.Count)

    For i = 1 To rango.Rows.Count

        For j = 1 To rango.Columns.Count

            valoresOrdenados(i, j) = valores(indices(i), j)

        Next j

    Next i       

    'Colocar los valores ordenados aleatoriamente de vuelta en el rango de celdas original

    rango.Value = valoresOrdenados

End Function

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

***********************************************************************************

'Por medio del siguiente código pordemos llamar a OrdenarAleatorio adjuntandole un rango específico.

Sub DesordenarAleatorio()    

       OrdenarAleatoriamente (hj_lista.[range_B])

       OrdenarAleatoriamente (hj_lista.[range_I])

       OrdenarAleatoriamente (hj_lista.[range_N])

       OrdenarAleatoriamente (hj_lista.[range_G])

       OrdenarAleatoriamente (hj_lista.[range_O])

End Sub

***********************************************************************************

No olivides compartir y dalre like a mi video.



jueves, 25 de julio de 2024

Cartones de BINGO de 75 números

 Creación de cartones de BINGO de 75 números

Para crear los cartones de bingo de 75 números, podemos realizarlos desde una hoja de cálculo de #excel utilizando macros ( #VBA). Podemos utilizar el siguiente archivo, en el cual podrás generar los cartones de bingo.   Archivo generador modelo

Te invito a visualizar el playlist de mi canal de youtube para que obtengas una idea más detallada sobre el desarrollo de cartones de bingo y el juego de bingo.

***********************************************************************************

Si deseas que yo te genere cartones de bingo en un formato o modelo particular, no dudes en contactarme a mi correo jaisizqu87@gmail.com.



Clave para ver macros de archivos compartidos de Bingo en mi canal disponible para miembros con insignia dorada. https://jaimeisrael87.blogspot.com/2025/07/codigo-vba-de-macros-de-excel-bingo.html

Curso de creación de cartones de bingo con VBA y Excel en Udemy , Hotmark:

Curso para crear un bombo virtual en Scratch


jueves, 2 de mayo de 2024

Función SorteoEntre(n,a,b)

 SORTEOENTRE(N,A,B)

Función en código VBA (Visual Basic for Applications) - Excel

En este blog te presento como puedes crear o generar "n" números aleatorios entre un rango (a - b), es decir puedes crear un máximo de (b-1) número aleatorios entre el rango de a y b.

A continuación el código conn su respectiva explicación.

Function SorteoEntre(n As Integer, a As Integer, b As Integer) As Variant
    Dim Numeros() As Integer 'Definimos variable tipo integer en la cual se almacenarán los números aleatorios ReDim Numeros(1 To n) 'definimos el rango de la variable hasta el tamaño de n numeros 'Generar aleatoriamente n números únicos entre a y b Dim i As Integer For i = 1 To n Dim numAleatorio As Integer Do numAleatorio = Int((b - a + 1) * Rnd + a) Loop Until Not InArray(numAleatorio, Numeros) 'Llamamos a la función InArray en la cual validamos si el número aleatorio generado ya forma parte de los números que vamos al macenando dentro de la variable Numeros() Numeros(i) = numAleatorio 'Si no forma parte, este número será almacenado dentro de la variable Numeros() Next i 'Devolver los n números generados aleatoriamente en la función SorteoEntre = Numeros End Function
'Con la siguiente función podemos verificar si un número está dentro de una array que enviamos a consultar como parámetro Function InArray(val As Integer, arr As Variant) As Boolean Dim i As Integer For i = LBound(arr) To UBound(arr) If arr(i) = val Then InArray = True Exit Function End If Next i InArray = False End Function

A continuación te presento un video tutorial sobre las funciones explicadas anteriormente.


No olvides comentar cualquie duda y si te gustó dale like y suscribete a mi canal para ver mas contenido como este...

Saludos,

jueves, 10 de agosto de 2023

Principios excenciales de #Excel

PRINCIPIOS ESCENCIALES DE EXCEL 365

Hola amigos, en este blog te voy a explicar lo básico o mínimo que debes conocer de excel para pasar de principiante a alguien con conocimientos esenciales.

PLANTILLA - LAYOUT

La primera parte es conocer la interfáz o plantilla que nos ofrece excel y sus partes principales, a continuación te presento una imagen, la cual las explicamos.


Las pestañas de la cinta de opciones son los elementos que nos dan acceso a visualizar unos botones o funcionalidades en excel, debemos aprender a tener contacto permanente con ellas y es fundamental saber para qué sirven, por ejemplo la pestaña Inicio contiene las siguientes opciones que se muestra en al cinta de opciones:
  • Portapapeles: Nos permite copiar, pegar, cortar.
  • Fuente: Nos permite dar un formato de fuente a nuestra area de areabajo o celdas particulas.
  • Alineación: Permite alinear texto a la izquierda, centro, derecha.
  • Número: con éste dart formato de número o texto a nuestros datos.
  • Estilos: Nos permite dar un estilo particular a nmuestras celdas o grupo de celdas
  • Celdas: permite insertar, eliminar, dar formato a nustras celdas
  • Edición: podemos editar, buscar, insertar funciones, filtrar y muchas cosas mas..
Dentro del área de trabajo nos encontramos con la celdas la cuales se componen de una letra (columna) y un número (fila), las cuales se presentan en el cuadro de nombres junto a la barra de formulas, en la cual se reflejan las formulas ingresadas, texto ingresado o números, en si los datos de cada celda.

En la parte inferior tenemos la barra de cuadro de nombres que estan construidas en nuestro libro de trabajo, las cuales podemos agregar las que deseamos y reubicarlas en el orden que deseamos.

Junto a la barra de cuadro de nombres en la parte inferior derecha tenemos un cuadro de vista botones, en la cual podemos dar clic y cambiar la vista de nuestro libro, junto a estos botones tenemos el área de zoom, por medio del cual podemos alejarnos o acernarnos en nuestra área de trabajo 
    

DAR FORMATO A NUESTROS DATOS DEL AREA DE TRABAJO

Antes

DAR FORMATO A NUESTROS DATOS DEL AREA DE TRABAJO

Después




A continuación te dejo un video tutorial de lo explicado anteriormente.





miércoles, 21 de junio de 2023

8 nuevas formulas de excel 365 para este 2023

 OCHO NUEVAS FORMULAS INTERESANTES DE EXCEL 365

A continuación te presento ocho nuevas formulas que puedes utilizar con excel 365, las cuales pueden ser de mucha utilidad para tus análisis de datos.

Función APILARV - APILARH

Con estas funciones podemos anexar matrices verticalmente y también horizontalmente en secuencia para devolver una matriz más grande.


Si tienes versión en ingles de tu excel, las puedes tipear como VSTACK y HSTACK



Función TEXTSPLIR - DIVIDIR TEXTO

Con estas funciones podemos dividir un texto en dos o mas columas dependiendo de el delimitador, ejemplo.


Con ello podemos dividir un texto de manera rápida



Función TEXTBEFORE TEXTAFTER - TEXTOANTES TEXTODESPUES

Textoantes


Función para dividir texto en base a un delimitador ya sea antes de este dlimiador ó después del delimitador, ejmeplo.


De esa forma obtenemos el texto antes del delimitador ","

Textodespues

También podemos utilizar para separar un texto y obtener el texto luego de un delimitador, ejemplo:


En este ejemplo el delimitador es " _ " con ello tenemos el resultado


Función IMAGE - IMAGEN

Esta función te permite ingresar una imagen, en origen insertamos el link de la imagen entre comillas " origen " y damos Enter.

Copiamos el link de una imagen desde google.


Insertamos dentro de la función IMAGEN.




IMAGE TO TALBE

Para importar datos desde una imgen, realizamos lo siguiente:

Vamos al menú Datos luego damos clic en Datos de imagen.


Luego seleccionamos la imagen que contiene la tabla de datos y presionamos aceptar.


En la parte derechase presenta una ventana donde se procesó la imagen y nos permite 
Insertar datos.



Con ello tenemos insertado nuestro datos.



Función TOCOL TOROW - ENCOL ENFILA

Con estas funciones podemos colocamos o unifar dos matrices en una sola columnas o fila.

El rango de Nombres tanto de una oficina como de la otra, la unifica en una sola columna

La función ENFILA realiza lo mismo pero en una sola fila.

Función TAKE DROP - TOMAR EXCLUIR

Función Take - Tomar

Esta función tomar devuelve un número especificado de filas o columnas contiguas desde el principio o el final de una matriz.



Función Drop - Excluir

La función excluir, te permite excluir un número especificado de filas o columnas del inicio o final de una matriz.



Función EXPAND - EXPANDIR


La función expandir, te permite expandir o rellenar una matriz a las dimensiones de fila y columnas especificada.


A continuación te presento un video donde puedes visualizar todas las finciones anteriormente explicadas.





Saludos..


Obtener datos de un pdf con Excel

Obtener datos de un PDF con Excel

Para obtener los datos de un archivo digital PDF con Excel, podemos hacer lo siguiente.

Abrimos una hoja de calculo de excel, luego en menú Datos seleccionamos Obtener Datos Desde un PDF



Seleecionamos el archivo PDF que queremos obtener datos y damos clic en Aceptar


Nos presenta una ventana en la cual automáticamente se presentar y tablas y hojas de datos, las cuales podemos seleecionarlas para poder insertarlas en nuestro libro, en mi ejemplo voy a seleccionar Page001 y luego clic en Cargar.


Con ello automáticamente se cargan los datos en formato tabla



Gracias por ver este blog... dale like y suscribete a mi canal..