- 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/
103 lines
3.0 KiB
Python
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,
|
|
}
|