Skip to content

Guía para Desarrolladores ​

Integración mediante iframes ​

Digitai permite la integración directa con sus aplicaciones mediante la visualización de documentos en iframes. Esta funcionalidad le permite mostrar documentos para revisión sin necesidad de redirigir a los usuarios fuera de su aplicación.

Cómo funciona ​

La integración mediante iframes utiliza un enlace secreto compuesto por un ID de documento y una clave secreta. Este enlace permite acceder directamente a la página de revisión del documento.

Diagrama de integración de iframes

Implementación paso a paso ​

1. Obtener el ID y clave secreta del documento ​

Para cada documento que desea mostrar, necesitará:

  • El ID del documento
  • La clave secreta asociada

Estos valores se pueden obtener a través de:

  • La respuesta de la API al subir un documento
  • Los callbacks recibidos cuando un documento es procesado

2. Construir la URL del documento ​

La URL para acceder al documento tiene la siguiente estructura:

https://[dominio]/document/[document_id]/secret/[secret_key]/review

Por ejemplo:

https://digitai.theeye.io/document/67fdbec6f062ccb06fa8aae6/secret/350e7b349585920ad37323c4d6f9a4dd/review

3. Implementar el iframe en su aplicación ​

Añada un iframe a su aplicación y establezca la URL como el atributo src:

html
<iframe 
  id="documentFrame" 
  src="https://digitai.theeye.io/document/[document_id]/secret/[secret_key]/review"
  width="100%" 
  height="700px" 
  allowfullscreen
></iframe>

4. Manejar eventos de cierre ​

Cuando el usuario hace clic en "Cerrar" dentro del visor de documentos, el iframe enviará un mensaje que su aplicación puede capturar:

javascript
window.addEventListener('message', function(event) {
    // Verificar origen del mensaje (opcional pero recomendado)
    // if (event.origin !== 'https://digitai.theeye.io') return;
    
    if (event.data && event.data.action === 'close') {
        console.log('Documento cerrado:', event.data);
        
        // Realizar acciones adicionales, como:
        // - Ocultar el iframe
        // - Mostrar otra vista
        // - Actualizar datos
    }
});

El mensaje recibido contiene información del documento y puede incluir datos adicionales según la configuración.

Ejemplo completo de implementación ​

A continuación se muestra un ejemplo completo de una página HTML que implementa la visualización de un documento en un iframe:

html
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Visualizador de Documentos</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
            background-color: #f5f5f5;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
        }
        .header {
            background-color: #3f51b5;
            color: white;
            padding: 15px;
            border-radius: 5px 5px 0 0;
        }
        .content {
            background-color: white;
            padding: 20px;
            border-radius: 0 0 5px 5px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }
        .iframe-container {
            width: 100%;
            height: 700px;
            margin: 20px 0;
            border: 1px solid #ddd;
        }
        iframe {
            width: 100%;
            height: 100%;
            border: none;
        }
        .status {
            padding: 10px;
            margin-top: 20px;
            background-color: #e8f5e9;
            border-left: 4px solid #4caf50;
            display: none;
        }
        button {
            background-color: #3f51b5;
            color: white;
            border: none;
            padding: 10px 15px;
            border-radius: 4px;
            cursor: pointer;
            margin-top: 10px;
        }
        button:hover {
            background-color: #303f9f;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>Visualizador de Documentos</h1>
        </div>
        <div class="content">
            <h2>Documento</h2>
            <p>Utilice los botones para cargar o recargar el documento.</p>
            
            <button id="loadButton">Cargar Documento</button>
            <button id="reloadButton" style="display: none;">Recargar Documento</button>
            
            <div id="iframeContainer" class="iframe-container" style="display: none;">
                <iframe id="documentFrame" src="about:blank" allowfullscreen></iframe>
            </div>
            
            <div id="status" class="status">
                <h3>Mensaje Recibido:</h3>
                <pre id="messageContent"></pre>
            </div>
        </div>
    </div>

    <script>
        // URL del documento a cargar (reemplace con sus valores)
        const documentId = '67fdbec6f062ccb06fa8aae6';
        const secretKey = '350e7b349585920ad37323c4d6f9a4dd';
        const documentUrl = `https://digitai.theeye.io/document/${documentId}/secret/${secretKey}/review`;
        
        // Obtener elementos del DOM
        const loadButton = document.getElementById('loadButton');
        const reloadButton = document.getElementById('reloadButton');
        const iframeContainer = document.getElementById('iframeContainer');
        const documentFrame = document.getElementById('documentFrame');
        const statusElement = document.getElementById('status');
        const messageContentElement = document.getElementById('messageContent');
        
        // Escuchar mensajes del iframe
        window.addEventListener('message', function(event) {
            // Verificar origen del mensaje (opcional pero recomendado en producción)
            // if (event.origin !== 'https://digitai.theeye.io') return;
            
            console.log('Mensaje recibido:', event.data);
            
            // Mostrar el mensaje recibido
            if (event.data && event.data.action === 'close') {
                statusElement.style.display = 'block';
                messageContentElement.textContent = JSON.stringify(event.data, null, 2);
                
                // Ocultar iframe y mostrar botón de recarga
                iframeContainer.style.display = 'none';
                loadButton.style.display = 'none';
                reloadButton.style.display = 'inline-block';
            }
        });
        
        // Evento de clic en botón de carga
        loadButton.addEventListener('click', function() {
            documentFrame.src = documentUrl;
            iframeContainer.style.display = 'block';
            loadButton.style.display = 'none';
            reloadButton.style.display = 'inline-block';
            statusElement.style.display = 'none';
        });
        
        // Evento de clic en botón de recarga
        reloadButton.addEventListener('click', function() {
            documentFrame.src = documentUrl;
            iframeContainer.style.display = 'block';
            statusElement.style.display = 'none';
        });
    </script>
</body>
</html>

Consideraciones de seguridad ​

Al implementar esta funcionalidad, tenga en cuenta lo siguiente:

  1. Validación de origen: En producción, siempre verifique el origen de los mensajes recibidos:

    javascript
    if (event.origin !== 'https://digitai.theeye.io') return;
  2. Protección de enlaces: Los enlaces secretos deben tratarse con la misma seguridad que las credenciales:

    • No los almacene en código fuente público
    • No los transmita a través de canales no seguros
    • Utilice HTTPS para todas las comunicaciones
  3. Temporalidad: Los enlaces tienen una validez temporal limitada. Si necesita acceso permanente, considere utilizar la API.

Demos y recursos adicionales ​

La demo de integración con iframes ahora permite:

  • Pasar parámetros por URL (?documentId=ID&secretKey=KEY&environmentUrl=URL)
  • Personalizar la URL base del entorno (por defecto: https://digitai-api.theeye.io)
  • Ingresar manualmente el ID y clave secreta
  • Ingresar directamente la URL completa del documento
  • Abrir documentos en una nueva pestaña como alternativa cuando el servidor no permite iframes

Publicado bajo Licencia ISC.