Actualizar backend/main.py
This commit is contained in:
@@ -169,7 +169,8 @@ def get_plantillas():
|
|||||||
def post_plantillas_enviar(payload: dict = Body(...)):
|
def post_plantillas_enviar(payload: dict = Body(...)):
|
||||||
"""Envía una plantilla de WhatsApp (Chatwoot) a una lista de números.
|
"""Envía una plantilla de WhatsApp (Chatwoot) a una lista de números.
|
||||||
payload: {nombre, categoria, idioma, texto, telefonos:[...]}.
|
payload: {nombre, categoria, idioma, texto, telefonos:[...]}.
|
||||||
Solo se envía a números peruanos con código 51 (formato 51XXXXXXXXX)."""
|
Se envía a CUALQUIER país. NO se crean contactos nuevos: si el número no
|
||||||
|
existe en Chatwoot, se salta y se reporta en 'no_encontrados'."""
|
||||||
import os, requests, time
|
import os, requests, time
|
||||||
CHATWOOT_URL = os.getenv("CHATWOOT_URL", "https://gestor.escueladerefrigeracion.edu.pe")
|
CHATWOOT_URL = os.getenv("CHATWOOT_URL", "https://gestor.escueladerefrigeracion.edu.pe")
|
||||||
TOKEN = os.getenv("CHATWOOT_TOKEN", "4anazHvZnvKLtup8biu5Zuoh")
|
TOKEN = os.getenv("CHATWOOT_TOKEN", "4anazHvZnvKLtup8biu5Zuoh")
|
||||||
@@ -191,15 +192,18 @@ def post_plantillas_enviar(payload: dict = Body(...)):
|
|||||||
for x in ("+", " ", "-", "(", ")"): s = s.replace(x, "")
|
for x in ("+", " ", "-", "(", ")"): s = s.replace(x, "")
|
||||||
return s
|
return s
|
||||||
|
|
||||||
# Validar: debe empezar con 51 y tener 11 dígitos (51 + 9)
|
# Se envía a CUALQUIER país. Solo se exige que sea un número (dígitos, min 8).
|
||||||
validos, invalidos = [], []
|
validos, invalidos = [], []
|
||||||
for t in telefonos_raw:
|
for t in telefonos_raw:
|
||||||
s = normaliza(t)
|
s = normaliza(t)
|
||||||
if s.isdigit() and s.startswith("51") and len(s) == 11:
|
if s.isdigit() and len(s) >= 8:
|
||||||
validos.append(s)
|
validos.append(s)
|
||||||
else:
|
else:
|
||||||
invalidos.append(str(t))
|
invalidos.append(str(t))
|
||||||
|
|
||||||
|
# Números que NO existen como contacto en Chatwoot (no se crean, solo se reportan)
|
||||||
|
no_encontrados = []
|
||||||
|
|
||||||
def chat_id(tel):
|
def chat_id(tel):
|
||||||
tel_p = "+" + tel
|
tel_p = "+" + tel
|
||||||
try:
|
try:
|
||||||
@@ -208,16 +212,11 @@ def post_plantillas_enviar(payload: dict = Body(...)):
|
|||||||
data = r.json()
|
data = r.json()
|
||||||
except Exception:
|
except Exception:
|
||||||
return None
|
return None
|
||||||
cid = None
|
# Si NO existe el contacto → no crear, marcar como no encontrado
|
||||||
if ok(r.status_code) and data.get("payload"):
|
if not (ok(r.status_code) and data.get("payload")):
|
||||||
cid = data["payload"][0]["id"]
|
no_encontrados.append(tel)
|
||||||
else:
|
return None
|
||||||
rc = requests.post(f"{CHATWOOT_URL}/api/v1/accounts/{ACCOUNT_ID}/contacts",
|
cid = data["payload"][0]["id"]
|
||||||
headers=headers, json={"phone_number": tel_p, "inbox_id": INBOX_ID}, timeout=20)
|
|
||||||
if ok(rc.status_code):
|
|
||||||
cid = rc.json()["payload"]["contact"]["id"]
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
rconv = requests.get(f"{CHATWOOT_URL}/api/v1/accounts/{ACCOUNT_ID}/contacts/{cid}/conversations",
|
rconv = requests.get(f"{CHATWOOT_URL}/api/v1/accounts/{ACCOUNT_ID}/contacts/{cid}/conversations",
|
||||||
headers=headers, timeout=20)
|
headers=headers, timeout=20)
|
||||||
for conv in rconv.json().get("payload", []):
|
for conv in rconv.json().get("payload", []):
|
||||||
@@ -246,8 +245,11 @@ def post_plantillas_enviar(payload: dict = Body(...)):
|
|||||||
fallidos.append(tel)
|
fallidos.append(tel)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
# "fallo_envio" = existían pero falló el envío (excluye los no_encontrados)
|
||||||
|
fallo_envio = [t for t in fallidos if t not in set(no_encontrados)]
|
||||||
return {"status": "ok", "enviados": enviados,
|
return {"status": "ok", "enviados": enviados,
|
||||||
"fallidos": fallidos, "invalidos": invalidos,
|
"fallidos": fallidos, "invalidos": invalidos,
|
||||||
|
"no_encontrados": no_encontrados, "fallo_envio": fallo_envio,
|
||||||
"total": len(telefonos_raw)}
|
"total": len(telefonos_raw)}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user