import urllib.request import json import ssl import sys import io 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') EVOLUTION_API_URL = "https://evolution.almeira.com.co" EVOLUTION_API_KEY = "EE49029EEB85-4568-8F81-C9FDFC6E2943" INSTANCE_NAME = "AutomataAlmeira" TARGET_PHONE = "573167455877" APK_URL = "https://dripzone.almeira.com.co/api/download-apk" ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE def send_request(endpoint, payload): url = f"{EVOLUTION_API_URL}{endpoint}" data = json.dumps(payload).encode("utf-8") req = urllib.request.Request(url, data=data, headers={ "apikey": EVOLUTION_API_KEY, "Content-Type": "application/json" }) try: with urllib.request.urlopen(req, context=ctx, timeout=180) as response: return response.status, response.read().decode("utf-8") except urllib.error.HTTPError as e: return e.code, e.read().decode("utf-8") except Exception as e: return 0, str(e) def send_update(): message_text = ( "🚀 *DripZone Sneakers - APK Oficial Actualizado*\n\n" "✨ *Novedades de esta Actualización:*\n" "📸 *1. Imágenes en Alta Definición (Full HD - Cero Borrosidad):*\n" "• Se solucionó la causa raíz de las imágenes borrosas (los thumbnails de 32x32 px de WhatsApp).\n" "• Implementado endpoint `/api/whatsapp-media` que extrae en streaming la foto original Full HD (~500 KB) desde Evolution API con caché local ultra-rápida.\n" "• Tanto el feed de WhatsApp como las publicaciones de la tienda cargan ahora con nitidez y detalle total.\n\n" "☑️ *2. Selección de Página y Acciones Masivas en Productos (`/admin/productos`):*\n" "• Botón 'Seleccionar Página Actual' para marcar o desmarcar todos los productos visibles de la página en 1 clic.\n" "• Barra flotante de acciones en lote: Eliminar permanentemente seleccionados (borrado en bloque en BD y Appwrite), Activar/Ocultar y Reasignar categoría en lote.\n\n" "👟 *3. Módulo de Encargos / Pedidos Especiales para Clientes:*\n" "• Los usuarios (registrados y visitantes) ahora pueden solicitar cualquier par no listado en el catálogo subiendo foto de referencia, marca, modelo, talla y presupuesto estimado.\n" "• Al enviar la solicitud, te llega una alerta automática con todos los datos a tu WhatsApp (+57 316 745 5877) y el cliente recibe confirmación inmediata.\n" "• Nuevo panel en `/admin/encargos` para gestionar y cotizar pedidos especiales con enlace a chat directo.\n\n" "🌐 *Gitea:* Todos los cambios confirmados y respaldados en `main`.\n\n" f"📲 *Descarga directa del APK:* {APK_URL}\n\n" "¡Instala o actualiza el APK en tu Android para disfrutar de todas estas mejoras!" ) print(f"📤 [1/2] Enviando mensaje de texto a WhatsApp (+{TARGET_PHONE})...") payload_text = { "number": TARGET_PHONE, "text": message_text, "delay": 1000 } status, res = send_request(f"/message/sendText/{INSTANCE_NAME}", payload_text) print(" -> Respuesta de texto:", status, res[:200] if res else "") print(f"📤 [2/2] Enviando documento APK a WhatsApp (+{TARGET_PHONE})...") payload_media = { "number": TARGET_PHONE, "mediatype": "document", "mimetype": "application/vnd.android.package-archive", "fileName": "DripZone.apk", "caption": "📲 *DripZone.apk - Versión Oficial Actualizada*", "media": APK_URL } status, res = send_request(f"/message/sendMedia/{INSTANCE_NAME}", payload_media) print(" -> Respuesta de APK:", status, res[:200] if res else "") if __name__ == "__main__": send_update()