Appearance
Manual Global de Plantillas para Kuenta
Este documento consolida toda la información relacionada con las plantillas utilizadas en los diferentes servicios de Kuenta, incluyendo estructura de datos, funciones disponibles, y ejemplos de uso.
Índice
- Introducción
- Estructura de Datos Comunes
- Funciones Comunes de Plantillas
- Acceso a Datos de Perfil
- Servicios Específicos
- Ejemplos Prácticos
- Mejores Prácticas
- Solución de Problemas
Introducción
Kuenta utiliza un sistema de plantillas basado en Go Templates para personalizar mensajes, notificaciones, documentos y comunicaciones con usuarios. Este manual explica cómo usar y personalizar estas plantillas para diferentes servicios como notificaciones de crédito, sobres de documentos, firmas electrónicas, correos electrónicos, webhooks y más.
Estructura de Datos Comunes
Objetos Principales
Los siguientes objetos están disponibles en múltiples servicios:
Objeto Entity/Organization
txt
.ID - ID de la organización/entidad
.Phone - Número de teléfono
.Email - Correo electrónico
.Nickname - Apodo o alias
.Verified - Si está verificado
.Type - Tipo de entidad (natural o legal)
.IDType - Tipo de identificación
.IDNumber - Número de identificación
.Profile - Perfil con datos personales
.ImportID - ID de importaciónObjeto Credit
txt
.Credit.ID - ID del crédito
.Credit.Status - Estado del crédito (ApprovedCredit, RejectedCredit, PendingCredit, etc.)
.Credit.Amount - Monto del crédito
.Credit.Principal - Monto principal del crédito
.Credit.Rate - Tasa de interés
.Credit.Term - Plazo del crédito
.Credit.Time - Duración del crédito en días
.Credit.Frequency - Frecuencia de pago
.Credit.CreatedAt - Fecha de creación
.Credit.UpdatedAt - Fecha de actualización
.Credit.StartDate - Fecha de inicio
.Credit.ApprovedAt - Fecha de aprobación
.Credit.CancelledAt - Fecha de cancelación
.Credit.Debtor - Objeto del deudor
.Credit.Creditor - Objeto del acreedor
.Credit.UserLastAction - Usuario que realizó la última acción
.Credit.Installments - Cuotas del crédito
.Credit.Summary - Resumen del créditoObjeto Profile
Los perfiles pueden ser de dos tipos principales:
Perfil de Tipo Natural (Persona Física)
txt
.Profile.Natural.FirstName - Nombre de la persona
.Profile.Natural.LastName - Apellido de la persona
.Profile.Natural.IDNumber - Número de identificación
.Profile.Natural.IDType - Tipo de identificación (CC, CE, etc.)
.Profile.Natural.DateOfBirth - Fecha de nacimiento
.Profile.Natural.Gender - Género
.Profile.Natural.JobTitle - Cargo/posición laboral
.Profile.Natural.Phone - Teléfono personal
.Profile.Natural.Mobile - Teléfono móvil
.Profile.Natural.Address - Dirección
.Profile.Natural.AddressCity - Ciudad de la dirección
.Profile.Natural.AddressState - Estado/Departamento de la dirección
.Profile.Natural.AddressZipCode - Código postal
.Profile.Natural.AddressCountry - País de la dirección
.Profile.Natural.Email - Correo electrónico
.Profile.Natural.AlternativeEmail - Correo electrónico alternativo
.Profile.Natural.NotificationEmail - Correo para notificaciones
.Profile.Natural.MaritalStatus - Estado civilPerfil de Tipo Legal (Persona Jurídica)
txt
.Profile.Legal.Name - Nombre de la empresa/entidad
.Profile.Legal.LegalName - Razón social completa
.Profile.Legal.IDNumber - Número de identificación tributaria (NIT/RUC)
.Profile.Legal.IDType - Tipo de identificación
.Profile.Legal.BusinessLine - Giro comercial/línea de negocio
.Profile.Legal.DateOfCreation - Fecha de constitución
.Profile.Legal.Phone - Teléfono principal
.Profile.Legal.Address - Dirección
.Profile.Legal.AddressCity - Ciudad
.Profile.Legal.AddressState - Estado/Departamento
.Profile.Legal.AddressZipCode - Código postal
.Profile.Legal.AddressCountry - País
.Profile.Legal.Email - Correo electrónico principal
.Profile.Legal.AlternativeEmail - Correo electrónico alternativo
.Profile.Legal.NotificationEmail - Correo para notificaciones
.Profile.Legal.URL - Sitio web oficialEstados del Crédito
Los posibles valores para .Credit.Status son:
| Estado | Descripción |
|---|---|
| ApprovedCredit | Crédito aprobado |
| RejectedCredit | Crédito rechazado |
| PendingCredit | Crédito pendiente |
| DisbursingCredit | Crédito en desembolso |
| DelinquentCredit | Crédito moroso |
| PaidCredit | Crédito pagado |
| DesistedCredit | Crédito desistido |
| UndeliveredCredit | Crédito no entregado |
| Colateral | Garantía |
| Formalized | Formalizado |
Funciones Comunes de Plantillas
Funciones Nativas de Go Templates
txt
{{ if }}...{{ else }}...{{ end }} - Condiciones
{{ range .Items }}...{{ end }} - Ciclos
{{ with .Object }}...{{ end }} - Establecer contexto
{{ index .Array 1 }} - Acceso a índice de array
{{ .Field }} - Acceso a campoFunciones Específicas de Kuenta
txt
{{ currency .Credit.Amount }} - Formatea un valor como moneda (Ej: $1,000,000)
{{ percentage .Credit.Rate }} - Formatea un valor como porcentaje (Ej: 12.5%)
{{ date .Credit.CreatedAt }} - Formatea una fecha (Ej: 01/01/2023)
{{ dateAAAAMMDD .Credit.CreatedAt }} - Formatea fecha como AAAAMMDD
{{ commonData .Profile "Name" }} - Accede a datos comunes de un perfil
{{ divide .Credit.Time .Credit.Frequency }} - Divide dos números
{{ frecuencyUnit .Credit.Frequency }} - Muestra la unidad de frecuencia (Ej: días, meses)
{{ pin }} - Obtiene el PIN de autenticación (en algunos contextos)
{{ summary }} - Genera un resumen HTML del crédito
{{ amortization }} - Genera una tabla HTML de amortización del crédito
{{ creditLimit "max" }} - Muestra el límite máximo de crédito
{{ formatDate .Date "format" }} - Formatea una fecha según un formato específico
{{ formatDateTime .Date "format" }} - Formatea una fecha y hora
{{ upper .Text }} - Convierte texto a mayúsculas
{{ lower .Text }} - Convierte texto a minúsculas
{{ title .Text }} - Convierte la primera letra de cada palabra a mayúscula
{{ html .HtmlContent }} - Marca contenido como HTML seguro
{{ htmlEscape .Content }} - Escapa caracteres HTML para mostrar código seguro
{{ urlEscape .URL }} - Codifica una URL para uso seguro en enlacesFunciones de la Biblioteca Sprig
La biblioteca Sprig proporciona un conjunto amplio de funciones útiles para manipulación de datos en plantillas. Después de un análisis detallado del código fuente, puedo confirmar que Sprig está explícitamente implementado en los siguientes servicios:
Servicio de Webhooks: Completamente implementado y documentado. El código en
domain/webhook.gomuestra que se incorporasprigFunctions := sprig.FuncMap()directamente en el procesamiento de plantillas.Servicio de Documentos: Implementado completamente en
document_service.go. El métodoParse()utiliza explícitamentesprigFunctions := sprig.FuncMap()y lo integra en las plantillas junto con las funciones estándar:gosprigFunctions := sprig.FuncMap() tmplBody, err := template.New("test").Funcs(sprigFunctions).Funcs(functions).Funcs(domain.ConfigurationFuncs(cfg)).Funcs(d.FuncsDocumentSrv(cfg)).Parse(documentCopy.Template.Body)
Para otros servicios (Email, Voice, Signature, Envelope, etc.), no hay importación directa de Sprig. Estos servicios utilizan el mapa de funciones comunes domain.Funcs() definido en tag.go que proporciona sus propias implementaciones de funciones como upper, lower, currency, etc. Aunque algunas de estas funciones tienen nombres similares a las de Sprig, son implementaciones específicas de Kuenta y no provienen de la biblioteca Sprig.
| Servicio | Acceso a Sprig | Implementación |
|---|---|---|
| Documentos | ✅ Completo | sprig.FuncMap() integrado directamente |
| Webhooks | ✅ Completo | sprig.FuncMap() integrado directamente |
| ❌ Parcial | Solo funciones de domain.Funcs() | |
| Voz | ❌ No | Solo funciones básicas de Go Templates |
| Firma | ❌ Parcial | Solo funciones de domain.Funcs() |
| Sobres | ❌ Parcial | Solo funciones de domain.Funcs() |
Para referencia completa de todas las funciones disponibles en Sprig, consulte la documentación oficial de Sprig.
Cuando esté disponible, las siguientes funciones de Sprig pueden utilizarse:
txt
{{ dict "key" "value" }} - Crear diccionario
{{ get $dict "key" }} - Obtener valor de diccionario
{{ add 1 2 }} - Suma de números
{{ sub 5 2 }} - Resta de números
{{ mul 2 3 }} - Multiplicación
{{ div 6 3 }} - División
{{ mod 5 2 }} - Módulo
{{ toString .Value }} - Convertir a string
{{ toInt "123" }} - Convertir a entero
{{ contains "hello" "lo" }} - Verificar si contiene
{{ replace "hello" "l" "r" -1 }} - Reemplazar caracteres
{{ trim " text " }} - Eliminar espacios
{{ lower "TEXT" }} - Convertir a minúsculas
{{ upper "text" }} - Convertir a mayúsculas
{{ toJson . }} - Convertir objeto a JSON
{{ fromJson . }} - Convertir JSON a objeto
{{ now }} - Obtener fecha/hora actual
{{ date_format "2006-01-02" .Date }} - Formatear fecha según patrón
{{ uuidv4 }} - Generar UUID v4Acceso a Datos de Perfil
Función commonData
La función commonData está diseñada específicamente para acceder a campos comunes entre perfiles de tipo Natural y Legal. Esta función sólo permite acceder a un conjunto limitado de campos, y es la forma recomendada de obtener datos ya que maneja automáticamente las diferencias entre tipos de perfil.
Campos disponibles a través de commonData
| Campo | Descripción | Ejemplo de uso |
|---|---|---|
| Name | Nombre | commonData .Profile "AddressCity" |
| Correo electrónico | commonData .Profile "Email" | |
| Address | Dirección | commonData .Profile "Address" |
| AddressCity | Ciudad | commonData .Profile "AddressCity" |
| IDNumber | Número de identificación | commonData .Profile "IDNumber" |
| Initials | Iniciales | commonData .Profile "Initials" |
Ejemplos de uso correcto
txt
{{ commonData .Entity.Profile "Name" }}
{{ commonData .Credit.Debtor.Profile "Email" }}
{{ commonData .Recipient.Profile "IDNumber" }}Verificación del Tipo de Perfil
Si necesita acceder a campos específicos no disponibles a través de commonData, debe verificar el tipo de perfil:
txt
{{ if eq .Profile.Type "Natural" }}
{{ .Profile.Natural.FirstName }} {{ .Profile.Natural.LastName }}
{{ else }}
{{ .Profile.Legal.Name }}
{{ end }}Servicios Específicos
Servicio de Notificación de Crédito
El servicio de notificación de crédito permite enviar comunicaciones relacionadas con créditos a través de email y SMS.
Variables disponibles para Correos Electrónicos
txt
.Organization - La organización (acreedor o deudor dependiendo del contexto)
.URL - La URL del dominio configurado
.Credit - El objeto de crédito completoVariables disponibles para SMS
txt
.URL - La URL del dominio configurado
.Credit - El objeto de créditoFunciones específicas
txt
{{ pin }} - Obtiene el PIN de autenticación
{{ summary }} - Genera un resumen HTML del crédito
{{ amortization }} - Genera una tabla HTML de amortizaciónServicio de Sobres (Envelopes)
El servicio de sobres (Envelope Service) gestiona documentos y firmas, permitiendo crear sobres con documentos a firmar, gestionar destinatarios, notificar y procesar documentos.
Objetos principales
txt
Envelope - Contiene información del sobre completo
Recipient - Información del destinatario
Document - Información del documento
SignatureRequest - Solicitud de firma
Signature - Información de la firmaVariables disponibles para Emails
txt
.Organization - La organización propietaria del sobre
.Entity - La entidad destinataria
.URL - Enlace al sobre (con código de acceso si es necesario)
.Title - Título del sobre como HTMLVariables disponibles para SMS
txt
.Organization - Datos básicos de la organización
.URL - Enlace al sobre
.Title - Título del sobreServicio de Firma
El servicio de firma personaliza documentos de certificación de firma.
Variables disponibles
txt
.FirstName - Nombre del firmante
.LastName - Apellido del firmante
.IDType - Tipo de documento de identidad
.IDNumber - Número de documento de identidad
.Phone - Número de teléfono
.Email - Correo electrónico
.Image - Imagen de perfil del firmante (base64)
.IDImageFront - Imagen frontal del documento de identidad (base64)
.IDImageBack - Imagen posterior del documento de identidad (base64)
.Document - Objeto completo del documento
.Certificate - Código QR de certificado (base64)
.PartyProfile - Perfil completo de la parte firmante
.ProxyProfile - Perfil completo del apoderado (si aplica)Funciones específicas
txt
{{ formatDate .Date "format" }} - Formatea una fecha
{{ formatDateTime .Date "format" }} - Formatea una fecha y hora
{{ upper .Text }} - Convierte texto a mayúsculas
{{ lower .Text }} - Convierte texto a minúsculas
{{ title .Text }} - Convierte la primera letra de cada palabra a mayúscula
{{ html .HtmlContent }} - Marca contenido como HTML seguroServicio de Documentos
El servicio de documentos gestiona la creación, procesamiento y visualización de documentos en la plataforma.
Variables disponibles
Estas variables dependen del contexto específico del documento, pero generalmente incluyen:
txt
.Document - El documento actual
.Template - La plantilla del documento
.Title - Título del documento
.Body - Cuerpo del documento como HTML
.Creditor - Organización acreedora
.Party - Parte involucrada
.Signatures - Firmas asociadas al documentoFunciones disponibles
El servicio de documentos utiliza tanto las funciones estándar de Go Templates como las funciones de la biblioteca Sprig. De acuerdo con el análisis del código en document_service.go, el método Parse() incorpora explícitamente la biblioteca Sprig junto con las funciones personalizadas de Kuenta:
go
sprigFunctions := sprig.FuncMap()
tmplBody, err := template.New("test").Funcs(sprigFunctions).Funcs(functions).Funcs(domain.ConfigurationFuncs(cfg)).Funcs(d.FuncsDocumentSrv(cfg)).Parse(documentCopy.Template.Body)Esto significa que todas las transformaciones y manipulaciones de datos que ofrece Sprig están completamente disponibles al procesar documentos, incluyendo:
txt
{{ formatDate .Date "format" }} - Formatea una fecha
{{ formatDateTime .Date "format" }} - Formatea una fecha y hora
{{ upper .Text }} - Convierte texto a mayúsculas
{{ lower .Text }} - Convierte texto a minúsculas
{{ title .Text }} - Convierte la primera letra de cada palabra a mayúscula
{{ html .HtmlContent }} - Marca contenido como HTML seguro
{{ toJson . }} - Convierte a formato JSON
{{ dict "key" "value" }} - Crea un diccionario
{{ get $dict "key" }} - Obtiene valor de un diccionarioAdemás, el servicio de documentos agrega funciones específicas a través de FuncsDocumentSrv():
txt
{{ signedAt .EntityID .TemplateID }} - Obtiene la fecha en que se firmó un documento
{{ currencyEntity .Value }} - Formatea moneda según la configuración de la entidad
{{ incomes .Value }} - Formatea ingresos según la configuración
{{ expenses .Value }} - Formatea gastos según la configuraciónServicio de Correo Electrónico
El servicio de correo electrónico permite enviar comunicaciones personalizadas por email.
Variables disponibles
txt
.Entity - La entidad relacionada con el correo
.Profile - El perfil de la entidad
.Organization - La organización emisora
.Credit - El objeto de crédito (en correos relacionados con créditos)
.Invitation - Objeto de invitación (en correos de invitación)
.Title - Título del correo como HTML
.Body - Cuerpo del correo como HTML
.Code - Código de verificación o similar
.URL - URL a la que se debe dirigir el usuario
.Activity - Registro de actividad del usuarioServicio de Firma Adjunta
El servicio de firma adjunta notifica a los usuarios sobre documentos firmados que incluyen archivos adjuntos.
Variables disponibles
txt
.Title - El título del documento en formato HTML
.Body - El cuerpo del documento en formato HTML
.Organization - La organización (acreedor)
.Profile - El perfil del destinatario
.URL - La URL del documentoServicio de Solicitud de Firma
Este servicio gestiona las solicitudes de firma de documentos.
Variables disponibles
txt
.Title - El título del documento en formato HTML
.Body - El cuerpo del documento en formato HTML
.Organization - La organización (acreedor)
.Entity - La entidad (deudor o destinatario)
.Profile - El perfil del destinatario
.URL - La URL del documentoServicio de Voz
El servicio de voz permite comunicaciones por llamadas telefónicas.
Variables disponibles
txt
.Sender - Información del remitente
.Recipient - Información del destinatario
.Title - El título del documento o mensaje
.Body - El cuerpo del mensaje
.Code - Código de verificación o PIN
.URL - URL relevante
.SubmitURL - URL para enviar respuestasConsideraciones especiales para plantillas de voz
- Brevedad: Las frases deben ser cortas y concisas
- Claridad: Evite lenguaje complejo o técnico
- Pausas: Use comas y puntos para controlar el ritmo
- Números: Para que los números se pronuncien dígito por dígito, sepárelos con espacios
Webhooks
Los webhooks permiten notificar a sistemas externos cuando ocurren eventos específicos.
Estructura principal
txt
.Credit - El objeto de crédito completoFunciones específicas adicionales (Biblioteca Sprig)
Las funciones de la biblioteca Sprig descritas en la sección Funciones de la Biblioteca Sprig están completamente disponibles en los webhooks, permitiendo transformaciones de datos complejas. Algunas de las más utilizadas en webhooks son:
txt
{{ dict "key" "value" }} - Crear diccionario para mapear valores
{{ get $dict "key" }} - Obtener valor de un diccionario
{{ toString .Value }} - Convertir a string
{{ toInt "123" }} - Convertir a enteroServicio SMTP
El servicio SMTP gestiona el envío de correos a través del protocolo SMTP.
Variables disponibles para correos estándar
txt
.Subject - Asunto del correo
.Body - Cuerpo del correo en formato HTML
.FromEmail - Correo electrónico del remitente
.FromName - Nombre del remitente
.To - Correo electrónico del destinatario
.Name - Nombre del destinatario
.Files - Archivos adjuntosVariables disponibles para solicitudes de asistencia
txt
.Entity - Entidad principal (acreedor)
.Member - Miembro o usuario que solicita asistencia
.Child - Entidad secundaria (deudor o tercero)
.Config - Configuración del correo
.PIN - Código PIN de verificaciónEjemplos Prácticos
Ejemplo de Correo de Bienvenida
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Bienvenido a Kuenta</title>
</head>
<body>
<h1>¡Bienvenido, {{ commonData .Entity.Profile "Name" }}!</h1>
<p>Gracias por registrarte en nuestra plataforma.</p>
<p>Para confirmar tu cuenta, haz clic en el siguiente enlace:</p>
<a href="{{ .URL }}">Confirmar mi cuenta</a>
<p>O utiliza este código de verificación: <strong>{{ .Code }}</strong></p>
<p>Saludos,<br />El equipo de Kuenta</p>
</body>
</html>Ejemplo de Certificado de Firma Digital
html
<div class="certificate">
<h1>Certificado de Firma Digital</h1>
<div class="header">
<img src="{{ .Certificate }}" alt="Código QR de certificado" />
<h2>{{ .Document.Title }}</h2>
<p>Referencia: {{ .Document.Reference }}</p>
</div>
<div class="signer-info">
<h3>Información del Firmante</h3>
<img src="{{ .Image }}" alt="Foto del firmante" />
<p><strong>Nombre:</strong> {{ title .FirstName }} {{ title .LastName }}</p>
<p><strong>Identificación:</strong> {{ .IDType }} {{ .IDNumber }}</p>
<p><strong>Correo:</strong> {{ .Email }}</p>
</div>
<div class="document-info">
<h3>Documento Firmado</h3>
<p><strong>Título:</strong> {{ .Document.Title }}</p>
<p>
<strong>Fecha de firma:</strong> {{ formatDateTime .CreatedAt "2006-01-02
15:04:05" }}
</p>
<p><strong>Dirección IP:</strong> {{ .IP }}</p>
</div>
</div>Ejemplo de Notificación de Crédito Aprobado
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Tu Crédito ha sido Aprobado</title>
</head>
<body>
<h1>¡Felicidades, {{ commonData .Credit.Debtor.Profile "Name" }}!</h1>
<p>Nos complace informarte que tu solicitud de crédito ha sido aprobada.</p>
<h2>Detalles del Crédito:</h2>
<ul>
<li>Monto: {{ currency .Credit.Amount }}</li>
<li>Tasa de interés: {{ percentage .Credit.Rate }}</li>
<li>Plazo: {{ .Credit.Term }} días</li>
<li>Fecha de aprobación: {{ date .Credit.ApprovedAt }}</li>
</ul>
<h2>Resumen del Crédito:</h2>
{{ summary }}
<h2>Tabla de Amortización:</h2>
{{ amortization }}
<p>
Para continuar con el proceso de desembolso, haz clic en el siguiente
enlace:
</p>
<a href="{{ .URL }}">Proceder al desembolso</a>
<p>Si tienes alguna pregunta, no dudes en contactarnos.</p>
<p>Saludos,<br />El equipo de Kuenta</p>
</body>
</html>Ejemplo de Plantilla de Voz para Verificación
txt
Hola, {{ commonData .Recipient.Profile "Name" }}.
Le llamamos de {{ commonData .Sender.Profile "Name" }}.
Su código de verificación para el documento {{ .Title }} es: {{ .Code }}.
Repito, su código es: {{ .Code }}.
Por favor, ingrese este código en el sitio web para continuar con el proceso de firma.
Gracias por su atención.Ejemplo de Webhook con Transformación de Datos
json
{
"identificacion": "{{.Credit.Debtor.Profile.Natural.IDNumber}}",
"nombre": "{{.Credit.Debtor.Profile.Natural.FirstName}}",
"apellido": "{{.Credit.Debtor.Profile.Natural.LastName}}",
{{$tipoDocumentos:= dict "CC" "01" "CE" "02" "TI" "03" "PA" "06"}}
{{ $tipoDocumento := .Credit.Debtor.Profile.Natural.IDType| toString}}
"tipIdentificacion": "{{get $tipoDocumentos $tipoDocumento}}",
"fchNacimiento": "{{.Credit.Debtor.Profile.Natural.Birthdate | dateAAAAMMDD}}",
"telefono": "{{.Credit.Debtor.Phone}}",
"credito": {
"valorSolicitado": {{.Credit.Principal}},
"valorAprobado": {{.Credit.Amount}},
"plazo": {{.Credit.Term}},
"tasa": {{.Credit.Rate}}
}
}Mejores Prácticas
Usar commonData para campos comunes de perfil:
txt{{ commonData .Profile "Name" }}en lugar de intentar determinar el tipo manualmente.
Verificar existencia de datos antes de usarlos:
txt{{ if .Credit.ApprovedAt }} <p>Fecha de aprobación: {{ date .Credit.ApprovedAt }}</p> {{ else }} <p>El crédito aún no ha sido aprobado.</p> {{ end }}Usar condiciones para mostrar contenido específico:
txt{{ if eq .Credit.Status "ApprovedCredit" }} <p>Tu crédito ha sido aprobado.</p> {{ else if eq .Credit.Status "RejectedCredit" }} <p>Lo sentimos, tu solicitud de crédito ha sido rechazada.</p> {{ else }} <p>Tu solicitud está en proceso.</p> {{ end }}Para plantillas de correo electrónico:
- Incluir estilos en línea para compatibilidad con clientes de correo
- Usar tablas para la estructura del correo
- Mantener los correos responsivos para dispositivos móviles
- Incluir versión de texto plano para clientes que no muestran HTML
Para plantillas de voz:
- Mantener los mensajes simples y directos
- Repetir la información importante, especialmente códigos
- Separar dígitos con espacios para pronunciación correcta:
1 2 3 4 5 6
Para webhooks:
- Validar el formato de la plantilla antes de guardar
- Utilizar diccionarios para mapear valores
- Implementar manejo de errores en el sistema receptor
Uso de la biblioteca Sprig:
- Aprovechar las funciones de Sprig para transformaciones de datos complejas en webhooks y documentos, donde está confirmado su disponibilidad según el análisis en profundidad del código fuente
- Las plantillas de webhook tienen acceso completo a todas las funciones de Sprig, como se comprueba en
domain/webhook.gocon la incorporación directa desprigFunctions := sprig.FuncMap() - Las plantillas de documentos también tienen acceso completo a Sprig, como se verifica en
document_service.gocon la misma incorporación directa - Otros servicios (Email, Signature, Envelope, etc.) no importan directamente Sprig, sino que utilizan funciones personalizadas definidas en
domain.Funcs()entag.go - No asumir que las funciones con nombres similares a las de Sprig (como
upper,lower) en otros servicios provienen de Sprig, ya que son implementaciones propias de Kuenta - Consultar la documentación oficial de Sprig al trabajar con webhooks y documentos para aprovechar todas las funciones disponibles
Selección de funciones según el servicio:
- Para Webhooks y Documentos: Utilice toda la potencia de Sprig, especialmente:
- Diccionarios:
dict,get,hasKey - Transformación JSON:
toJson,fromJson - Manipulación de strings:
trim,upper,lower,replace - Operaciones matemáticas:
add,sub,mul,div - Fechas:
now,date_format
- Diccionarios:
- Para Email y otros servicios: Limítese a las funciones de Kuenta:
- Formateo de valores:
currency,percentage,date - Acceso a datos:
commonData - Funciones específicas como
summary,amortization(donde estén disponibles)
- Formateo de valores:
- Para el servicio de Voz: Use solo las funciones básicas de Go Templates:
- Condicionales:
if,else,end - Iteraciones:
range - Acceso a campos:
.Field
- Condicionales:
- Para Webhooks y Documentos: Utilice toda la potencia de Sprig, especialmente:
Solución de Problemas
Variables No Disponibles
Si una variable no está disponible en el contexto actual, se mostrará en blanco o podría causar un error. Siempre verifica que exista antes de usarla:
txt
{{ if .Credit }}
<!-- Código que usa .Credit -->
{{ else }}
<!-- Código alternativo -->
{{ end }}Acceso Incorrecto a Datos del Perfil
Recuerda que commonData solo funciona con los 6 campos predefinidos:
txt
<!-- Correcto -->
{{ commonData .Profile "Name" }}
<!-- Incorrecto (otros campos no disponibles a través de commonData) -->
{{ commonData .Profile "SomeOtherField" }}Problemas con commonData
Si el resultado de commonData está vacío, verifica:
- Que el campo solicitado sea uno de los 6 permitidos
- Que estás usando el nombre exacto con mayúsculas correctas (ej. "Name", no "name")
- Que el perfil al que intentas acceder existe
Pronunciación de Números en Plantillas de Voz
Para que los números se pronuncien correctamente en plantillas de voz:
txt
Incorrecto: Su código es 123456
Correcto: Su código es 1 2 3 4 5 6Correos No Entregados
Si los correos no se entregan, compruebe:
- La configuración del servidor SMTP
- Las credenciales de autenticación
- Si hay filtros de spam afectando la entrega
Problemas con Tamaño de Correos
Si los correos son muy grandes (especialmente con adjuntos), considere:
- Comprimir archivos grandes
- Usar enlaces en lugar de adjuntos
- Simplificar el HTML y reducir imágenes