80 lines
3.9 KiB
Python
80 lines
3.9 KiB
Python
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()
|