Inconveniente con integracion entre Guarani y Kolla

Buenas. Tenemos Guarani en la version 3.22.0 y revisando la correspondencia entre versiones con Kolla, actualizamos Kolla a la 4.9.0.

Quedo andando el kolla pero a la hora de vincular encuestas desde kolla hacia guarani, se indica un mensaje “Debe configurar el acceso al servicio web de SIU-Kolla para obtener los formularios disponibles.”

Cuando teniamos Guarani en la 3.20.2 lo teniamos integrado al Kolla (una version anterior de kolla) y funcionaba todo correctamente.

Ya hemos seguido los pasos en estos dos links:
https://documentacion.siu.edu.ar/wiki/SIU-Guarani/version3.22.0/interfaces/kolla
https://documentacion.siu.edu.ar/wiki/SIU-Kolla/Version_4.9.0/interfaces

Sumado a que gran parte de la integracion ya estaba correctamente configurada desde la version anterior de por si.

Estuvimos probando cosas en general desde lo que encontramos en el foro pero no anduvo aun.

Hola Erwin!

Por el error que comentan hay algo en la vinculación que no se realizó correctamente ya que evidentemente los módulos no se están comunicando entre sí.

Como bien decís, los pasos son los que se indican en la documentación que señalás. Adicionalmente verifiquen haber realizado los siguientes pasos:

En Kolla: Crear un sistema externo en el backend de SIU-Kolla. Crear un usuario de REST con el nombre ue_guarani.

En Guaraní Gestión: Crear y configurar el archivo <path proyecto Gestión>/instalacion/i__/p__guarani/rest/kolla/cliente.ini Configurar la API REST

En Guaraní Autogestión: Configurar la URL de SIU-Kolla en el archivo <path proyecto 3w>/instalacion/config.php También configurar el archivo <path proyecto 3w>/instalacion/servicios_web_config.php

Vuelvan a revisar por las dudas haber realizado correctamente los pasos detallados en la documentación y que no haya aparecido algún alerta o mensaje de error en alguno de los pasos.

Configuraron también los parámetros enc_utiliza_ug_kolla y enc_kolla_unidad_gestion ?

En caso de persistir el inconveniente por favor envíennos los logs que se generan al momento del error para ver si podemos obtener mayor información de allí.

Archivo <path proyecto Gestión>/instalacion/i__desarrollo/p__guarani/rest/kolla/cliente.ini

;cliente.ini
[conexion]
to = "https://kolla.unvime.edu.ar/kolla/rest/"
auth_tipo = basic
auth_usuario = ue_guarani
auth_password = ******
  • auth_password fue ocultado para publicarlo aqui en el foro.

Archivo /instalacion/i__produccion/p__kolla/rest/servidor.ini

;servidor.ini
autenticacion = basic

; Configuración de paths para las versiones de la api
[v1]
path_api=/var/vhosts/kolla_4.9.0/php/rest/v1

[settings]
formato_respuesta = "json"
url_protegida = "/.*/"
encoding = "utf-8"

Archivo en kolla - servidor_usuarios.ini

;servidor_usuarios.ini
[ue_guarani]
password = "******"
  • password fue ocultado para publicarlo aqui en el foro.

Este es el log al ingresar a la operación mencionada anteriormente:

-o-o-o-o-o-
Fecha: 24-07-2025 12:02:04
Operacion: Vincular Formulario SIU-Kolla
Usuario: toba
Version-PHP: 7.4.27
Servidor: sistemas.unvime.edu.ar
URI: /gestion/aplicacion.php?tm=1&tcm=central&ai=guarani||32000035
Referrer: https://sistemas.unvime.edu.ar/gestion/
Host: 170.210.69.25
==========
[INFO][toba] Se detecto acceso desde el menu. Se limpia la memoria de la operacion
[DEBUG][guarani] PUNTO DE MONTAJE: se carg� exitosamente el autoload del punto de montaje proyecto
[DEBUG][guarani] PUNTO DE MONTAJE: se carg� exitosamente el autoload del punto de montaje personalizacion
[INFO][guarani] PUNTO MONTAJE: se carg� la clase extension_toba/guarani_sesion.php del punto de montaje proyecto. El path del mismo es /var/vhosts/guarani/3.8.0/php
[INFO][guarani] PUNTO MONTAJE: se carg� la clase extension_toba/autentificacion/guarani_pers_usuario.php del punto de montaje personalizacion. El path del mismo es /var/vhosts/guarani/3.8.0/personalizacion/php
[INFO][guarani] PUNTO MONTAJE: se carg� la clase extension_toba/guarani_fuente_datos.php del punto de montaje proyecto. El path del mismo es /var/vhosts/guarani/3.8.0/php
[DEBUG][guarani] SQL sin perfil de datos: SELECT                trim(version_app) as version_actual 
                                FROM            app_versiones_base
                                ORDER BY        id_conversion DESC
                                LIMIT           1

[DEBUG][guarani] (
                                SELECT  amo.padre,
                                                        amo.carpeta,
                                                        amo.proyecto,
                                                        amo.item,
                                                        amo.descripcion as nombre,
                                                        ai.orden as             orden,
                                                        ai.imagen,
                                                        ai.imagen_recurso_origen,
                                                        amo.padre = '1' as es_primer_nivel
                                   FROM 
                                                        apex_usuario_grupo_acc auga
                                                JOIN apex_menu_operaciones amo ON (auga.menu_usuario = amo.menu_id AND auga.proyecto = amo.proyecto)
                                                JOIN apex_usuario_grupo_acc_item augai ON (auga.proyecto = augai.proyecto AND auga.usuario_grupo_acc = augai.usuario_grupo_acc AND augai.item = amo.item)
                                                JOIN apex_item ai ON (augai.item = ai.item AND augai.proyecto = ai.proyecto)
                                  WHERE (ai.menu = 1)
                                        AND ai.item != ai.padre
                                        AND     (auga.usuario_grupo_acc IN ('admin') OR ai.publico = 1)
                                        AND     (amo.proyecto = 'guarani')
                                        AND auga.menu_usuario IS NOT NULL
                        UNION
                                SELECT  ai.padre,
                                                ai.carpeta,
                                                ai.proyecto,
                                                ai.item,
                                                ai.nombre as nombre,
                                                ai.orden as             orden,
                                                ai.imagen,
                                                ai.imagen_recurso_origen,
                                                ai.padre = '1' as es_primer_nivel
                                FROM 
                                                apex_usuario_grupo_acc auga
                                        JOIN apex_usuario_grupo_acc_item augai ON (auga.proyecto = augai.proyecto AND auga.usuario_grupo_acc = augai.usuario_grupo_acc)
                                        JOIN apex_item ai ON (augai.item = ai.item AND augai.proyecto = ai.proyecto)
                                WHERE auga.menu_usuario is null
                                        AND (ai.menu = 1)
                                        AND ai.item != ai.padre
                                        AND     (auga.usuario_grupo_acc IN ('admin') OR ai.publico = 1)
                                        AND     (ai.proyecto = 'guarani')
                        ) ORDER BY 1, 6
[DEBUG][guarani] SQL sin perfil de datos: SELECT        mdp_personas_perfil_datos.usuario_perfil_datos
                                FROM    mdp_personas,
                                                mdp_personas_perfil_datos
                                WHERE   mdp_personas.persona = mdp_personas_perfil_datos.persona AND
                                                mdp_personas.usuario = 'toba' AND
                                                mdp_personas_perfil_datos.usuario_grupo_acc = 'admin'

[DEBUG][guarani] Inicializando perfil de datos para el proyecto guarani
[DEBUG][guarani] SQL con perfil de datos:       SELECT  par_configuraciones.nombre,
                                                        par_configuraciones.tipo_de_dato,
                                                        par_configuraciones.valor,
                                                        par_configuraciones.descripcion
                                        FROM    par_configuraciones
                                                         WHERE  upper(par_configuraciones.nombre) = 'INSTITUCION_INSTALACION' 
                                        ORDER BY par_configuraciones.nombre
                                ;
[DEBUG][guarani] SQL sin perfil de datos: SELECT        mdp_personas_perfil_datos.usuario_perfil_datos
                                FROM    mdp_personas,
                                                mdp_personas_perfil_datos
                                WHERE   mdp_personas.persona = mdp_personas_perfil_datos.persona AND
                                                mdp_personas.usuario = 'toba' AND
                                                mdp_personas_perfil_datos.usuario_grupo_acc = 'admin'

[DEBUG][guarani] SQL con perfil de datos: SELECT        sga_instituciones.institucion,
                                                sga_instituciones.nombre,
                                                sga_instituciones.nombre as entidad_descripcion,
                                                sga_instituciones.nombre_abreviado,
                                                sga_instituciones.tipo_institucion,
                                                sga_instituciones_tipos.nombre as tipo_institucion_nombre,
                                                sga_instituciones.localidad,
                                                mug_localidades.nombre as localidad_nombre,
                                                CASE
                                                        WHEN mug_provincias.pais = 54 THEN mug_localidades.nombre
                                                        ELSE mug_localidades.nombre || ' (' || mug_paises.nombre || ')'
                                                END as localidad_descripcion,
                                                sga_instituciones.calle,
                                                sga_instituciones.numero,
                                                sga_instituciones.codigo_postal,
                                                sga_instituciones.telefono,
                                                sga_instituciones.fax,
                                                sga_instituciones.email,
                                                sga_instituciones.entidad
                                FROM    sga_instituciones
                                JOIN    sga_instituciones_tipos ON sga_instituciones_tipos.tipo_institucion = sga_instituciones.tipo_institucion
                                JOIN    mug_localidades ON mug_localidades.localidad = sga_instituciones.localidad
                                JOIN    mug_dptos_partidos ON mug_dptos_partidos.dpto_partido = mug_localidades.dpto_partido
                                JOIN    mug_provincias ON mug_provincias.provincia = mug_dptos_partidos.provincia
                                JOIN    mug_paises ON mug_paises.pais = mug_provincias.pais 
                                 WHERE  sga_instituciones.institucion = '1'
                                ORDER BY sga_instituciones.nombre  
                                ;
[DEBUG][guarani] SQL con perfil de datos: SELECT        mdp_personas.persona,
                                                COALESCE (mdp_personas.apellido_elegido, mdp_personas.apellido) AS apellido,
                                                COALESCE (mdp_personas.nombres_elegido, mdp_personas.nombres) AS nombres,
                                                mdp_personas.arai_identificador_sso,
                                                mdp_personas.arai_uuid
                                FROM    mdp_personas
                                WHERE   mdp_personas.usuario = 'toba'

[DEBUG][guarani] SQL con perfil de datos: SELECT 
                                        mdp_personas_foto.foto_persona,
                                        mdp_personas_foto.persona,
                                        mdp_personas_foto.imagen,
                                        mdp_personas_foto.fecha,
                                        mdp_personas_foto.nombre_imagen
                                FROM 
                                        mdp_personas_foto
                                WHERE
                                        mdp_personas_foto.persona = '1'

[DEBUG][guarani] SQL sin perfil de datos: SELECT                mdp_personas_grupo_acc.usuario_grupo_acc as     grupo_acceso,
                                                        mdp_personas_grupo_acc.tipo_usuario
                                FROM            mdp_personas_grupo_acc,
                                                        mdp_personas
                                WHERE           mdp_personas_grupo_acc.persona = mdp_personas.persona AND
                                                        mdp_personas.usuario = 'toba' AND
                                                        mdp_personas_grupo_acc.usuario_grupo_acc <> 'docente'
                                                         AND mdp_personas_grupo_acc.tipo_usuario = 'Gestion' 
                                ORDER BY        mdp_personas_grupo_acc.grupo_acceso_default DESC,
                                                        mdp_personas_grupo_acc.usuario_grupo_acc ASC

[DEBUG][toba] [SECCION] Iniciando componentes...
[INFO][guarani] PUNTO MONTAJE: se carg� la clase nucleo/encuestas/vincular_encuestas/cn_man_vincular_encuestas.php del punto de montaje proyecto. El path del mismo es /var/vhosts/guarani/3.8.0/php
[INFO][guarani] PUNTO MONTAJE: se carg� la clase nucleo/encuestas/vincular_encuestas/cn_ent_encuesta.php del punto de montaje proyecto. El path del mismo es /var/vhosts/guarani/3.8.0/php
[INFO][guarani] PUNTO MONTAJE: se carg� la clase extension_toba/componentes/guarani_pers_datos_tabla.php del punto de montaje personalizacion. El path del mismo es /var/vhosts/guarani/3.8.0/personalizacion/php
[INFO][guarani] El manejador de entidades: Inicializacion. Entidades cargadas: [0]
[INFO][guarani] PUNTO MONTAJE: se carg� la clase /operaciones/encuestas/vincular_encuestas/ci_nav_vincular_encuestas.php del punto de montaje proyecto. El path del mismo es /var/vhosts/guarani/3.8.0/php
[DEBUG][toba] componente(46000028): [callback][ ini__operacion ]
[DEBUG][guarani] INSTALACION "/var/vhosts/guarani/3.8.0/instalacion"
[DEBUG][guarani] Parametros instancia desarrollo: array (
  'base' => 'toba_2_4',
  'proyectos' => 'toba_editor, toba_referencia, toba_usuarios, guarani',
  'tipo' => 'normal',
  'toba_editor' => 
  array (
    'path' => '/var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/proyectos/toba_editor',
    'url' => '/toba_editor/2.4',
  ),
  'toba_referencia' => 
  array (
    'path' => '/var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/proyectos/toba_referencia',
    'url' => '/toba_referencia/2.4',
  ),
  'toba_usuarios' => 
  array (
    'path' => '/var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/proyectos/toba_usuarios',
    'url' => '/toba_usuarios/2.4',
  ),
  'guarani' => 
  array (
    'path' => '/var/vhosts/guarani/3.8.0',
    'url' => '/gestion',
    'url_pers' => '/guarani_pers/3.8',
    'usar_perfiles_propios' => '1',
    'metadatos_compilados' => '0',
  ),
)
[DEBUG][guarani] INSTANCIA "desarrollo"
[DEBUG][guarani] Conectando a base 'toba_2_4'
[DEBUG][guarani] PROYECTO "guarani"
[DEBUG][guarani] Invocando servicio kolla. Opciones:<br>array (
  'to' => 'https://kolla.unvime.edu.ar/kolla/rest/',
  'auth_tipo' => 'basic',
  'auth_usuario' => 'ue_guarani',
  'auth_password' => '******',
)
[ERROR][guarani] cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
[ERROR][toba] guarani_error: Debe configurar el acceso al servicio web de SIU-Kolla para obtener los formularios disponibles. 
[TRAZA]

        fabrica_guarani::error 
Archivo: /var/vhosts/guarani/3.8.0/php/nucleo/_lib/fabrica_guarani.php, lInea 82 

        guarani_nucleo::error 
Archivo: /var/vhosts/guarani/3.8.0/php/operaciones/encuestas/vincular_encuestas/ci_nav_vincular_encuestas.php, lInea 14 

        ci_nav_vincular_encuestas->ini__operacion 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php, lInea 90 

        toba_ci->inicializar 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php, lInea 133 

        toba_solicitud_web->procesar_eventos 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php, lInea 55 

        toba_solicitud_web->procesar 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/toba_nucleo.php, lInea 96 

        toba_nucleo->acceso_web 
Archivo: /var/vhosts/guarani/3.8.0/www/aplicacion.php, lInea 33 



[DEBUG][toba] Mensaje a usuario: Debe configurar el acceso al servicio web de SIU-Kolla para obtener los formularios disponibles.
  • auth_password fue ocultado para publicarlo aqui en el foro.

Los parametros los tenemos asi en guarani gestion:

  • enc_utiliza_ug_kolla: No se utilizan las unidades de Gestion de Guarani para la vinculacion con Kolla. La vinculacion de encuestas con Kolla es unica para toda la institucion.
  • enc_kolla_unidad_gestion: Toda la institucion.

Guarani no tiene el sertificado https valido si se accede directamente, pero se accede habitualmente desde un proxy que si tiene https valido y desde alli lo usan todos. El error aparece accediendo de ambas maneras.
Kolla se accede directamente sin proxy, y tiene el certificado https valido.

Para dejar mas claro lo del proxy en guarani es asi:

- https://sistemas.unvime.edu.ar/gestion -> esto es ingresar por proxy
- http://guarani.unvime.edu.ar/gestion -> esto es ingresar directo

Gracias Erwin!

Vamos a analizar esta información junto a los técnicos.

Por lo que se ve en los logs el error parecería venir por el tema de los certificados, por más que accedan desde el proxy pareciera no estar tomándolo como válido.

Mientras tanto les dejamos para que vean este hilo de foro donde se aborda este problema de los certificados, se brindan distintos hilos donde se trató el tema y se indica sino cómo hacer la configuración para que no haga esta validación.

Saludos!

Gracias por la sugerencia. Hemos hecho los cambios que se mencionan en ese otro post del foro y el problema persiste. El log es el siguiente con esos cambios aplicados:

[ERROR][guarani] Server error: `GET https://kolla.unvime.edu.ar/kolla/rest/unidad-gestion` resulted in a `500 Internal Server Error` response:
{
    "error": 500,
    "mensaje": "500 Internal Server Error",
    "descripcion": "Error Interno en el servidor: No se  (truncated...)

[ERROR][toba] guarani_error: Debe configurar el acceso al servicio web de SIU-Kolla para obtener los formularios disponibles. 
[TRAZA]

        fabrica_guarani::error 
Archivo: /var/vhosts/guarani/3.8.0/php/nucleo/_lib/fabrica_guarani.php, lInea 82 

        guarani_nucleo::error 
Archivo: /var/vhosts/guarani/3.8.0/php/operaciones/encuestas/vincular_encuestas/ci_nav_vincular_encuestas.php, lInea 14 

        ci_nav_vincular_encuestas->ini__operacion 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php, lInea 90 

        toba_ci->inicializar 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php, lInea 133 

        toba_solicitud_web->procesar_eventos 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php, lInea 55 

        toba_solicitud_web->procesar 
Archivo: /var/vhosts/guarani/3.8.0/vendor/siu-toba/framework/php/nucleo/toba_nucleo.php, lInea 96 

        toba_nucleo->acceso_web 
Archivo: /var/vhosts/guarani/3.8.0/www/aplicacion.php, lInea 33 



[DEBUG][toba] Mensaje a usuario: Debe configurar el acceso al servicio web de SIU-Kolla para obtener los formularios disponibles.

Hola Erwin!

Mientras esperamos el análisis de los técnicos les sugiero probar lo siguiente:

Agregar el “/v1” dentro del archvo cliente.ini en la parte del to.

Prueben por favor si con eso se soluciona.
También deberían configurarlo así en el servicios_web_config.php de 3W, pero esto ya es para su vinculación desde Autogestión.

Saludos!

Cuáles fueron los cambios realizados en concreto?

Con los cambios realizados me refiero a los recomendados en este hilo en donde se desactivan ciertas verificaciones en las peticiones hacia kolla: Conexion API REST con Kolla - nº 10 por lleonardis

Probamos poniendole v1 como recomiendan y funcionó.

https://kolla.unvime.edu.ar/kolla/rest/v1/

Ahora vamos a ver de agregar certificados ssl directamente en el sistema ademas de los que hay en el proxy. Creo que deberia quedar andando luego de eso, con las verificaciones activadas.

Hola Erwin!

Buenísimo que haya funcionado con esa corrección!!

Ahora vamos a ver de agregar certificados ssl directamente en el sistema ademas de los que hay en el proxy. Creo que deberia quedar andando luego de eso, con las verificaciones activadas.

Excelente!! Es el mejor camino! Vayan avisándonos qué tal les funciona y si les surge algún inconveniente.

Saludos!