feat: sustitucion de marca Bold por medios de pago especificos (PSE, Tarjetas, Nequi, Daviplata y QR Bre-B)

This commit is contained in:
AI Bot 2026-09-17 09:12:27 -05:00
parent 7f2840093f
commit 8773d863dd
16 changed files with 215 additions and 66 deletions

View File

@ -25,7 +25,7 @@ object AppNotificationManager {
private const val TAG = "AppNotificationManager"
const val CHANNEL_ID = "dripzone_notifications_channel"
private const val CHANNEL_NAME = "Notificaciones de Pedidos DripZone"
private const val CHANNEL_DESC = "Avisos de estado de compras, anticipos Bold y seguimiento de pedidos"
private const val CHANNEL_DESC = "Avisos de estado de compras, anticipos y seguimiento de pedidos"
private const val NOTIF_ID_ORDER = 1001
private const val NOTIF_ID_DEPOSIT = 1002
@ -123,7 +123,7 @@ object AppNotificationManager {
val cleanBody = TemplateManager.stripMarkdown(renderedBody)
val shortOrderId = if (orderId.length > 8) orderId.takeLast(8).uppercase() else orderId.uppercase()
val title = "⚡ ¡Anticipo Confirmado por Bold! #$shortOrderId"
val title = "⚡ ¡Anticipo Confirmado! #$shortOrderId"
val intent = Intent(context, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP

View File

@ -79,13 +79,13 @@ object TemplateManager {
"customer_deposit_request" to (
"⚡ *{tienda_nombre} - CONFIRMACIÓN DE DESPACHO* 📦\n\n" +
"Hola {cliente_nombre}, para programar el despacho express de tu orden *#{orden_id}* hacia *{cliente_ciudad}*, realiza el pago del anticipo de separación de *{valor_anticipo}*.\n\n" +
"💳 *Paga en línea de forma 100% segura por Bold (PSE / Tarjetas / Bre-B):*\n" +
"💳 *Paga en línea de forma 100% segura (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B):*\n" +
"👉 {link_pago_bold}\n\n" +
"🤝 El saldo restante de *{saldo_contraentrega}* lo cancelas al recibir tu paquete en tu puerta (en efectivo o con Bold). ¡Gracias por tu compra!"
"🤝 El saldo restante de *{saldo_contraentrega}* lo cancelas al recibir tu paquete en tu puerta (en efectivo o transferencia). ¡Gracias por tu compra!"
),
"customer_deposit_confirmed" to (
"🎉 *¡Tu anticipo de separación fue confirmado con éxito!*\n\n" +
"Hola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* a través de Bold.\n\n" +
"Hola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* en línea.\n\n" +
"📦 Tu orden *#{orden_id}* ya se encuentra en alistamiento y empaque para despacho a *{cliente_ciudad}*.\n" +
"🤝 *Saldo restante a pagar contraentrega:* *{saldo_contraentrega}* al recibir en tu puerta.\n\n" +
"Puedes consultar el estado de tu pedido en cualquier momento desde la app oficial de {tienda_nombre}.\n\n" +
@ -97,7 +97,7 @@ object TemplateManager {
"📍 *Dirección de Entrega:* {cliente_direccion}\n" +
"🏙️ *Ciudad:* {cliente_ciudad}\n" +
"💵 *Saldo a Pagar Contraentrega:* *{saldo_contraentrega}*\n" +
"💳 *Medio de Pago:* {metodo_pago} (Efectivo o mediante Bold al recibir)\n\n" +
"💳 *Medio de Pago:* {metodo_pago} (Efectivo o transferencia al recibir)\n\n" +
"Por favor estar atento a la portería o celular. ¡Gracias por tu compra en {tienda_nombre}! 🔥"
),
"order_delivered" to (

View File

@ -122,7 +122,7 @@ class CartBottomSheet : BottomSheetDialogFragment() {
binding.tvLabelSeparation.text = "⚡ Separación (1er Pedido):"
binding.tvSeparationAmount.text = "$ 10.000 COP"
binding.tvBalanceDueAmount.text = format.format(balanceDue) + " COP"
binding.tvSeparationBreakdown.text = "Separas tu pedido ($totalQty ${if (totalQty > 1) "productos" else "producto"}) con solo $10.000 COP de separación fija (tarifa única para toda la orden) y cancelas el saldo restante (${format.format(balanceDue)} COP) en efectivo al recibir."
binding.tvSeparationBreakdown.text = "Separas tu pedido ($totalQty ${if (totalQty > 1) "productos" else "producto"}) con solo $10.000 COP de anticipo (PSE, Tarjetas, Nequi o Bre-B) y cancelas el saldo restante (${format.format(balanceDue)} COP) en efectivo o transferencia al recibir."
binding.btnCartAction.text = "Pagar Separación ($10.000 COP)"
binding.btnCartAction.backgroundTintList = android.content.res.ColorStateList.valueOf(
androidx.core.content.ContextCompat.getColor(requireContext(), co.dripzone.app.R.color.drip_purple)

View File

@ -329,7 +329,7 @@ class OrderVerificationBottomSheet : BottomSheetDialogFragment() {
binding.tvSuccessOrderId.text = "Orden #$orderId"
if (requiresDeposit) {
binding.tvSuccessMessage.text = "¡Tu número de WhatsApp (+57 $customerPhone) fue validado y tu pedido fue registrado en la plataforma!\n\n⚠️ REQUISITO PARA DESPACHO:\nRealiza el pago de la separación de $10.000 COP para coordinar y programar el despacho de tu paquete. Cancelarás el saldo restante (${format.format(balanceDue)} COP) en efectivo al recibir."
binding.tvSuccessMessage.text = "¡Tu número de WhatsApp (+57 $customerPhone) fue validado y tu pedido fue registrado en la plataforma!\n\n⚠️ REQUISITO PARA DESPACHO:\nRealiza el pago de la separación de $10.000 COP (PSE, Tarjeta o Nequi) para coordinar y programar el despacho de tu paquete. Cancelarás el saldo restante (${format.format(balanceDue)} COP) en efectivo o transferencia al recibir."
binding.layoutBoldQrContainer.visibility = View.VISIBLE
binding.pbBoldQrLoading.visibility = View.VISIBLE
binding.ivBoldQrCode.setImageDrawable(null)
@ -348,7 +348,7 @@ class OrderVerificationBottomSheet : BottomSheetDialogFragment() {
.into(binding.ivBoldQrCode)
}
// Configurar botón para abrir pasarela de pago Bold
// Configurar botón para abrir pasarela de pago
val checkoutUrl = if (boldData.checkoutUrl.isNotBlank()) boldData.checkoutUrl else "https://drip-zone.online"
binding.btnPaySeparationBold.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(checkoutUrl))
@ -365,8 +365,8 @@ class OrderVerificationBottomSheet : BottomSheetDialogFragment() {
binding.layoutBoldQrContainer.visibility = View.GONE
binding.btnPaySeparationBold.visibility = View.GONE
binding.layoutBoldPaidSuccess.visibility = View.VISIBLE
binding.tvSuccessMessage.text = "¡Anticipo de $10.000 COP recibido y confirmado por Bold! Tu pedido ha sido programado para despacho inmediato."
Toast.makeText(requireContext(), "🎉 ¡Anticipo verificado en tiempo real con Bold!", Toast.LENGTH_LONG).show()
binding.tvSuccessMessage.text = "¡Anticipo de $10.000 COP recibido y confirmado con éxito! Tu pedido ha sido programado para despacho inmediato."
Toast.makeText(requireContext(), "🎉 ¡Anticipo verificado en tiempo real con éxito!", Toast.LENGTH_LONG).show()
// Disparar notificación oficial de anticipo confirmado
val depositVars = mapOf(

View File

@ -121,7 +121,7 @@ class OrdersBottomSheet : BottomSheetDialogFragment() {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(boldUrl))
startActivity(intent)
} catch (_: Exception) {
Toast.makeText(requireContext(), "No se pudo abrir la pasarela Bold", Toast.LENGTH_SHORT).show()
Toast.makeText(requireContext(), "No se pudo abrir el enlace de pago", Toast.LENGTH_SHORT).show()
}
}

View File

@ -189,7 +189,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="Separas tu pedido con $10.000 COP y cancelas el saldo restante en efectivo al recibir."
android:text="Separas tu pedido con $10.000 COP (PSE, Tarjeta o Nequi) y cancelas el saldo restante en efectivo o transferencia al recibir."
android:textColor="@color/badge_drip_text"
android:textSize="11sp" />
</LinearLayout>

View File

@ -445,19 +445,19 @@
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="Tu pago de $10.000 COP fue verificado por Bold. Tu pedido fue autorizado para despacho inmediato."
android:text="Tu pago de $10.000 COP fue verificado con éxito. Tu pedido fue autorizado para despacho inmediato."
android:textColor="#A7F3D0"
android:textSize="11sp" />
</LinearLayout>
<!-- Separation Payment Button (Pasarela Bold) -->
<!-- Separation Payment Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/btnPaySeparationBold"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginTop="14dp"
android:filterTouchesWhenObscured="true"
android:text="Pagar con Bold (PSE / Tarjeta / Nequi)"
android:text="Pagar con PSE, Tarjeta o Nequi"
android:textAllCaps="false"
android:textColor="#FFFFFF"
android:textSize="14sp"

View File

@ -235,9 +235,18 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Recibe en tu puerta y paga en efectivo al recibir"
android:text="Recibe en tu puerta y paga en efectivo o transferencia al recibir"
android:textColor="@color/text_secondary"
android:textSize="11sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:fontFamily="sans-serif-medium"
android:text="💳 Anticipo: PSE • Tarjetas Débito/Crédito • Nequi • Bre-B"
android:textColor="@color/drip_purple_glow"
android:textSize="10sp" />
</LinearLayout>
</LinearLayout>

View File

@ -200,14 +200,14 @@
tools:text="$10.000 COP • Acreditado ✅" />
</RelativeLayout>
<!-- Button to pay deposit in Bold if pending -->
<!-- Button to pay deposit if pending -->
<com.google.android.material.button.MaterialButton
android:id="@+id/btnPayDepositBold"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="8dp"
android:fontFamily="sans-serif-bold"
android:text="💳 Pagar Anticipo ($10.000) en Bold"
android:text="💳 Pagar Anticipo ($10.000) PSE / Tarjeta"
android:textSize="12sp"
android:visibility="gone"
app:backgroundTint="@color/accent_purple"
@ -251,7 +251,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:text="Saldo a Pagar Contraentrega en Efectivo:"
android:text="Saldo Contraentrega (Efectivo o Transferencia):"
android:textColor="#D8B4FE"
android:textSize="11sp" />

View File

@ -142,11 +142,11 @@ async function seed() {
{
id: 'customer_deposit_request',
title: 'Solicitud de Separación con $10.000 COP (Garantía de Despacho)',
description: 'Mensaje con enlace oficial Bold para pagar el anticipo de $10.000 COP y programar el envío.',
description: 'Mensaje con enlace oficial para pagar el anticipo de $10.000 COP (PSE, Tarjetas, Nequi) y programar el envío.',
category: 'customer_sales',
channel: 'whatsapp',
isActive: true,
content: `⚡ *{tienda_nombre} - CONFIRMACIÓN DE DESPACHO* 📦\n\nHola {cliente_nombre}, para programar el despacho express de tu orden *#{orden_id}* hacia *{cliente_ciudad}*, realiza el pago del anticipo de separación de *{valor_anticipo}*.\n\n💳 *Paga en línea de forma 100% segura por Bold (PSE / Tarjetas / Bre-B / Nequi):*\n👉 {link_pago_bold}\n\n🤝 El saldo restante de *{saldo_contraentrega}* lo cancelas al recibir tu paquete en tu puerta. ¡Gracias por tu compra!`,
content: `⚡ *{tienda_nombre} - CONFIRMACIÓN DE DESPACHO* 📦\n\nHola {cliente_nombre}, para programar el despacho express de tu orden *#{orden_id}* hacia *{cliente_ciudad}*, realiza el pago del anticipo de separación de *{valor_anticipo}*.\n\n💳 *Paga en línea de forma 100% segura (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B):*\n👉 {link_pago_bold}\n\n🤝 El saldo restante de *{saldo_contraentrega}* lo cancelas al recibir tu paquete en tu puerta (en efectivo o transferencia). ¡Gracias por tu compra!`,
availableVariables: JSON.stringify([
{ key: 'tienda_nombre', label: 'Nombre Tienda', example: 'DripZone', description: 'Tienda' },
{ key: 'cliente_nombre', label: 'Nombre Cliente', example: 'Cliente DripZone', description: 'Cliente' },
@ -154,18 +154,18 @@ async function seed() {
{ key: 'cliente_ciudad', label: 'Ciudad', example: 'Cali', description: 'Ciudad' },
{ key: 'valor_anticipo', label: 'Valor Anticipo', example: '$10.000 COP', description: 'Separación' },
{ key: 'saldo_contraentrega', label: 'Saldo Contraentrega', example: '$125.000 COP', description: 'Saldo' },
{ key: 'link_pago_bold', label: 'Link de Pago Bold', example: 'https://drip-zone.online', description: 'Enlace Bold' }
{ key: 'link_pago_bold', label: 'Link de Pago', example: 'https://drip-zone.online', description: 'Enlace Pago' }
]),
updatedAt: new Date().toISOString()
},
{
id: 'customer_deposit_confirmed',
title: 'Confirmación de Anticipo Bold al Cliente',
description: 'Notificación enviada al cliente por WhatsApp cuando su pago de anticipo de separación es acreditado por Bold.',
title: 'Confirmación de Anticipo al Cliente',
description: 'Notificación enviada al cliente por WhatsApp cuando su pago de anticipo de separación es acreditado con éxito.',
category: 'customer_sales',
channel: 'whatsapp',
isActive: true,
content: `🎉 *¡Tu anticipo de separación fue confirmado con éxito!*\n\nHola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* a través de Bold.\n\n📦 Tu orden *#{orden_id}* ya se encuentra en alistamiento y empaque para despacho a *{cliente_ciudad}*.\n🤝 *Saldo restante a pagar contraentrega:* *{saldo_contraentrega}* al recibir en tu puerta.\n\nPuedes consultar el estado de tu pedido en cualquier momento desde la app oficial de {tienda_nombre}.\n\n¡Muchas gracias por tu compra en {tienda_nombre}!`,
content: `🎉 *¡Tu anticipo de separación fue confirmado con éxito!*\n\nHola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* en línea.\n\n📦 Tu orden *#{orden_id}* ya se encuentra en alistamiento y empaque para despacho a *{cliente_ciudad}*.\n🤝 *Saldo restante a pagar contraentrega:* *{saldo_contraentrega}* al recibir en tu puerta.\n\nPuedes consultar el estado de tu pedido en cualquier momento desde la app oficial de {tienda_nombre}.\n\n¡Muchas gracias por tu compra en {tienda_nombre}!`,
availableVariables: JSON.stringify([
{ key: 'tienda_nombre', label: 'Nombre Tienda', example: 'DripZone', description: 'Nombre de la tienda' },
{ key: 'cliente_nombre', label: 'Nombre Cliente', example: 'Cliente DripZone', description: 'Nombre del comprador' },

View File

@ -500,14 +500,14 @@ export default function CheckoutPage() {
className="w-full bg-gradient-to-r from-purple-600 to-indigo-600 hover:from-purple-500 hover:to-indigo-500 text-white font-black text-xs py-3 px-4 rounded-xl flex items-center justify-center gap-2 shadow-lg transition-all"
>
<CreditCard className="w-4 h-4" />
<span>Pagar $10.000 con Bold (PSE / Tarjetas / Bre-B)</span>
<span>Pagar $10.000 con PSE, Tarjetas, Nequi o Bre-B</span>
<ExternalLink className="w-3.5 h-3.5" />
</a>
)}
</div>
<div className="pt-2 border-t border-white/10 flex justify-between items-center text-xs">
<span className="text-neutral-400">🤝 Saldo restante contraentrega (efectivo o mediante Bold):</span>
<span className="text-neutral-400">🤝 Saldo restante contraentrega (en efectivo o transferencia):</span>
<span className="text-emerald-400 font-bold font-mono">
{formatCOP(Math.max(0, orderCompleted.totalAmount - (orderCompleted.depositAmount || 10000)))} COP
</span>
@ -581,7 +581,7 @@ export default function CheckoutPage() {
</span>
</div>
<p className="text-xs text-neutral-300 leading-relaxed">
Tu calzado y talla seleccionada están reservados. Completa tu dirección y confirma el anticipo de <strong className="text-emerald-400">$10.000 por Bold</strong> (PSE o tarjetas) para asegurar tu despacho hoy. El saldo restante lo pagas <strong>contraentrega (en efectivo o mediante Bold)</strong> al recibir en tu puerta.
Tu calzado y talla seleccionada están reservados. Completa tu dirección y confirma el anticipo de <strong className="text-emerald-400">$10.000 en línea</strong> (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B) para asegurar tu despacho hoy. El saldo restante lo pagas <strong>contraentrega (en efectivo o transferencia)</strong> al recibir en tu puerta.
</p>
</div>
</div>
@ -727,7 +727,7 @@ export default function CheckoutPage() {
className="inline-flex items-center gap-1.5 bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-bold px-3 py-1.5 rounded-lg shadow-sm"
>
<ExternalLink className="w-3.5 h-3.5" />
<span>Abrir Link de Pago Bold.co</span>
<span>Pagar en Línea (PSE, Tarjetas o Nequi)</span>
</a>
)}
</div>

View File

@ -723,12 +723,12 @@ export default function MisPedidosPage() {
{order.depositPaid || order.status !== 'pending' ? (
<span className="text-emerald-400 flex items-center gap-1 font-bold">
<CheckCircle2 className="w-3.5 h-3.5" />
Pago de anticipo aprobado en pasarela Bold
Pago de anticipo aprobado y confirmado
</span>
) : (
<span className="text-amber-400 flex items-center gap-1">
<Clock className="w-3.5 h-3.5" />
Pendiente de confirmación en Bold
Pendiente de confirmación de pago
</span>
)}
</div>

View File

@ -229,7 +229,10 @@ export const ProductModal: React.FC<ProductModalProps> = ({
¡Pago Contraentrega en {selectedCity.name}!
</p>
<p className="text-neutral-300 text-[11px] leading-relaxed">
Separas con solo <strong className="text-white">{formatCOP(separation.depositAmount)}</strong> y pagas los <strong className="text-white">{formatCOP(separation.balanceDue)}</strong> al mensajero cuando llegue a tu casa.
Separas con solo <strong className="text-white">{formatCOP(separation.depositAmount)}</strong> y pagas los <strong className="text-white">{formatCOP(separation.balanceDue)}</strong> en efectivo o transferencia al mensajero cuando llegue a tu casa.
</p>
<p className="text-[10px] text-purple-300 font-medium pt-0.5">
💳 Anticipo: PSE • Tarjetas Débito/Crédito • Nequi • Daviplata • QR Bre-B
</p>
</div>
</div>

View File

@ -123,23 +123,23 @@ export const INITIAL_CITIES: City[] = [
export const INITIAL_PAYMENT_METHODS: PaymentMethod[] = [
{
id: 'pay-bold-link',
name: 'Bold.co Oficial • PSE, Tarjetas Débito/Crédito o QR',
name: 'Pago en Línea • PSE, Tarjetas Débito/Crédito o QR Bre-B',
type: 'bold',
description: 'Paga de forma rápida y 100% segura con la pasarela oficial Bold.co. Acepta PSE, Tarjetas Visa/Mastercard y QR interoperable.',
description: 'Paga de forma rápida y 100% segura. Acepta transferencias PSE (todos los bancos), Tarjetas Visa/Mastercard/Amex, Nequi, Daviplata y QR Bre-B interoperable.',
requiresDeposit: false,
depositAmount: 0,
boldPaymentLink: 'https://drip-zone.online',
accountInfo: 'Pasarela Oficial Bold.co (PSE / Tarjetas / QR Bre-B)',
accountInfo: 'PSE (cualquier banco), Tarjetas Débito/Crédito, QR Bre-B, Nequi y Daviplata',
isActive: true,
},
{
id: 'pay-deposit-10k',
name: 'Separación con $10.000 por Bold + Saldo Contraentrega',
name: 'Separación con $10.000 (PSE / Tarjeta / Nequi) + Saldo Contraentrega',
type: 'contraentrega',
description: 'Asegura tu talla con solo $10.000 COP únicamente a través de Bold (PSE, tarjetas o Bre-B) y cancelas el saldo restante en efectivo o mediante Bold al recibir en tu puerta.',
description: 'Asegura tu talla con solo $10.000 COP en línea (PSE, tarjetas débito/crédito, Nequi o QR Bre-B) y cancelas el saldo restante en efectivo o transferencia al recibir en tu puerta.',
requiresDeposit: true,
depositAmount: 10000,
accountInfo: 'Pasarela Oficial Bold.co (PSE / Tarjetas)',
accountInfo: 'PSE, Tarjetas Débito/Crédito (Visa, Mastercard), QR Bre-B interoperable',
boldPaymentLink: 'https://drip-zone.online',
isActive: true,
},
@ -147,7 +147,7 @@ export const INITIAL_PAYMENT_METHODS: PaymentMethod[] = [
id: 'pay-cod-full',
name: 'Pago 100% Contraentrega (Cali y Alrededores)',
type: 'contraentrega',
description: 'Pagas el 100% del valor en efectivo o mediante Bold al recibir en tu puerta (válido para entregas urbanas en 24 horas).',
description: 'Pagas el 100% del valor en efectivo o transferencia al recibir en tu puerta (válido para entregas urbanas en 24 horas).',
requiresDeposit: false,
depositAmount: 0,
isActive: true,
@ -156,10 +156,10 @@ export const INITIAL_PAYMENT_METHODS: PaymentMethod[] = [
id: 'pay-nequi-full',
name: 'Transferencia Anticipada',
type: 'bold',
description: 'Paga anticipadamente en línea a través de Bold.',
description: 'Paga anticipadamente en línea con PSE, Tarjeta de Crédito/Débito o Nequi.',
requiresDeposit: false,
depositAmount: 0,
accountInfo: 'Pasarela Oficial Bold.co',
accountInfo: 'PSE, Tarjetas y transferencias bancarias',
isActive: false,
},
];

View File

@ -263,7 +263,7 @@ Estamos alistando tu paquete. Te enviaremos el número de guía o notificación
📍 *Dirección de Entrega:* {cliente_direccion}
🏙️ *Ciudad:* {cliente_ciudad}
💵 *Saldo a Pagar Contraentrega:* *{saldo_contraentrega}*
💳 *Medio de Pago:* {metodo_pago} (Efectivo o mediante Bold al recibir)
💳 *Medio de Pago:* {metodo_pago} (Efectivo o transferencia al recibir)
Por favor estar atento a la portería o celular. ¡Gracias por tu compra en {tienda_nombre}! 🔥`,
defaultContent: `👋 ¡Hola *{cliente_nombre}*!
@ -273,7 +273,7 @@ Por favor estar atento a la portería o celular. ¡Gracias por tu compra en {tie
📍 *Dirección de Entrega:* {cliente_direccion}
🏙️ *Ciudad:* {cliente_ciudad}
💵 *Saldo a Pagar Contraentrega:* *{saldo_contraentrega}*
💳 *Medio de Pago:* {metodo_pago} (Efectivo o mediante Bold al recibir)
💳 *Medio de Pago:* {metodo_pago} (Efectivo o transferencia al recibir)
Por favor estar atento a la portería o celular. ¡Gracias por tu compra en {tienda_nombre}! 🔥`,
availableVariables: [
@ -532,7 +532,7 @@ Hola {usuario_nombre}! Tu código de seguridad para validar tu cuenta es:
Hola {cliente_nombre}, para procesar tu orden #{orden_id} hacia {cliente_ciudad}, se requiere la separación del flete por valor de *{costo_envio}* (100% descontable al recibir en tu puerta).
💡 Motivo: {motivo_garantia}
💳 Puedes realizar el pago en línea de forma 100% segura por Bold: {link_pago_bold}
💳 Puedes realizar el pago en línea de forma 100% segura (PSE, Tarjetas, Nequi o Bre-B): {link_pago_bold}
¡Una vez confirmado tu comprobante, tu despacho saldrá de inmediato!`,
defaultContent: `🛡️ *Garantía de Despacho Requerida - {tienda_nombre}*
@ -540,7 +540,7 @@ Hola {cliente_nombre}, para procesar tu orden #{orden_id} hacia {cliente_ciudad}
Hola {cliente_nombre}, para procesar tu orden #{orden_id} hacia {cliente_ciudad}, se requiere la separación del flete por valor de *{costo_envio}* (100% descontable al recibir en tu puerta).
💡 Motivo: {motivo_garantia}
💳 Puedes realizar el pago en línea de forma 100% segura por Bold: {link_pago_bold}
💳 Puedes realizar el pago en línea de forma 100% segura (PSE, Tarjetas, Nequi o Bre-B): {link_pago_bold}
¡Una vez confirmado tu comprobante, tu despacho saldrá de inmediato!`,
availableVariables: [
@ -562,14 +562,14 @@ Hola {cliente_nombre}, para procesar tu orden #{orden_id} hacia {cliente_ciudad}
isActive: true,
content: `📋 *Políticas de Compra y Entrega - {tienda_nombre}*
✅ *Pago Contraentrega:* Separas tu pedido con solo $10.000 por Bold oficial y pagas el saldo al recibir en tu domicilio (en efectivo o mediante Bold).
✅ *Pago Contraentrega:* Separas tu pedido con solo $10.000 en línea (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B) y pagas el saldo al recibir en tu domicilio (en efectivo o transferencia).
👟 *Garantía y Cambio de Talla:* Garantía directa de fábrica. Cambio de talla garantizado según la ciudad de destino (cobertura local con mensajero en Cali y logística de reenvío en otras ciudades).
🚚 *Envíos Nacionales:* Tiempos de entrega y valor del flete varían de acuerdo a tu ciudad.
Cualquier duda o asesoría adicional, ¡estamos para servirte con todo el gusto!`,
defaultContent: `📋 *Políticas de Compra y Entrega - {tienda_nombre}*
✅ *Pago Contraentrega:* Separas tu pedido con solo $10.000 por Bold oficial y pagas el saldo al recibir en tu domicilio (en efectivo o mediante Bold).
✅ *Pago Contraentrega:* Separas tu pedido con solo $10.000 en línea (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B) y pagas el saldo al recibir en tu domicilio (en efectivo o transferencia).
👟 *Garantía y Cambio de Talla:* Garantía directa de fábrica. Cambio de talla garantizado según la ciudad de destino (cobertura local con mensajero en Cali y logística de reenvío en otras ciudades).
🚚 *Envíos Nacionales:* Tiempos de entrega y valor del flete varían de acuerdo a tu ciudad.
@ -598,13 +598,13 @@ Cualquier duda o asesoría adicional, ¡estamos para servirte con todo el gusto!
},
{
id: 'customer_deposit_confirmed',
title: 'Confirmación de Anticipo Bold al Cliente',
description: 'Notificación enviada al cliente por WhatsApp cuando su pago de anticipo de separación es acreditado por Bold.',
title: 'Confirmación de Anticipo al Cliente',
description: 'Notificación enviada al cliente por WhatsApp cuando su pago de anticipo de separación es acreditado con éxito.',
category: 'customer_sales',
channel: 'whatsapp',
isActive: true,
content: `🎉 *¡Tu anticipo de separación fue confirmado con éxito!*\n\nHola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* a través de Bold.\n\n📦 Tu orden *#{orden_id}* ya se encuentra en alistamiento y empaque para despacho a *{cliente_ciudad}*.\n🤝 *Saldo restante a pagar contraentrega:* *{saldo_contraentrega}* al recibir en tu puerta.\n\nPuedes consultar el estado de tu pedido en cualquier momento desde la app oficial de {tienda_nombre}.\n\n¡Muchas gracias por tu compra en {tienda_nombre}!`,
defaultContent: `🎉 *¡Tu anticipo de separación fue confirmado con éxito!*\n\nHola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* a través de Bold.\n\n📦 Tu orden *#{orden_id}* ya se encuentra en alistamiento y empaque para despacho a *{cliente_ciudad}*.\n🤝 *Saldo restante a pagar contraentrega:* *{saldo_contraentrega}* al recibir en tu puerta.\n\nPuedes consultar el estado de tu pedido en cualquier momento desde la app oficial de {tienda_nombre}.\n\n¡Muchas gracias por tu compra en {tienda_nombre}!`,
content: `🎉 *¡Tu anticipo de separación fue confirmado con éxito!*\n\nHola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* en línea.\n\n📦 Tu orden *#{orden_id}* ya se encuentra en alistamiento y empaque para despacho a *{cliente_ciudad}*.\n🤝 *Saldo restante a pagar contraentrega:* *{saldo_contraentrega}* al recibir en tu puerta.\n\nPuedes consultar el estado de tu pedido en cualquier momento desde la app oficial de {tienda_nombre}.\n\n¡Muchas gracias por tu compra en {tienda_nombre}!`,
defaultContent: `🎉 *¡Tu anticipo de separación fue confirmado con éxito!*\n\nHola *{cliente_nombre}*, recibimos correctamente tu pago de *{valor_anticipo}* en línea.\n\n📦 Tu orden *#{orden_id}* ya se encuentra en alistamiento y empaque para despacho a *{cliente_ciudad}*.\n🤝 *Saldo restante a pagar contraentrega:* *{saldo_contraentrega}* al recibir en tu puerta.\n\nPuedes consultar el estado de tu pedido en cualquier momento desde la app oficial de {tienda_nombre}.\n\n¡Muchas gracias por tu compra en {tienda_nombre}!`,
availableVariables: [
{ key: 'tienda_nombre', label: 'Nombre Tienda', example: 'DripZone', description: 'Nombre de la tienda' },
{ key: 'cliente_nombre', label: 'Nombre Cliente', example: 'Cliente DripZone', description: 'Nombre del comprador' },
@ -633,7 +633,7 @@ Cualquier duda o asesoría adicional, ¡estamos para servirte con todo el gusto!
🛡️ Garantía de fábrica y cambio de talla (sujeto a políticas de cobertura según ciudad)
🛒 ¿CÓMO REALIZAR TU PEDIDO Y PAGO SEGURO?
La atención comercial y asesoría es por este WhatsApp. Para garantizar tu despacho con factura y seguimiento en línea, el pedido y pago del anticipo ($10.000 únicamente por Bold oficial) se procesan a través de nuestra plataforma:
La atención comercial y asesoría es por este WhatsApp. Para garantizar tu despacho con factura y seguimiento en línea, el pedido y pago del anticipo ($10.000 con PSE, Tarjetas Débito/Crédito, Nequi o QR Bre-B) se procesan a través de nuestra plataforma:
👉 Enlace directo de compra: {enlace_compra}
📱 O descarga la App Móvil oficial: {enlace_app}
@ -648,7 +648,7 @@ La atención comercial y asesoría es por este WhatsApp. Para garantizar tu desp
🛡️ Garantía de fábrica y cambio de talla (sujeto a políticas de cobertura según ciudad)
🛒 ¿CÓMO REALIZAR TU PEDIDO Y PAGO SEGURO?
La atención comercial y asesoría es por este WhatsApp. Para garantizar tu despacho con factura y seguimiento en línea, el pedido y pago del anticipo ($10.000 únicamente por Bold oficial) se procesan a través de nuestra plataforma:
La atención comercial y asesoría es por este WhatsApp. Para garantizar tu despacho con factura y seguimiento en línea, el pedido y pago del anticipo ($10.000 con PSE, Tarjetas Débito/Crédito, Nequi o QR Bre-B) se procesan a través de nuestra plataforma:
👉 Enlace directo de compra: {enlace_compra}
📱 O descarga la App Móvil oficial: {enlace_app}
@ -676,7 +676,7 @@ La atención comercial y asesoría es por este WhatsApp. Para garantizar tu desp
Para confirmar tu pedido de las *{producto_nombre}* en talla *{talla}* (EUR) y despacharlo con total garantía y factura:
💎 *Precio Oficial:* {precio} COP
🚚 *Pago Contraentrega:* Separas con solo *$10.000* a través de Bold oficial (PSE o tarjetas) y el saldo restante lo cancelas contraentrega (en efectivo o mediante Bold) al recibir en tu puerta.
🚚 *Pago Contraentrega:* Separas con solo *$10.000* en línea (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B) y el saldo restante lo cancelas contraentrega (en efectivo o transferencia) al recibir en tu puerta.
📦 *Envío:* El valor del flete y tiempos de entrega varían según tu ciudad de destino.
🛡️ *Garantía:* Garantía directa y cambio de talla según políticas de cobertura en tu ciudad.
@ -693,7 +693,7 @@ Cualquier inquietud con tu dirección o el pago, ¡aquí estamos para ayudarte!`
Para confirmar tu pedido de las *{producto_nombre}* en talla *{talla}* (EUR) y despacharlo con total garantía y factura:
💎 *Precio Oficial:* {precio} COP
🚚 *Pago Contraentrega:* Separas con solo *$10.000* a través de Bold oficial (PSE o tarjetas) y el saldo restante lo cancelas contraentrega (en efectivo o mediante Bold) al recibir en tu puerta.
🚚 *Pago Contraentrega:* Separas con solo *$10.000* en línea (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B) y el saldo restante lo cancelas contraentrega (en efectivo o transferencia) al recibir en tu puerta.
📦 *Envío:* El valor del flete y tiempos de entrega varían según tu ciudad de destino.
🛡️ *Garantía:* Garantía directa y cambio de talla según políticas de cobertura en tu ciudad.
@ -729,7 +729,7 @@ Cualquier inquietud con tu dirección o el pago, ¡aquí estamos para ayudarte!`
• 💎 *Materiales Seleccionados:* Construcción de alta resistencia, acabados prémium y silueta impecable.
• ☁️ *Máximo Confort:* Plantilla ergonómica acolchada para máxima suavidad y comodidad al caminar.
• 🚚 *Envíos a Nivel Nacional:* Despachos a toda Colombia (el valor del envío y tiempos de entrega varían según la ciudad de destino).
• 💵 *Pago Contraentrega:* Separas tu pedido con anticipo por Bold oficial y cancelas el saldo restante en efectivo o con Bold al recibir en tu puerta.
• 💵 *Pago Contraentrega:* Separas tu pedido con solo $10.000 de anticipo (PSE, Tarjeta o Nequi) y cancelas el saldo restante en efectivo o transferencia al recibir en tu puerta.
• 🛡️ *Garantía Directa:* Respaldo de fábrica y cambio de talla (sujeto a cobertura y políticas según tu ciudad).
⚠️ *Disponibilidad:* Pocas unidades por talla en inventario nacional. ¡Asegura tu par ahora!`,
@ -739,7 +739,7 @@ Cualquier inquietud con tu dirección o el pago, ¡aquí estamos para ayudarte!`
• 💎 *Materiales Seleccionados:* Construcción de alta resistencia, acabados prémium y silueta impecable.
• ☁️ *Máximo Confort:* Plantilla ergonómica acolchada para máxima suavidad y comodidad al caminar.
• 🚚 *Envíos a Nivel Nacional:* Despachos a toda Colombia (el valor del envío y tiempos de entrega varían según la ciudad de destino).
• 💵 *Pago Contraentrega:* Separas tu pedido con anticipo por Bold oficial y cancelas el saldo restante en efectivo o con Bold al recibir en tu puerta.
• 💵 *Pago Contraentrega:* Separas tu pedido con solo $10.000 de anticipo (PSE, Tarjeta o Nequi) y cancelas el saldo restante en efectivo o transferencia al recibir en tu puerta.
• 🛡️ *Garantía Directa:* Respaldo de fábrica y cambio de talla (sujeto a cobertura y políticas según tu ciudad).
⚠️ *Disponibilidad:* Pocas unidades por talla en inventario nacional. ¡Asegura tu par ahora!`,
@ -761,12 +761,12 @@ Cualquier inquietud con tu dirección o el pago, ¡aquí estamos para ayudarte!`
━━━━━━━━━━━━━━━━━━━━━━
📏 *Tallas Disponibles:* {tallas} (EUR)
💵 *Precio Oficial:* *{precio} COP*
🚚 *Pago Contraentrega:* Pagas un anticipo de *$10.000* por Bold oficial para despacho garantizado y el saldo restante al recibir (en efectivo o mediante Bold).
🚚 *Pago Contraentrega:* Pagas un anticipo de *$10.000* en línea (PSE, Tarjeta o Nequi) para despacho garantizado y el saldo restante al recibir (en efectivo o transferencia).
📦 *Envío:* El costo del flete depende de la ciudad de destino.
🛡️ *Garantía:* Garantía de fábrica y cambio de talla según políticas de cobertura en tu ciudad.
🛒 *¿Cómo procesar tu pedido y pago seguro?*
Para tu seguridad, asignación de factura y reserva de tu talla, el pedido y pago del anticipo ($10.000 únicamente por Bold / PSE / Tarjetas) se procesan a través de nuestra plataforma:
Para tu seguridad, asignación de factura y reserva de tu talla, el pedido y pago del anticipo ($10.000 con PSE, Tarjetas Débito/Crédito, Nequi o QR Bre-B) se procesan a través de nuestra plataforma:
👉 *Enlace directo de compra:* {enlace_checkout}
📱 *O pide en nuestra App Móvil:* {enlace_app}
@ -776,12 +776,12 @@ Diligencia tus datos de envío en el enlace y hoy mismo programamos tu despacho.
━━━━━━━━━━━━━━━━━━━━━━
📏 *Tallas Disponibles:* {tallas} (EUR)
💵 *Precio Oficial:* *{precio} COP*
🚚 *Pago Contraentrega:* Pagas un anticipo de *$10.000* por Bold oficial para despacho garantizado y el saldo restante al recibir (en efectivo o mediante Bold).
🚚 *Pago Contraentrega:* Pagas un anticipo de *$10.000* en línea (PSE, Tarjeta o Nequi) para despacho garantizado y el saldo restante al recibir (en efectivo o transferencia).
📦 *Envío:* El costo del flete depende de la ciudad de destino.
🛡️ *Garantía:* Garantía de fábrica y cambio de talla según políticas de cobertura en tu ciudad.
🛒 *¿Cómo procesar tu pedido y pago seguro?*
Para tu seguridad, asignación de factura y reserva de tu talla, el pedido y pago del anticipo ($10.000 únicamente por Bold / PSE / Tarjetas) se procesan a través de nuestra plataforma:
Para tu seguridad, asignación de factura y reserva de tu talla, el pedido y pago del anticipo ($10.000 con PSE, Tarjetas Débito/Crédito, Nequi o QR Bre-B) se procesan a través de nuestra plataforma:
👉 *Enlace directo de compra:* {enlace_checkout}
📱 *O pide en nuestra App Móvil:* {enlace_app}
@ -814,7 +814,7 @@ Tu tienda oficial de sneakers, zapatillas y streetwear en tallas EUR.
💡 *¿Cómo funciona tu compra?*
1️⃣ Elige tu modelo y talla en el catálogo.
2️⃣ Los pedidos y anticipos se procesan en la web o app para asegurar tu factura y despacho inmediato.
3️⃣ Realizas un anticipo de *$10.000* únicamente por Bold oficial (PSE o tarjetas) y cancelas el saldo restante *contraentrega* al recibir en tu puerta (en efectivo o mediante Bold).
3️⃣ Realizas un anticipo de *$10.000* en línea (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B) y cancelas el saldo restante *contraentrega* al recibir en tu puerta (en efectivo o transferencia).
4️⃣ Envíos a todo el país con tiempos y flete según tu ciudad de destino.
5️⃣ Garantía directa y cambio de talla según políticas y cobertura de tu ciudad.
@ -831,7 +831,7 @@ Tu tienda oficial de sneakers, zapatillas y streetwear en tallas EUR.
💡 *¿Cómo funciona tu compra?*
1️⃣ Elige tu modelo y talla en el catálogo.
2️⃣ Los pedidos y anticipos se procesan en la web o app para asegurar tu factura y despacho inmediato.
3️⃣ Realizas un anticipo de *$10.000* únicamente por Bold oficial (PSE o tarjetas) y cancelas el saldo restante *contraentrega* al recibir en tu puerta (en efectivo o mediante Bold).
3️⃣ Realizas un anticipo de *$10.000* en línea (PSE, Tarjetas Débito/Crédito, Nequi o Bre-B) y cancelas el saldo restante *contraentrega* al recibir en tu puerta (en efectivo o transferencia).
4️⃣ Envíos a todo el país con tiempos y flete según tu ciudad de destino.
5️⃣ Garantía directa y cambio de talla según políticas y cobertura de tu ciudad.
@ -856,7 +856,7 @@ Tu tienda oficial de sneakers, zapatillas y streetwear en tallas EUR.
• *Cali y Área Metropolitana:* Despacho express en 24 horas hábiles con mensajería local.
• *Otras Ciudades Principales e Intermedias:* De 2 a 4 días hábiles mediante transportadora nacional con seguimiento en línea.
💵 *Forma de Pago:* Separación con $10.000 por Bold oficial y saldo restante contraentrega en efectivo o mediante Bold al recibir.
💵 *Forma de Pago:* Separación con $10.000 en línea (PSE, Tarjeta o Nequi) y saldo restante contraentrega en efectivo o transferencia al recibir.
¡Consulta la tarifa y tiempo exacto seleccionando tu ciudad en el checkout!`,
defaultContent: `🚚 *Información de Envíos y Despachos - {tienda_nombre}*
@ -865,7 +865,7 @@ Tu tienda oficial de sneakers, zapatillas y streetwear en tallas EUR.
• *Cali y Área Metropolitana:* Despacho express en 24 horas hábiles con mensajería local.
• *Otras Ciudades Principales e Intermedias:* De 2 a 4 días hábiles mediante transportadora nacional con seguimiento en línea.
💵 *Forma de Pago:* Separación con $10.000 por Bold oficial y saldo restante contraentrega en efectivo o mediante Bold al recibir.
💵 *Forma de Pago:* Separación con $10.000 en línea (PSE, Tarjeta o Nequi) y saldo restante contraentrega en efectivo o transferencia al recibir.
¡Consulta la tarifa y tiempo exacto seleccionando tu ciudad en el checkout!`,
availableVariables: [

View File

@ -0,0 +1,137 @@
import paramiko
import os
import urllib.request
import json
import ssl
import sys
import io
import time
import subprocess
if sys.platform == 'win32':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
HOST = "161.97.93.156"
USER = "carlos"
PASSWORD = "Innova1978+*?"
REMOTE_BASE = "/home/carlos/apps/dripzone-app"
LOCAL_APK = r"c:\Users\Carlos\dev\almeira-web\dripzone-app\public\DripZone.apk"
REMOTE_APK = f"{REMOTE_BASE}/public/DripZone.apk"
EVOLUTION_API_URL = "https://evolution.almeira.com.co"
ALMEIRA_INSTANCE_NAME = "AutomataAlmeira"
ALMEIRA_API_KEY = "EE49029EEB85-4568-8F81-C9FDFC6E2943"
TARGET_PHONE = "573167455877"
APK_URL = "https://drip-zone.online/DripZone.apk"
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
def main():
print("[1/5] Verificando APK local...")
if not os.path.exists(LOCAL_APK):
print(f" [ERROR] El archivo {LOCAL_APK} no existe.")
sys.exit(1)
size_mb = os.path.getsize(LOCAL_APK) / (1024 * 1024)
print(f" -> APK local verificado: {LOCAL_APK} ({size_mb:.2f} MB)")
print("[2/5] Guardando cambios y pusheando a Gitea...")
try:
subprocess.run(["git", "add", "."], cwd=r"c:\Users\Carlos\dev\almeira-web", check=False)
msg = "feat: sustitucion de marca Bold por medios de pago especificos (PSE, Tarjetas, Nequi, Daviplata y QR Bre-B)"
subprocess.run(["git", "commit", "-m", msg], cwd=r"c:\Users\Carlos\dev\almeira-web", check=False)
push_res = subprocess.run(["git", "push", "origin", "main"], cwd=r"c:\Users\Carlos\dev\almeira-web", capture_output=True, text=True)
print(" -> Git push:", push_res.stdout.strip() or push_res.stderr.strip())
except Exception as e:
print(" [WARN Git]:", e)
print("[3/5] Subiendo APK a VPS 161.97.93.156 vía SFTP...")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=HOST, username=USER, password=PASSWORD, timeout=30)
sftp = ssh.open_sftp()
try:
sftp.mkdir(f"{REMOTE_BASE}/public")
except:
pass
def progress_cb(transferred, total):
pct = (transferred / total) * 100
if transferred % (1024 * 1024 * 5) < 32768 or transferred == total:
print(f" -> Progreso SFTP: {transferred / (1024*1024):.1f} MB / {total / (1024*1024):.1f} MB ({pct:.0f}%)")
sftp.put(LOCAL_APK, REMOTE_APK, callback=progress_cb)
sftp.close()
print(" -> APK subido exitosamente al VPS.")
print("[4/5] Copiando APK a contenedores Docker...")
find_cmd = "docker ps --filter 'name=dripzone' --format '{{.ID}} {{.Names}}'"
stdin, stdout, stderr = ssh.exec_command(find_cmd)
containers = stdout.read().decode().strip().splitlines()
for line in containers:
if not line.strip():
continue
cid = line.split()[0]
cname = line.split()[1] if len(line.split()) > 1 else cid
print(f" -> Copiando a contenedor {cname} ({cid})...")
cp_cmd = f"docker cp {REMOTE_APK} {cid}:/app/public/DripZone.apk"
ssh.exec_command(cp_cmd)
ssh.close()
print(" -> Despliegue en VPS completado con éxito.")
print("[5/5] Enviando notificación y APK a WhatsApp de Carlos (+57 316 745 5877)...")
text_payload = {
"number": TARGET_PHONE,
"text": (
"✅ *Actualización DripZone: Medios de Pago Claros para el Comprador*\n\n"
"En lugar de mencionar únicamente el nombre de la pasarela técnica ('Bold'), ahora se muestran explícitamente los medios de pago que el cliente reconoce y utiliza:\n\n"
"1. 💳 *Medios de Pago Destacados:* PSE (todos los bancos de Colombia), Tarjetas Débito y Crédito (Visa, Mastercard, Amex), Nequi, Daviplata y Código QR Bre-B interoperable.\n"
"2. 📱 *Ficha de Producto y Carrito:* Se incorporó el badge de medios aceptados para anticipo de separación ($10.000) y la indicación de saldo contraentrega en efectivo o transferencia al recibir.\n"
"3. ⚡ *Checkout y Verificación de Pedido:* Botones y textos actualizados ('Pagar con PSE, Tarjeta o Nequi') para máxima conversión y confianza del usuario.\n"
"4. 💬 *Plantillas de WhatsApp Sincronizadas:* Todas las plantillas de catálogo, bot y asesor actualizadas en Appwrite y la app móvil.\n\n"
"📲 *Enlace directo de descarga APK:*\n"
f"{APK_URL}"
)
}
req_text = urllib.request.Request(
f"{EVOLUTION_API_URL}/message/sendText/{ALMEIRA_INSTANCE_NAME}",
data=json.dumps(text_payload).encode('utf-8'),
headers={"apikey": ALMEIRA_API_KEY, "Content-Type": "application/json"}
)
try:
with urllib.request.urlopen(req_text, context=ctx, timeout=15) as resp:
print(f" -> Mensaje de texto enviado a WhatsApp (Status: {resp.status})")
except Exception as e:
print(" [WARN WhatsApp Text]:", e)
# Enviar documento APK
media_payload = {
"number": TARGET_PHONE,
"mediatype": "document",
"mimetype": "application/vnd.android.package-archive",
"fileName": "DripZone-v2.7-Medios-Pago.apk",
"caption": "📲 *DripZone Android v2.7 - Medios de Pago Visibles (PSE, Tarjetas, Nequi, Bre-B)*",
"media": APK_URL
}
req_media = urllib.request.Request(
f"{EVOLUTION_API_URL}/message/sendMedia/{ALMEIRA_INSTANCE_NAME}",
data=json.dumps(media_payload).encode('utf-8'),
headers={"apikey": ALMEIRA_API_KEY, "Content-Type": "application/json"}
)
try:
with urllib.request.urlopen(req_media, context=ctx, timeout=60) as resp:
print(f" -> Archivo APK adjunto enviado a WhatsApp (Status: {resp.status})")
except Exception as e:
print(" [WARN WhatsApp Document]:", e)
print("\n🎉 ¡DESPLIEGUE Y ENVÍO A WHATSAPP COMPLETADOS!")
if __name__ == "__main__":
main()