Autenticacion con KYC

Esta explica cómo el usuario puede conectar el resultado de un flujo de KYC (Conozca a su Cliente) con su base de datos. Al establecer esta conexión, la plataforma podrá verificar de forma automática si una persona ya ha completado con éxito un flujo KYC cada vez que inicie sesión. Esto simplifica la gestión de identidades y mejora tanto la eficiencia como la seguridad en el proceso de verificación.


Empezando


Para integrar un flujo de KYC en tu plataforma utilizando JAAK, sigue los pasos a continuación para obtener una implementación clara y adecuada de los servicios. Estos pasos están diseñados para guiarte en la vinculación de los resultados del flujo de KYC a tu base de datos, permitiendo verificar automáticamente si un usuario ha completado el proceso.

  1. Termina un flujo de KYC
  2. Obten la informacion de resumen mediante tu WebHook
  3. Guarda el Id del Evento
  4. Obten los detalles de una sesion
  5. Realiza tu proceso de Liveness
  6. Compara el contenido de una Sesion KYC con el resultado de Liveness

Guia


1. Termina tu flujo de KYC

Para poder comenzar el proceso de autenticacion de flujo te recomendamos que utilices la informacion de un flujo que ya ha finalizado, con la razon de obtener toda la informacion necesaria para poder realizar esta autenticacion.

Asegúrate de que el flujo de KYC esté completamente finalizado y aprobado. El administrador puede verificar el estado del flujo en el dashboard, donde se muestran los flujos en proceso, su estado y un código (shortkey). Para más información, consulta la sección Visualización de Flujos en el Dashboard o Consulta de Flujos vía API .

2. Obten la informacion de resumen mediante tu WebHook

Configura un WebHook para recibir notificaciones en tiempo real cuando un flujo de KYC se complete. Consulta la sección Configuración de WebHooks para más detalles .

Ejemplo del payload recibido:

{
  "detailsURL": "https://sandbox.jaak.ai/api/v1/kyc/session/<flow_id>",
  "duration": "1m",
  "endedAt": "2024-05-28T21:56:43.154761086Z",
  "id": "soy_un_id",
  "startedAt": "2024-05-28T21:55:27.884Z",
  "scores": {
    "document": 100,
    "liveness": 99.86986517906189,
    "oneToOne": 94.51668167114258,
    "total": 98.12884895006816
  },
  "shortKey": "fwgObf9",
  "validation": "AUTOMATIC"
}

3. Guarda el Id del Evento

Una vez recibido el resumen del flujo de KYC, guarda el event_id en tu base de datos asociándolo con el usuario correspondiente. Esto permitirá que la plataforma verifique automáticamente si un usuario ya ha completado un flujo de KYC en el futuro. Puedes guardar esta información en una estructura JSON como la siguiente:

{
    "user_id": "12345",
    "event_id": "abcde-12345-fghij-67890",
    "kyc_status": "completed",
    "last_updated": "2024-10-23T10:00:00Z"
}

Este enfoque te facilita la gestión de usuarios, permitiéndote identificar rápidamente si un flujo KYC ha sido finalizado exitosamente para un usuario específico.

4. Obtén los detalles de una sesión

Para verificar los detalles de un flujo de KYC específico, utiliza el event_id para hacer una solicitud a la API. Consulta la sección Detalles de Sesión en la API en la documentación para aprender cómo realizar esta solicitud. Si el flujo no existe o el event_id proporcionado no es válido, la API te devolverá una respuesta indicando que no se encontraron resultados, lo que significa que el flujo no existe o no se ha completado.

Al hacer la consulta, recibirás un objeto que contiene información detallada sobre los flujos asociados al event_id. En particular, debes buscar una acción específica, como "action": "omplet-extract-document" dentro de alguno de los posibles objetos en flow, esto te permitira obtener la imagen del documento enviado (linea 54) asi como la imagen del rostro dentro del documento (linea 83).

{
    "session": {
        "sessionID": "<string>",
        "contactName": "<string>",
        "verificationType": "<string>",
        "verification": {...},
        "flowName": "<string>",
        "startDate": "<datetime>",
        "updateDate": "<datetime>",
        "endDate": "<datetime>",
        "origin": "<string>",
        "score": "<float>",
        "status": "<string>",
        "shortKey": "<string>",
        "validation": "<string>",
        "flowType": "<string>",
        "rigelUrl": "<string>",
        "location": {
            "city": "<string>",
            "state": "<string>",
            "country": "<string>",
            "latitude": "<float>",
            "longitude": "<float>"
        }
    },
    "summary": {
        "photo": "<string>",
        "totalTime": "<float>",
        "name": "<string>",
        "lastName": "<string>",
        "curp": "<string>",
        "scores": {
            "liveness": "<float>",
            "document": "<float>",
            "oneToOne": "<float>",
            "total": "<float>"
        },
        "rigelFullVideo": "<string>"
    },
    "flow": [
      {
            "id": "671a729b5fa3be70e42df23d",
            "createdAt": "2024-10-24T16:15:23.27Z",
            "updatedAt": "2024-10-24T16:15:27.719Z",
            "eventId": "8154e22c-9311-4476-8208-a6532004cb3f",
            "request": {
                "id": "671a60de9ec27b40e7024cab",
                "ip": "169.254.169.126",
                "method": "post",
                "statusCode": 200,
                "path": "/api/v3/document/extract",
                "meta": {
                    "request": {
                        "document": "https://storage.googleapis.com/...", # Imagen a tomar para paso siguiente
                        "documentBack": "https://storage.googleapis.com/..."
                    },
                    "response": null
                }
            },
            "action": "complet-extract-document",
            "status": "success",
            "message": "",
            "processTime": 1620,
            "flow": [
                {
                    "resource": "ocr-document",
                    "status": "success",
                    "message": "",
                    "meta": {
                        "time": "2024-10-24T16:15:23.258Z",
                        "processTime": 1608,
                        "extra": {
                            "evaluation": {
                                "documentData": {
                                    "generalData": {
                                        "address": {
                                            "city": "NEZAHUALCOYOTL",
                                            "council": "",
                                            "neighborhood": "COL PORVENIR",
                                            "state": "MEX",
                                            "street": "C 14 58",
                                            "zipCode": "57430"
                                        },
                                        "birthDate": "14/07/1995",
                                        "documentImage": {
                                            "photo": "imageOfPersonInTheDocument", # Imagen a tomar para paso siguiente
                                            "position": {
                                                "bottom": 0,
                                                "left": 0,
                                                "right": 0,
                                                "top": 0
                                            }
                                        },
                                        "expiryPermanent": false,
                                        "gender": "H",
                                        "motherSurname": "CANSECO",
                                        "name": "ALEJANDRO",
                                        "nationality": "MEXICAN",
                                        "surname": "SANTAMARIA",
                                        "type": "ID",
                                        "validUntil": ""
                                    },
                                    "mechanicalReadingZone": "IDMEX1187253146\u003c\u003c3394137824855\n9507144H2412311MEX\u003c00\u003c\u003c11644\u003c0\nSANTAMARIA\u003cCANSECO\u003c\u003cALEJANDRO\u003c\n",
                                    "specificData": [
                                        {
                                            "label": "rfc",
                                            "value": "SACA950714GQ8"
                                        },
                                        {
                                            "label": "curp",
                                            "value": "SACA950714HDFNNL05"
                                        },
                                        {
                                            "label": "electorKey",
                                            "value": "SNCNAL95071409H600"
                                        },
                                        {
                                            "label": "registerYear",
                                            "value": "2014"
                                        },
                                        {
                                            "label": "registerMonth",
                                            "value": "00"
                                        },
                                        {
                                            "label": "emissionYear",
                                            "value": "2014"
                                        },
                                        {
                                            "label": "identificationOCR",
                                            "value": "3394137824855"
                                        },
                                        {
                                            "label": "numIdentificationCredential",
                                            "value": "118725314"
                                        }
                                    ]
                                },
                                "documentMetadata": "IDMEX1187253146\u003c\u003c3394137824855\n9507144H2412311MEX\u003c00\u003c\u003c11644\u003c0\nSANTAMARIA\u003cCANSECO\u003c\u003cALEJANDRO\u003c\n",
                                "documentType": {
                                    "country": "MEX",
                                    "icaoCode": "ID",
                                    "side": "BOTH",
                                    "type": "ine-ife"
                                },
                                "eventId": "8154e22c-9311-4476-8208-a6532004cb3f",
                                "message": "",
                                "processingTime": "1607",
                                "requestId": "671a60de9ec27b40e7024cab",
                                "state": {
                                    "isExpired": false,
                                    "isUnderAge": false,
                                    "message": "",
                                    "supportedDocument": false
                                },
                                "status": true
                            }
                        }
                    }
                },
            ],
            "meta": {
                "extra": {
                    "api_key_id": "671a723c5fa3be70e42df237",
                    "company_id": "65b04320d7f4fa9e6cdbf909",
                    "product": "document"
                }
            }
        },
		]
}

5. Realiza tu proceso de Liveness

Debes integrar en tu sistema el proceso de Liveness mediante la API de JAAK. Consulta la sección Liveness en la API para obtener información sobre cómo implementarlo. La respuesta incluye un campo llamado bestframe, que proporciona el mejor frame del video, permitiéndote realizar la comparación en el siguiente paso. Ejemplo de respuesta:

{
    "eventId": "8707c205-1ea3-4481-b888-c472582b3e33",
    "requestId": "8707c205-1ea3-4481-b888-c472582b3e33",
    "processTime": 1717,
    "score": 0.9520403,
    "bestFrame": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgI="
}

6. Compara el contenido de una Sesion KYC con el resultado de Liveness

Utiliza alguna de las imagenes mencionadas en el paso 4 para compararlo contra el resultado del campo bestframe través del sistema OTO.

Consulta la sección Comparación Biométrica con OTO en la documentación para obtener detalles sobre cómo realizar la comparación. Al realizar la comparación, si el bestframe coincide de manera precisa con los datos biométricos registrados durante el flujo de KYC, entonces puedes inferir que el usuario en el flujo es efectivamente la persona real que está realizando la verificación. Una comparación exitosa garantiza la autenticidad del usuario y completa el proceso de validación.