almeira-web/scripts/send_whatsapp_delivery.py

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()