Official Python SDK for DoJa Chatbots and WhatsApp Business Integration
Project description
DoJa Python SDK 🚀
El DoJa SDK es la biblioteca oficial de Python para conectar, automatizar y escalar envíos masivos o transaccionales a través de WhatsApp Cloud API (Meta) y el Gateway de Emails DoJa.
Con DoJa SDK, te olvidas de integraciones complejas. Usa la misma licencia para disparar notificaciones en ambos canales mediante un código elegante, rápido y sin dependencias pesadas.
💻 Instalación
Solo requieres Python 3.7+ y pip. El SDK no empuja dependencias pesadas ni requiere que instales las librerías oficiales de Meta o proveedores externos de Email:
pip install doja-sdk
📚 Índice
- WhatsApp (Mensajería, Templates y Multimedia)
- Email (Texto, HTML y Adjuntos)
- Módulo Asíncrono (AsyncIO) ⚡
- Manejo de Errores y Excepciones
- Optimización y Desempeño
1. Módulo de WhatsApp 💬
Para interactuar con WhatsApp, necesitas tu Token de Licencia DoJa, tu Token de Meta y tu Phone ID.
Configuración Inicial
from doja_sdk import DojaClient, DojaAuthError
try:
wa = DojaClient(
doja_token="TU-LICENCIA-DOJA", # Token de tu suscripción en DoJa
whatsapp_token="EAAB12345...", # Token Permanente/Temporal de Meta
phone_id="100747123456" # Identificador de tu número en Meta
)
print("¡Conexión a WhatsApp exitosa!")
except DojaAuthError as e:
print(f"Error de licencia: {e}")
Ejemplos de Envío (WhatsApp)
(Nota: El destinatario debe incluir código de país sin el signo '+'. Ej: "525512345678")
Mensaje de Texto Simple:
wa.send_text("525512345678", "¡Hola! Hemos recibido tu pago exitosamente.")
Documentos (PDF, Facturas, Excel):
wa.send_document(
to="525512345678",
url="https://ejemplo.com/factura.pdf",
caption="Aquí tienes tu factura del mes 📝",
filename="Factura_Octubre.pdf" # Opcional: Nombre con el que se descarga
)
Imágenes y Promocionales:
wa.send_image(
to="525512345678",
url="https://ejemplo.com/promo.jpg",
caption="¡Aprovecha nuestro descuento de temporada!"
)
Ubicación Compartida (Abre interactivo en Google Maps/Waze):
wa.send_location(
to="525512345678",
latitude=19.432608,
longitude=-99.133209,
name="Sucursal Centro",
address="Centro Histórico, CDMX, México"
)
Botones Interactivos (Máximo 3 botones):
botones = [
{"id": "soporte", "title": "Hablar con Soporte"},
{"id": "ventas", "title": "Cotizar Servicios"}
]
wa.send_interactive_button(
to="525512345678",
body_text="¿En qué área podemos apoyarte hoy?",
buttons_list=botones
)
Listas Desplegables (Ideal para menús largos):
secciones = [
{
"title": "Áreas de Atención",
"rows": [
{"id": "1", "title": "Soporte", "description": "Fallas técnicas"},
{"id": "2", "title": "Ventas", "description": "Nuevas suscripciones"}
]
}
]
wa.send_interactive_list(
to="525512345678",
body_text="Por favor selecciona el área deseada:",
button_text="Ver Opciones",
sections=secciones
)
Templates Aprobados por Meta: (Requerido para iniciar conversación fuera de la ventana de atención de 24 hrs)
Variables POSICIONALES ({{1}}, {{2}}, ...):
wa.send_template(
to="525512345678",
template_name="confirmacion_pedido", # Nombre idéntico al de Meta
language_code="es",
body_variables=["Juan", "#123456", "Mañana a las 15:00 hrs"]
)
Variables NOMBRADAS ({{nombre_cliente}}, {{folio}}, ...):
wa.send_template(
to="525512345678",
template_name="confirmacion_pedido",
language_code="es",
body_variables_named={
"nombre_cliente": "Juan",
"folio": "#123456",
"fecha_entrega": "Mañana a las 15:00 hrs",
}
)
[!NOTE]
body_variablesybody_variables_namedson mutuamente excluyentes. Una plantilla de WhatsApp usa o bien placeholders posicionales ({{1}}) o bien nombrados ({{nombre}}), nunca ambos en el mismo body. Si pasas los dos, el SDK lanzaDojaValidationError.
2. Módulo de Email 📧
El Módulo de Email está diseñado para ser extremadamente intuitivo. Para autenticarte, no requieres doble token. Tu clave de licencia de DoJa funciona automáticamente como la llave para despachar los correos mediante nuestro proveedor subyacente (Resend).
Configuracion Rapida - Email
from doja_sdk import DojaEmailClient
try:
email = DojaEmailClient(
doja_token="TU-LICENCIA-DOJA", # La licencia que DoJa valida
external_id="LA_LLAVE_DE_SERVICIO", # ID proporcionado por el integrador
from_address="no-reply@tuempresa.com" # Remitente verificado
)
print("¡Conexión de Email exitosa!")
except DojaAuthError as e:
print(f"Error de licencia o permisos: {e}")
Ejemplos de Envío (Email)
Texto Plano Rápido:
email.send(
to="cliente@empresa.com",
subject="Confirmación de Registro",
body="Gracias por registrarte en nuestra plataforma."
)
Email con HTML enriquecido:
email.send(
to="cliente@empresa.com",
subject="Bienvenido a tu suscripción Pro",
body="<h1>¡Hola Juan!</h1><p>Tu cuenta ya está activa. <a href='https://app.doja.com'>Ingresa aquí</a>.</p>",
html=True
)
Email con Archivos Adjuntos (Rutas Locales o URLs): (El SDK procesa archivos locales codificándolos en Base64 o transfiere la URL de forma directa al Gateway)
email.send(
to="cliente@empresa.com",
subject="Tu Factura de Marzo",
body="Adjuntamos tu factura digitalizada correspondiente a este mes.",
attachments=[
"/ruta/absoluta/factura_marzo.pdf", # Archivo local
"https://ejemplo.com/cotizacion_final.xlsx" # Archivo por URL
]
)
Funciones Avanzadas (Múltiples destinatarios, CC, BCC y Reply-To):
email.send(
to="gerente@empresa.com, asistente@empresa.com", # Puedes separar por comas
subject="Reporte Financiero Semanal",
body="<h2>Reporte Generado</h2><p>Aquí tienes el archivo de esta semana.</p>",
html=True,
cc=["director@empresa.com"],
bcc=["auditoria@empresa.com"],
reply_to="soporte@empresa.com",
attachments=["/ruta/reporte.xlsx", "/ruta/resumen.pdf"]
)
3. Módulo Asíncrono (AsyncIO) ⚡
Ideal para aplicaciones modernas como FastAPI o procesos que requieren alta concurrencia. El SDK asíncrono utiliza httpx bajo el capó para realizar operaciones no bloqueantes.
WhatsApp Asíncrono
import asyncio
from doja_sdk import AsyncDojaClient
async def main():
wa = AsyncDojaClient(
doja_token="TU-LICENCIA-DOJA",
whatsapp_token="EAAB...",
phone_id="123456789"
)
# Envío no bloqueante
await wa.send_text("525512345678", "¡Hola desde Async SDK!")
asyncio.run(main())
Email Asíncrono
from doja_sdk import AsyncDojaEmailClient
async def send_welcome():
email = AsyncDojaEmailClient(
doja_token="TU-LICENCIA-DOJA",
external_id="LLAVE_RESEND",
from_address="hola@tuempresa.com"
)
await email.send(
to="cliente@ejemplo.com",
subject="Bienvenido",
body="<h1>Registro Exitoso</h1>",
html=True
)
4. Manejo de Errores 🛡️
El SDK expone excepciones estandarizadas que te permiten saber exactamente qué falló (si fue un problema de saldo, de licencia o de la API destino). Las puedes importar todas desde doja_sdk:
from doja_sdk import (
DojaClient,
DojaAuthError,
DojaQuotaExceeded,
DojaAPIError
)
try:
client = DojaClient(...)
client.send_text(...)
except DojaAuthError as e:
# 404 No encontrado, 422 Inválido, 409 Suspendido, o no tiene el canal (WhatsApp/Email) pagado
print(f"Problema con la Licencia: {e}")
except DojaQuotaExceeded as e:
# 409 La licencia es válida, pero el cliente se acabó su bolsa de mensajes
print(f"Saldo Agotado: {e}")
except DojaAPIError as e:
# Ocurre si Meta o Resend rechazan la petición (Ej: plantilla mal armada, mal teléfono, adjunto pesado)
print(f"Problema con el Proveedor Destino: {e}")
5. Optimización y Desempeño 🚀
Esta versión del SDK incluye mejoras críticas:
- Caché de Licencia: La validación de licencia se cachea localmente durante 5 minutos para evitar picos de latencia en cada mensaje enviado.
- Logging: Hemos reemplazado los
printpor el módulologging. Puedes configurar el nivel de detalle:import logging logging.getLogger("doja_sdk").setLevel(logging.DEBUG)
- Consumo Robusto: Las llamadas de consumo de créditos se ejecutan con manejadores de errores internos para asegurar que un fallo en el servidor de licencias no interrumpa tu proceso principal.
¿Dudas adicionales o soporte técnico?
Comunícate directamente a: contact@dojaconsulting.cloud
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file doja_sdk-0.6.0.tar.gz.
File metadata
- Download URL: doja_sdk-0.6.0.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b51d5c5f0a20922927feeea6aa14012752ed1219d123c4e7c21a9265e57bfead
|
|
| MD5 |
9a5740ced47916ff63878419ade2c53e
|
|
| BLAKE2b-256 |
f53bfe6296564592735285aa56262e887b0aec42e22e5caf3f5997998db1cade
|
File details
Details for the file doja_sdk-0.6.0-py3-none-any.whl.
File metadata
- Download URL: doja_sdk-0.6.0-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a671d962595e5fb8ee995fe31fae7558c7e6f889d254f433d2781230bc0fd9b4
|
|
| MD5 |
2e602a4b4ec3ed788f7da15483e22dbe
|
|
| BLAKE2b-256 |
6465b2b915adfdb8d9779a7ba300bdf3dd2964f664f23cc2e666f6768d94df98
|