Tendencia de Ingresos
Recepciones Recientes (En Vivo)
Base de Datos de Pagos
| Fecha y Hora | Nro. Referencia / User | Origen | Monto Recibido | Estado | Operador | Acciones |
|---|
Detalle de Pagos Conciliados
| Fecha y Hora | Nro. Referencia / User | Origen | Monto | Acción |
|---|---|---|---|---|
| Cargando conciliaciones... | ||||
¿Cómo usar la Calculadora de Caja?
1. Conversor (Monto de Venta): Escribe el total de la compra en Monto USD (puedes usar los atajos de la parte inferior para sumar dólares rápido). El sistema calculará el equivalente exacto a pagar en Bolívares usando la tasa BCV oficial de forma automática.
2. Calculadora de Vuelto: Si el cliente paga con un billete en dólares o bolívares, escribe ese monto en las casillas Cliente Paga con USD / con Bs. La sección inferior de la tarjeta te indicará inmediatamente cuánto vuelto exacto entregar en Bolívares o Dólares.
Conversor de Monedas
Calculadora de Vuelto
Cajero
Operador de CajaSeguridad y Acceso
¿Necesitas ayuda?
Si tienes problemas con una referencia, el monto no coincide, o el validador presenta fallas, contacta al supervisor de guardia de PagoListo.
Contactar SupervisorProtocolo de Contingencia
- Verifica los Datos: Confirma que ingresaste los últimos 6 dígitos de la referencia (no el número de teléfono o banco).
- Tasa del Día: Asegúrate de que el cliente esté pagando el equivalente en Bolívares usando la tasa BCV mostrada en el sistema.
- Comprobante Físico: Solicita ver el comprobante digital o físico del pago móvil para verificar la hora y fecha de la transacción.
- Persiste el Fallo: Si el dinero no se refleja pero el comprobante es válido, notifícalo al Supervisor de Caja inmediatamente para registrarlo manualmente.
Crecimiento del Monto Acumulado
Vinculación Inteligente
Tu smartphone será el puente entre los pagos de tus clientes y tu plataforma. Genera el código para sincronizarlo al instante.
Central de Integración Automática
Conecta PagoListo con tu banco o aplicaciones externas.
Onboarding Express
Descarga la configuración autogenerada con tu URL y Token. Importa el archivo en MacroDroid y solo deberás configurar el Disparador manualmente (seleccionar tu app o número de teléfono).
Configuración Definitiva de MacroDroid para PagoListo
Sigue estos pasos exactamente en este orden. Está diseñado para ser rápido, a prueba de errores y compatible con el sistema multimoneda.
-
1
Crear la Macro y las Variables Locales
Es fundamental crear las variables antes de configurar las acciones para que aparezcan en los menús desplegables.
1. Abre MacroDroid y toca en Añadir Macro.
2. Arriba del todo, en "Introducir nombre", escribe:PagoListo BDV.
3. Ve a la sección de Variables locales y toca el botón +:
• Nombre:var_monto| Tipo: Cadena (String). Acepta.
• Nombre:var_referencia| Tipo: Cadena (String). Acepta. -
2
Configurar el Disparador (Panel Rojo)
Esto le dirá a MacroDroid cuándo debe actuar.
Para App Bancaria (Notificaciones):
1. Toca el + en el panel rojo de Disparadores.
2. Ve a Eventos de dispositivo -> Notificación -> Notificación recibida.
3. Selecciona la app de tu banco (ej: BDV en línea). Acepta.
4. En "Coincidencia de texto", déjalo en Cualquiera y acepta.Para Pagos por SMS (Provincial/Mercantil):
1. Toca el + en el panel rojo.
2. Ve a Eventos de llamadas/SMS -> SMS Recibido.
3. Selecciona Seleccionar Número(s) y añade el número del banco (ej:77107o5001). Acepta.
4. En "Contenido del SMS", déjalo en Cualquiera y acepta. -
3
Configurar las Acciones (Panel Azul)
Acción 1 (Extraer Monto): Toca + -> Manipulación de texto -> Extraer texto.
- Texto original: Toca [...] y selecciona[not_text]si elegiste Notificaciones, o[sms_message]si elegiste SMS.
- Expresión regular:[0-9.]+,[0-9]{2}
*Esta expresión universal es a prueba de fallos y detecta automáticamente montos de cualquier banco sin importar el formato.
- Guardar en: Seleccionavar_monto.Acción 2 (Extraer Referencia): Toca + -> Manipulación de texto -> Extraer texto.
- Texto original: Selecciona[not_text]o[sms_message]según tu caso.
- Expresión regular:(?<=Ref )[0-9]+|(?<=Ref: )[0-9]+|(?<=Ref:)[0-9]+|(?<=Ref\. )[0-9]+|(?<=operaci[oó]n )[0-9]+|(?<=referencia )[0-9]+|(?<=Ref)[0-9]+|(?<=desde el )[0-9]+(?!.*(?:Ref|operaci[oó]n|referencia))
*Esta expresión soporta cualquier variante (Ref, Ref:, Ref., operación, referencia y teléfonos de Bancamiga) incluso si los números están pegados.
- Guardar en: Seleccionavar_referencia.Acción 3 (Enviar a Supabase): Toca + -> Aplicaciones -> Petición HTTP.
- Método: POST
- URL:Configura Supabase en Ajustes
- Pestaña Cabecera: AñadeapikeyyAuthorization(Bearer + Tu Key).
- Pestaña Cuerpo: Tipo Personalizado (JSON). Pega esto:{ "referencia": "[system_time]_[lv=var_referencia]", "monto": "[lv=var_monto]", "moneda": "Bs" } -
4
Guardar
En la esquina inferior derecha, toca el botón circular con el ícono de Check (✔️) para guardar la macro completa. ¡Listo!
Automatización en la Nube con Google Apps Script
Como los navegadores web bloquean la lectura directa de correos por seguridad, la forma más profesional y 100% gratuita de registrar pagos de Binance es usando un Script en tu Gmail. Este código se ejecutará automáticamente en los servidores de Google cada vez que llegue un correo, extrayendo el monto y el usuario remitente.
-
1
Abre Google Apps Script
Ve a script.google.com e inicia sesión con el Gmail donde recibes las notificaciones de Binance. Haz clic en "Nuevo Proyecto".
-
2
Pega el Código de Integración
Borra el código que aparece por defecto, copia el siguiente script y pégalo.
¡Importante! Si ya conectaste tu base de datos en Configuración, tus credenciales ya están inyectadas automáticamente en este código.function checkBinanceEmails() { var supabaseUrl = "URL_DE_TU_SUPABASE/rest/v1/pagos"; var supabaseKey = "TU_API_KEY"; // Lista de remitentes autorizados de Binance var ALLOWED_SENDERS = [ "do-not-reply@ses.binance.com", "donotreply@directmail.binance.com", "do-not-reply@directmail.binance.com", "donotreply@ses.binance.com", "do-not-reply@post.binance.com", "donotreply@post.binance.com", "do-not-reply@binance.com", "donotreply@binance.com" ]; for (var loop = 0; loop < 6; loop++) { var threads = GmailApp.search( 'subject:"[Binance] Payment Receive Successful" is:unread newer_than:1d' ); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var msg = messages[j]; if (!msg.isUnread()) continue; // Anti-estafa: Verificar remitente oficial de Binance var senderRaw = msg.getFrom(); var emailMatch = senderRaw.match(/<([^>]+)>/); var senderEmail = emailMatch ? emailMatch[1].toLowerCase() : senderRaw.toLowerCase().trim(); // Valida que esté en la lista o sea un subdominio legítimo de binance.com var isBinanceOfficial = ALLOWED_SENDERS.indexOf(senderEmail) !== -1 || /^do-?not-?reply@([a-z0-9-]+\.)*binance\.com$/i.test(senderEmail); if (!isBinanceOfficial) { msg.markRead(); continue; } // Anti-estafa: Verificar estructura del cuerpo var body = msg.getPlainBody(); if ( body.indexOf("You received an incoming transfer") === -1 || body.indexOf("This is an automated message") === -1 ) { msg.markRead(); continue; } // Extraer monto (soporta enteros, decimales y miles) var amountMatch = body.match( /Amount:\s*\n?\s*([0-9.,]+)\s*USDT/i ); var monto = amountMatch ? parseFloat(amountMatch[1].replace(/,/g, "")) : 0; // Extraer remitente (nombre de usuario Binance) var fromMatch = body.match(/From:\s*\n?\s*(.+)/i); var remitente = fromMatch ? fromMatch[1].replace(/[\r\n*_]/g, "").trim() : "BIN-" + msg.getId().substring(0, 8).toUpperCase(); // Extraer timestamp de Binance (fijo por transacción) var timeMatch = body.match( /Time:\s*\n?\s*(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})/i ); var binanceTime = timeMatch ? timeMatch[1].replace(/[\s:-]/g, "") : String(Math.floor(msg.getDate().getTime() / 1000)); // Referencia determinista: mismo correo = misma referencia siempre var referencia = binanceTime + "_" + remitente; if (monto <= 0) { msg.markRead(); continue; } var payload = { referencia: referencia, monto: monto, moneda: "USDT", estado: "pending" }; try { var response = UrlFetchApp.fetch(supabaseUrl, { method: "post", headers: { apikey: supabaseKey, Authorization: "Bearer " + supabaseKey, "Content-Type": "application/json", Prefer: "resolution=ignore-duplicates" }, payload: JSON.stringify(payload), muteHttpExceptions: true }); var code = response.getResponseCode(); if (code >= 200 && code < 300) { msg.markRead(); } else if (code === 409) { msg.markRead(); } // Si error → NO marcar leído → reintento automático } catch (e) { // Error de red → NO marcar leído → reintento automático } } } if (loop < 5) Utilities.sleep(10000); } } -
3
Crear el Disparador (Automatización)
1. Guarda el proyecto (icono de disquete).
2. En el menú izquierdo, haz clic en el ícono de reloj (Disparadores).
3. Añadir disparador -> Selecciona la funcióncheckBinanceEmails-> Fuente del evento: Basado en el tiempo -> Tipo: Minutos -> Cada minuto.
4. Guarda y acepta los permisos de Google. ¡Listo! Tu sistema procesará USDT automáticamente.
Integración con Billetera Zinli
Al igual que con Binance, puedes capturar automáticamente los pagos recibidos en Zinli leyendo las notificaciones que llegan a tu correo ("¡Recibiste un Zinli!"). Este script de Google Apps extraerá el monto exacto y la referencia.
-
1
Abre Google Apps Script
Ve a script.google.com e inicia sesión con el Gmail asociado a tu cuenta de Zinli. Haz clic en "Nuevo Proyecto".
-
2
Pega el Código de Integración (Zinli)
Copia el siguiente script y reemplaza todo el contenido del editor.
Tus credenciales ya están vinculadas automáticamente.function checkZinliEmails() { var supabaseUrl = "URL_DE_TU_SUPABASE/rest/v1/pagos"; var supabaseKey = "TU_API_KEY"; // Bucle agresivo: Escanea varias veces dentro del minuto permitido por Google for (var loop = 0; loop < 5; loop++) { var threads = GmailApp.search('subject:"¡Recibiste un Zinli!" is:unread newer_than:1d'); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var msg = messages[j]; if (msg.isUnread()) { var msgDate = msg.getDate(); var diffSeconds = (new Date().getTime() - msgDate.getTime()) / 1000; if (diffSeconds > 60) { msg.markRead(); continue; } var body = msg.getPlainBody(); // Extraer Monto var amountMatch = body.match(/Monto[\s\S]*?\$([0-9.,]+)/i); var monto = amountMatch ? parseFloat(amountMatch[1].replace(/,/g, '')) : 0; // Extraer Referencia var refMatch = body.match(/Referencia[\s\S]*?([0-9]+)/i); var rawRef = refMatch ? refMatch[1].trim() : "ZIN-" + msg.getId().substring(0, 8).toUpperCase(); var ts = Math.floor(new Date().getTime() / 1000); var referencia = ts + "_" + rawRef; if(monto > 0) { var payload = { "referencia": referencia, "monto": monto, "moneda": "USD", "estado": "pending" }; try { UrlFetchApp.fetch(supabaseUrl, { "method": "post", "headers": { "apikey": supabaseKey, "Authorization": "Bearer " + supabaseKey, "Content-Type": "application/json" }, "payload": JSON.stringify(payload) }); } catch (e) {} } msg.markRead(); } } } // Pausa de 10 segundos antes de volver a escanear (hace la recepción casi instantánea) if (loop < 4) Utilities.sleep(10000); } } -
3
Crear el Disparador para Zinli
1. Guarda el proyecto.
2. Ve a Disparadores (ícono de reloj).
3. Añadir disparador -> FuncióncheckZinliEmails-> Fuente: Basado en el tiempo -> Minutos -> Cada minuto.
4. Guarda y acepta los permisos de Google.
Automatización de Correos de Banesco
Captura automáticamente los pagos recibidos por Pago Móvil en Banesco leyendo las notificaciones que llegan a tu correo ("Notificación Banesco"). Este script de Google Apps extraerá el monto exacto y la referencia bancaria.
-
1
Abre Google Apps Script
Ve a script.google.com e inicia sesión con el Gmail donde recibes las notificaciones de Banesco. Haz clic en "Nuevo Proyecto".
-
2
Pega el Código de Integración
Borra el código que aparece por defecto, copia el siguiente script y pégalo.
¡Importante! Si ya conectaste tu base de datos en Configuración, tus credenciales ya están inyectadas automáticamente en este código.function checkBanescoEmails() { var supabaseUrl = "URL_DE_TU_SUPABASE/rest/v1/pagos"; var supabaseKey = "TU_API_KEY"; var BANESCO_SENDER = "notificacion@banesco.com"; for (var loop = 0; loop < 6; loop++) { var threads = GmailApp.search( 'subject:"Notificación Banesco" is:unread newer_than:1d' ); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var msg = messages[j]; if (!msg.isUnread()) continue; // Anti-estafa: Verificar remitente oficial de Banesco var senderRaw = msg.getFrom(); var emailMatch = senderRaw.match(/<([^>]+)>/); var senderEmail = emailMatch ? emailMatch[1].toLowerCase() : senderRaw.toLowerCase().trim(); if (senderEmail !== BANESCO_SENDER) { msg.markRead(); continue; } // Verificar estructura del cuerpo var body = msg.getPlainBody(); if ( body.indexOf("Pago recibido") === -1 || body.indexOf("REF:") === -1 ) { msg.markRead(); continue; } // Extraer monto: "por Bs.23251.25" o "por Bs.23.251,25" var amountMatch = body.match( /por\s+Bs\.?\s*([0-9.,]+)/i ); var montoStr = amountMatch ? amountMatch[1] : "0"; var monto; if (montoStr.indexOf(',') !== -1) { monto = parseFloat( montoStr.replace(/\./g, '').replace(',', '.') ); } else { monto = parseFloat(montoStr); } // Extraer referencia: "REF:045118344477" var refMatch = body.match(/REF:\s*([0-9]+)/i); var referencia = refMatch ? refMatch[1].trim() : "BAN-" + msg.getId().substring(0, 12).toUpperCase(); if (monto <= 0) { msg.markRead(); continue; } var payload = { referencia: referencia, monto: monto, moneda: "Bs", estado: "pending" }; try { var response = UrlFetchApp.fetch(supabaseUrl, { method: "post", headers: { apikey: supabaseKey, Authorization: "Bearer " + supabaseKey, "Content-Type": "application/json", Prefer: "resolution=ignore-duplicates" }, payload: JSON.stringify(payload), muteHttpExceptions: true }); var code = response.getResponseCode(); if (code >= 200 && code < 300) { msg.markRead(); } else if (code === 409) { msg.markRead(); } // Si error → NO marcar leído → reintento automático } catch (e) { // Error de red → NO marcar leído → reintento automático } } } if (loop < 5) Utilities.sleep(10000); } } -
3
Crear el Disparador para Banesco
1. Guarda el proyecto (icono de disquete).
2. En el menú izquierdo, haz clic en el ícono de reloj (Disparadores).
3. Añadir disparador -> Selecciona la funcióncheckBanescoEmails-> Fuente del evento: Basado en el tiempo -> Tipo: Minutos -> Cada minuto.
4. Guarda y acepta los permisos de Google. ¡Listo! Tu sistema procesará pagos de Banesco automáticamente.
Automatización de Correos de Banplus (Pago Móvil)
Captura automáticamente los pagos recibidos por Pago Móvil en Banplus leyendo las notificaciones que llegan a tu correo ("Transacción Pago Movil Interbancario"). Este script de Google Apps extraerá el monto exacto y el número de operación.
-
1
Abre Google Apps Script
Ve a script.google.com e inicia sesión con el Gmail donde recibes las notificaciones de Banplus. Haz clic en "Nuevo Proyecto".
-
2
Pega el Código de Integración
Borra el código que aparece por defecto, copia el siguiente script y pégalo.
¡Importante! Si ya conectaste tu base de datos en Configuración, tus credenciales ya están inyectadas automáticamente en este código.function checkBanplusEmails() { var supabaseUrl = "URL_DE_TU_SUPABASE/rest/v1/pagos"; var supabaseKey = "TU_API_KEY"; // Lista de remitentes autorizados de Banplus var ALLOWED_SENDERS = [ "banplusonline@banplus.com", "banpluscomunicaciones@banplus.com" ]; for (var loop = 0; loop < 6; loop++) { var threads = GmailApp.search( 'subject:"Pago Movil Interbancario" is:unread newer_than:1d' ); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var msg = messages[j]; if (!msg.isUnread()) continue; // Anti-estafa: Verificar remitente oficial de Banplus var senderRaw = msg.getFrom(); var emailMatch = senderRaw.match(/<([^>]+)>/); var senderEmail = emailMatch ? emailMatch[1].toLowerCase() : senderRaw.toLowerCase().trim(); var isBanplusOfficial = ALLOWED_SENDERS.indexOf(senderEmail) !== -1 || /^[a-z0-9._-]+@([a-z0-9-]+\.)*banplus\.com$/i.test(senderEmail); if (!isBanplusOfficial) { msg.markRead(); continue; } var body = msg.getPlainBody(); // Anti-estafa: Verificar autenticidad del cuerpo oficial de Banplus var hasBanplusMark = body.indexOf("Banplus") !== -1 || body.indexOf("banplus.com") !== -1; var isAprobado = body.toUpperCase().indexOf("APROBADA") !== -1 || body.toUpperCase().indexOf("TRANSACCION APROBADA") !== -1; if (!hasBanplusMark || !isAprobado) { msg.markRead(); continue; } // Extraer Referencia / Número de Operación (ej: 001063068383) var refMatch = body.match(/(?:N[úu\?]?mero\s+de\s+Operaci[óo\?]?n|Operaci[óo\?]?n)\s*[:\r\n\s]*([0-9]{6,})/i); var referencia = refMatch ? refMatch[1].trim() : "BP-" + msg.getId().substring(0, 10).toUpperCase(); // Extraer Monto (ej: 100.00) var amountMatch = body.match(/Monto\s*[:\r\n\s]*(?:Bs\.?|VES)?\s*([0-9.,]+)/i); var monto = 0; if (amountMatch) { var montoStr = amountMatch[1].trim(); var lastDot = montoStr.lastIndexOf('.'); var lastComma = montoStr.lastIndexOf(','); if (lastComma > lastDot) { monto = parseFloat(montoStr.replace(/\./g, '').replace(',', '.')); } else if (lastDot > lastComma) { monto = parseFloat(montoStr.replace(/,/g, '')); } else if (lastComma !== -1) { monto = parseFloat(montoStr.replace(',', '.')); } else { monto = parseFloat(montoStr); } } if (monto <= 0) { msg.markRead(); continue; } var payload = { referencia: referencia, monto: monto, moneda: "Bs", estado: "pending" }; try { var response = UrlFetchApp.fetch(supabaseUrl, { method: "post", headers: { apikey: supabaseKey, Authorization: "Bearer " + supabaseKey, "Content-Type": "application/json", Prefer: "resolution=ignore-duplicates" }, payload: JSON.stringify(payload), muteHttpExceptions: true }); var code = response.getResponseCode(); if (code >= 200 && code < 300) { msg.markRead(); } else if (code === 409) { msg.markRead(); } } catch (e) {} } } if (loop < 5) Utilities.sleep(10000); } } -
3
Crear el Disparador para Banplus
1. Guarda el proyecto (icono de disquete).
2. En el menú izquierdo, haz clic en el ícono de reloj (Disparadores).
3. Añadir disparador -> Selecciona la funcióncheckBanplusEmails-> Fuente del evento: Basado en el tiempo -> Tipo: Minutos -> Cada minuto.
4. Guarda y acepta los permisos de Google. ¡Listo! Tu sistema procesará pagos de Banplus automáticamente.
Ajustes Financieros y Visuales
Moneda de Visualización
Moneda en la que se calculan los totales
Margen P2P USDT (%)
Aumenta la tasa automática para igualar anuncios más altos (Ej: 1.04)
Tasa Manual (USDT / USD)
Ignorar APIs y usar tasa fija en Bs.
Alerta Sonora
Sonido al sincronizar nuevos ingresos
Modo Oscuro
Cambiar apariencia de la interfaz
Notificaciones de Escritorio
Recibir alertas nativas de Windows/Mac
Mantenimiento
Estas acciones son destructivas y no se pueden deshacer.