Files
SKEEN-Proyecto/hermes/hermes/plugins/wacrm_send.py
Consultoría Alcaraz Salazar a718592291 Initial commit: SKEEN Derma Experts - Sistema Integral de Gestión Clínica
- Frontend React (SKEEN Brand) con Vite, TypeScript, Tailwind
- Frontend Homenest (versión alternativa)
- Módulos Odoo 17 custom (citas, pacientes, monedero, pagos, ventas, inventario, whatsapp)
- WACRM fork (Next.js 16 + Supabase)
- Hermes + Bridge + Skills (Qwen3.6 via Nan Builders)
- Scripts de migración y operación
- Documentación extensiva en docs/
2026-07-20 07:44:23 +00:00

103 lines
3.0 KiB
Python

import os
import json
import requests
from typing import Dict, Optional, Any
WACRM_URL = os.environ.get("WACRM_URL", "http://wacrm:3000")
WACRM_API_KEY = os.environ.get("WACRM_API_KEY")
def wacrm_send(to: str, type: str = "text", text: str = None,
template: Dict = None, media_url: str = None) -> Dict[str, Any]:
"""
Plugin de Hermes para enviar mensajes via WACRM API.
Uso desde skills:
wacrm_send(to="+526641234567", type="text",
text="Hola! Tu cita esta confirmada")
Args:
to: Numero de telefono destino (formato E.164: +52664...)
type: Tipo de mensaje: 'text', 'template', 'image', 'document'
text: Contenido del mensaje (para type='text')
template: Dict con {name, language, params} (para type='template')
media_url: URL del archivo (para type='image' o 'document')
Returns:
Dict con la respuesta de WACRM API
"""
if not WACRM_API_KEY:
raise ValueError("WACRM_API_KEY no configurada en variables de entorno")
payload = {"to": to, "type": type}
if type == "text" and text:
payload["text"] = text
elif type == "template" and template:
payload["template"] = template
elif type in ("image", "document") and media_url:
payload["media_url"] = media_url
response = requests.post(
f"{WACRM_URL}/api/v1/messages",
headers={
"Authorization": f"Bearer {WACRM_API_KEY}",
"Content-Type": "application/json"
},
json=payload,
timeout=30
)
if not response.ok:
error_data = response.json() if response.content else {}
raise Exception(f"WACRM send failed: {error_data.get('error', {}).get('message', response.status_text)}")
return response.json()
def wacrm_send_template(to: str, template_name: str, language: str = "es_MX",
params: list = None) -> Dict[str, Any]:
"""
Atajo para enviar templates de WhatsApp aprobados.
Uso:
wacrm_send_template(to="+526641234567",
template_name="recordatorio_cita_skeen",
params=["Sofia", "5 de julio", "10:00 AM"])
"""
if params is None:
params = []
return wacrm_send(
to=to,
type="template",
template={
"name": template_name,
"language": language,
"params": params
}
)
def wacrm_send_text(to: str, text: str) -> Dict[str, Any]:
"""
Atajo para enviar mensaje de texto simple.
Uso:
wacrm_send_text(to="+526641234567", text="Hola! Como estas?")
"""
return wacrm_send(to=to, type="text", text=text)
# Registro del plugin para Hermes
PLUGIN_NAME = "wacrm_send"
PLUGIN_VERSION = "1.0.0"
PLUGIN_DESCRIPTION = "Envio de mensajes WhatsApp via WACRM API"
# Herramientas expuestas
TOOLS = {
"wacrm_send": wacrm_send,
"wacrm_send_template": wacrm_send_template,
"wacrm_send_text": wacrm_send_text,
}