Skip to content

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

  1. Introducción
  2. Estructura de Datos Comunes
  3. Funciones Comunes de Plantillas
  4. Acceso a Datos de Perfil
  5. Servicios Específicos
  6. Ejemplos Prácticos
  7. Mejores Prácticas
  8. 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ón

Objeto 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édito

Objeto 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 civil
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 oficial

Estados del Crédito

Los posibles valores para .Credit.Status son:

EstadoDescripción
ApprovedCreditCrédito aprobado
RejectedCreditCrédito rechazado
PendingCreditCrédito pendiente
DisbursingCreditCrédito en desembolso
DelinquentCreditCrédito moroso
PaidCreditCrédito pagado
DesistedCreditCrédito desistido
UndeliveredCreditCrédito no entregado
ColateralGarantía
FormalizedFormalizado

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 campo

Funciones 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 enlaces

Funciones 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:

  1. Servicio de Webhooks: Completamente implementado y documentado. El código en domain/webhook.go muestra que se incorpora sprigFunctions := sprig.FuncMap() directamente en el procesamiento de plantillas.

  2. Servicio de Documentos: Implementado completamente en document_service.go. El método Parse() utiliza explícitamente sprigFunctions := sprig.FuncMap() y lo integra en las plantillas junto con las funciones estándar:

    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)

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.

ServicioAcceso a SprigImplementación
Documentos✅ Completosprig.FuncMap() integrado directamente
Webhooks✅ Completosprig.FuncMap() integrado directamente
Email❌ ParcialSolo funciones de domain.Funcs()
Voz❌ NoSolo funciones básicas de Go Templates
Firma❌ ParcialSolo funciones de domain.Funcs()
Sobres❌ ParcialSolo 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 v4

Acceso 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

CampoDescripciónEjemplo de uso
NameNombrecommonData .Profile "AddressCity"
EmailCorreo electrónicocommonData .Profile "Email"
AddressDireccióncommonData .Profile "Address"
AddressCityCiudadcommonData .Profile "AddressCity"
IDNumberNúmero de identificacióncommonData .Profile "IDNumber"
InitialsInicialescommonData .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 completo

Variables disponibles para SMS

txt
.URL     - La URL del dominio configurado
.Credit  - El objeto de crédito

Funciones 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ón

Servicio 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 firma

Variables 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 HTML

Variables disponibles para SMS

txt
.Organization - Datos básicos de la organización
.URL          - Enlace al sobre
.Title        - Título del sobre

Servicio 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 seguro

Servicio 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 documento

Funciones 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 diccionario

Ademá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ón

Servicio 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 usuario

Servicio 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 documento

Servicio 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 documento

Servicio 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 respuestas

Consideraciones especiales para plantillas de voz

  1. Brevedad: Las frases deben ser cortas y concisas
  2. Claridad: Evite lenguaje complejo o técnico
  3. Pausas: Use comas y puntos para controlar el ritmo
  4. 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 completo

Funciones 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 entero

Servicio 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 adjuntos

Variables 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ón

Ejemplos 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

  1. Usar commonData para campos comunes de perfil:

    txt
    {{ commonData .Profile "Name" }}

    en lugar de intentar determinar el tipo manualmente.

  2. 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 }}
  3. 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 }}
  4. 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
  5. 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
  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
  7. 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.go con la incorporación directa de sprigFunctions := sprig.FuncMap()
    • Las plantillas de documentos también tienen acceso completo a Sprig, como se verifica en document_service.go con la misma incorporación directa
    • Otros servicios (Email, Signature, Envelope, etc.) no importan directamente Sprig, sino que utilizan funciones personalizadas definidas en domain.Funcs() en tag.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
  8. 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
    • 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)
    • Para el servicio de Voz: Use solo las funciones básicas de Go Templates:
      • Condicionales: if, else, end
      • Iteraciones: range
      • Acceso a campos: .Field

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 6

Correos No Entregados

Si los correos no se entregan, compruebe:

  1. La configuración del servidor SMTP
  2. Las credenciales de autenticación
  3. Si hay filtros de spam afectando la entrega

Problemas con Tamaño de Correos

Si los correos son muy grandes (especialmente con adjuntos), considere:

  1. Comprimir archivos grandes
  2. Usar enlaces en lugar de adjuntos
  3. Simplificar el HTML y reducir imágenes