Skip to main content

Obtener predicciones con las solicitudes de REST

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Describir los requisitos para acceder al Servicio de predicción de Einstein desde un cliente de REST.
  • Crear una aplicación conectada para administrar la autenticación para sus solicitudes de la API de REST.
  • Usar su cliente de REST para interactuar con el Servicio de predicción de Einstein.

Introducción

Ahora que su modelo está implementado en Salesforce, puede usar el Servicio de predicción de Einstein para obtener predicciones con su cliente de REST favorito.

Antes de comenzar

La organización de Developer Edition habilitada con CRM Analytics a la que se registró en la unidad anterior otorga todo lo que necesita para realizar los pasos de esta unidad. 

Sin embargo, después de completar este módulo, los siguientes requisitos previos son necesarios para interactuar con el Servicio de predicción de Einstein con un cliente de REST.

  • Licencia de CRM Analytics Plus o de Einstein Predictions, ambas disponibles por un costo adicional.
  • Una cuenta de usuario con el permiso del sistema View Einstein Discovery Recommendations (Ver recomendaciones de Einstein Discovery).
  • Su cliente de REST favorito para enviar solicitudes y manejar resultados. En esta unidad, usamos instrucciones y capturas de pantalla de ejemplo para la aplicación Postman (versión de escritorio). No obstante, las tareas para interactuar con los recursos del Servicio de predicción de Einstein son similares en la mayoría de los clientes de REST, de modo que puede usar una herramienta diferente y seguir el procedimiento con pasos comparables. Para obtener la aplicación Postman de escritorio, vaya a www.postman.com y diríjase a la página de descarga de la aplicación Postman.
    Nota: Las instrucciones que se describen en esta unidad fueron probadas con la versión de escritorio de Postman. Para este módulo de Trailhead, no se aprobó el uso de Postman web, que requiere instrucciones de configuración especiales para Salesforce.
  • Acceda a una aplicación en Salesforce que autorice solicitudes de la API de REST desde su cliente de REST. Para crear una aplicación conectada en Salesforce, su cuenta de usuario debe tener el permiso Manage Connected App (Gestionar aplicaciones conectadas).

Nota: En su organización, su administrador de Salesforce puede crear una aplicación administrada.

Paso 1: Crear una aplicación conectada en Salesforce

Comience creando una aplicación conectada para que el cliente de REST pueda conectarse de forma segura a su Salesforce org. Para obtener más información, consulte el módulo de Trailhead Aspectos básicos de las aplicaciones conectadas.  

  1. Desde Setup (Configuración), en el cuadro de búsqueda rápida, ingrese apps (aplicaciones) y, luego, haga clic en App Manager (Gestor de aplicaciones).
    Cuadro de búsqueda rápida en Setup (Configuración) que muestra la cadena de búsqueda “apps” (aplicaciones) y App Manager (Gestor de aplicaciones)
  2. En Lightning Experience App Manager (Gestor de aplicaciones de Lightning Experience), haga clic en New Connected App (Nueva aplicación conectada). A continuación, en la página New Connected App (Nueva aplicación conectada), especifique la siguiente información básica.
    Pantalla Lightning Experience App Manager (Gestor de aplicaciones de Lightning Experience) que muestra la solicitud de la aplicación recién conectada para el nombre de aplicación, nombre de API y email de contacto

    Configuración

    Descripción

    Connected App Name (Nombre de aplicación conectada)

    Especifique un nombre que sea descriptivo y de fácil distinción.

    API Name (Nombre de la API)

    Use la estructura de Nombre de la API de Salesforce.

    Contact Email (Email de contacto)

    Especifique una dirección de email asociada a sus credenciales de usuario.

  3. A continuación, seleccione la casilla Enable OAuth Settings (Activar configuración de OAuth) y especifique la siguiente configuración.
    Pantalla Lightning Experience App Manager (Gestor de aplicaciones de Lightning Experience) que muestra la URL de devolución de llamadas y los ámbitos de OAuth seleccionados

Configuración

Descripción

Callback URL (URL de devolución de llamada)

En este ejemplo, se usa https://login.salesforce.com/services/oauth2/callback. Puede usar la URL asociada a su Salesforce org, (por ejemplo, https://test.salesforce.com/services/oauth2/callback).

Selected OAuthScopes (OAuthScopes seleccionados)

Agregue los siguientes ámbitos de Oauth:

    • Access Analytics REST API resources (wave_api) (Acceder a recursos de la API de REST de Analytics [wave_api])
    • Manage user data via APIs (api) (Gestionar datos de usuario a través de las API [api])


  1. Guarde la configuración, luego, haga clic en Continue (Continuar) para crear la aplicación conectada.
  2. Haga clic en Manage Consumer Details (Gestionar detalles de consumidor).
    Botón Manage Consumer Details (Gestionar detalles de consumidor)
  3. Si se le solicita, proporcione la verificación que se le envió por email, luego, haga clic en Verify (Verificar).
    Solicitud Verify Your Identity (Verificar su identidad)

Al crear la aplicación conectada, Salesforce genera dos credenciales: una Consumer Key (Clave de consumidor) y una Consumer Secret (Pregunta secreta de consumidor).

Pantalla Lightning Experience App Manager (Gestor de aplicaciones de Lightning Experience) que muestra Consumer Key (Clave de consumidor) y Consumer Secret (Pregunta secreta de consumidor)

Estas son las credenciales que va a necesitar más adelante cuando conecte su cliente de REST a Salesforce a través de esta aplicación conectada.

  • La clave de consumidor funcionará como su Id. de cliente.
  • La pregunta secreta de consumidor funcionará como su pregunta secreta de cliente.

Mantenga abierta esta ventana para que pueda copiar la clave de consumidor y la pregunta secreta de consumidor más adelante en esta unidad.

Paso 2: Habilitar el flujo Nombre de usuario-Contraseña para Oauth 2.0

En este módulo, utilizará un flujo Nombre de usuario-Contraseña para la autenticación.

  1. Desde Setup (Configuración), en el cuadro de búsqueda rápida, ingrese oauth y, luego, haga clic en Oauth and Open ID Connect Settings (Configuración de Oauth e ID Connect abierto).
  2. Asegúrese de que la opción Allow Oauth Username-Password Flows (Permitir flujos de contraseña-nombre de usuario de OAuth) esté activada.

Paso 3: Configurar la autenticación en el cliente de REST

A continuación, configuremos la autenticación en su cliente de REST con las credenciales de la aplicación conectada que acaba de crear. La autenticación es obligatoria para acceder al Servicio de predicción de Einstein.

Nota: En las siguientes instrucciones se usa el cliente Postman (aplicación de escritorio) como ejemplo, pero puede usar cualquier cliente de la API de REST con funcionalidades similares.

En Postman, cree un nuevo espacio de trabajo, de ser necesario. Luego, cree una recopilación nueva (opcional, pero recomendada) con un nombre descriptivo. Una recopilación almacena todas las solicitudes del Servicio de predicción de Einstein en un solo lugar.

Pantalla de Postman Desktop: nueva recopilación con el nombre myEinsteinPredictionServiceRequests

  1. Seleccione la recopilación en la lista, haga clic en Add request (Agregar solicitud) y, luego, cámbiele el nombre a la solicitud Authenticate (Autenticar).
    Pantalla de Postman de escritorio: nueva solicitud con el nombre Authenticate (Autenticar)
  2. A continuación, configure los siguientes parámetros para la solicitud de autenticación.
    Pantalla de Postman de escritorio: configuración de solicitud de la opción Authenticate (Autenticar)

    Configuración

    Descripción

    Request Type (Tipo de solicitud)

    Cambie a POST (PUBLICAR)

    Request URL (URL de solicitud)

    Especifique https://login.salesforce.com/services/oauth2/token

  3. Haga clic en la ficha Body (Cuerpo), cambie Body Type (Tipo de cuerpo) a x-www-form-urlencoded, luego, agregue los siguientes valores y claves.
    Pantalla de Postman de escritorio: configuración de solicitud completada

    Clave

    Valor

    grant_type

    Especifique password (contraseña).

    client_id

    Copie y pegue la clave de consumidor de la aplicación conectada que creó anteriormente.

    client_secret

    Copie y pegue la pregunta secreta de consumidor de la aplicación conectada que creó anteriormente.

    username

    Especifique el nombre de usuario para la cuenta asociada a su organización de Trailhead de Developer Edition.

    password

    Especifique la contraseña para la cuenta asociada a su organización de Trailhead de Developer Edition.

  4. Guarde la solicitud, a continuación, haga clic en Send (Enviar). Si realizó la configuración correctamente, verá una respuesta que es similar al siguiente ejemplo (tenga en cuenta que la información de seguridad se opacó de forma intencional).
    Pantalla de Postman de escritorio: respuesta a la solicitud de autenticación
  5. Por último, realice los siguientes pasos:
    • Copie la cadena access_token y péguela en algún lugar para usarla más adelante. La necesitará para ejecutar solicitudes de la API para el Servicio de predicción de Einstein.
    • Copie la cadena instance_URL y péguela en algún lugar para usarla más adelante. La necesitará para las siguientes solicitudes.

Ahora está todo listo para crear y enviar sus solicitudes de la API de REST al Servicio de predicción de Einstein.

Paso 4: Obtener definiciones de predicciones disponibles

Comencemos por recuperar la lista de todas las definiciones de predicciones disponibles.

  1. Cree una nueva solicitud GET y nómbrela Get Prediction Definitions (Obtener definiciones de predicciones). Configure la solicitud con estos parámetros.
    Pantalla de Postman de escritorio: iniciar la configuración de la solicitud

    Configuración

    Descripción

    Request Type (Tipo de solicitud)

    GET

    Request URL (URL de solicitud)

    Especifique instance_URL/services/data/v55.0/smartdatadiscovery/predictionDefinitions, donde instance_URL es el valor devuelto de su solicitud de autenticación.

  2. Haga clic en la ficha Authorization (Autorización) y configure los siguientes parámetros.
    Pantalla de Postman de escritorio: configuración Authorization (Autorización) para la solicitud

    Configuración

    Descripción

    Authorization Type (Tipo de autorización)

    Seleccione OAuth2.0.

    Set Access Token (Establecer token de acceso)

    Pegue el token de acceso que guardó en el paso anterior.

  3. Guarde la solicitud, a continuación, haga clic en Send (Enviar). Si configuró los parámetros de solicitud correctamente, debería ver una respuesta similar al siguiente ejemplo:
{
  "nextPageUrl": null,
  "predictionDefinitions": [
    {
      "countOfActiveModels": 1,
      "countOfModels": 1,
      "createdBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "createdDate": "2022-06-09T21:23:54.000Z",
      "id": "1ORB00000008RSROA2",
      "label": "Sales_per_Customer",
      "lastModifiedBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "lastModifiedDate": "2022-06-09T21:23:54.000Z",
      "modelsUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models",
      "name": "Sales_per_Customer",
      "outcome": {
        "goal": "Maximize",
        "label": "Sales per Customer",
        "name": "Sales_per_Customer"
      },
      "predictionType": "Regression",
      "status": "Enabled",
      "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2"
     }
  ],
  "totalSize": 1,
  "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions?pageSize=25"
}

Paso 5: Obtener metadatos de definiciones de predicciones

La respuesta del paso 3 incluye la URL para recuperar los metadatos de la definición de predicciones que creó en la unidad anterior. Debería ser similar al siguiente ejemplo.

/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2

La Id. de la predicción coincide con la que vio anteriormente en el Gestor de modelos. 

  1. Agregue una solicitud GET, nómbrela Get Prediction Definition (Obtener definición de predicción) y reemplace esta cadena de solicitud en la URL. Recuerde incluir instance_Url.
    instance_Url
    /services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2
  2. Asimismo, configure los parámetros de autorización (Authorization Type [Tipo de autorización] y Access Token [Token de acceso]) como antes. Haga clic en Send (Enviar) y revise la respuesta. Debería ser similar al siguiente ejemplo.
    {
      "countOfActiveModels": 1,
      "countOfModels": 1,
      "createdBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "createdDate": "2022-06-09T21:23:54.000Z",
      "id": "1ORB00000008RSROA2",
      "label": "Sales_per_Customer",
      "lastModifiedBy": {
        "id": "your-account-id",
        "name": "your-name",
        "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
      },
      "lastModifiedDate": "2022-06-09T21:23:54.000Z",
      "modelsUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models",
      "name": "Sales_per_Customer",
      "outcome": {
        "goal": "Maximize",
        "label": "Sales per Customer",
        "name": "Sales_per_Customer"
      },
      "predictionType": "Regression",
      "status": "Enabled",
      "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2"
    }

Paso 6: Obtener modelos asociados a una predicción

La respuesta del paso 4 incluye la URL para recuperar los metadatos del modelo que implementó en la unidad anterior. Debería ser similar al siguiente ejemplo.

/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models
  1. Agregue una nueva solicitud GET, nómbrela Get Models (Obtener modelos) y reemplace esta cadena de solicitud en la URL. Recuerde incluir instance_Url.
    instance_Url
    /services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models
  2. Asimismo, configure los parámetros de autorización (Authorization Type [Tipo de autorización] y Access Token [Token de acceso]) como antes. Haga clic en Send (Enviar) y revise la respuesta. Debería ser similar al siguiente ejemplo.
    {
      "models": [
        {
          "createdBy": {
            "id": "your-account-id",
            "name": "your-name",
            "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
          },
          "createdDate": "2022-06-09T21:23:55.000Z",
          "fieldMappingList": [
            {
              "modelField": {
                "label": "Quantity",
                "name": "Quantity",
                "type": "Number"
              }
            },
            {
              "modelField": {
                "label": "Sub-Category",
                "name": "Sub_Category",
                "type": "Text"
              }
            },
          {
            "modelField": {
              "label": "Category",
              "name": "Category",
              "type": "Text"
            }
          },
          {
            "modelField": {
              "label": "Sales",
              "name": "Sales",
              "type": "Number"
            }
          },
          {
            "modelField": {
              "label": "Profit per Order",
              "name": "Profit_per_Order",
              "type": "Number"
              }
            }
          ],
          "filters": [],
          "historyUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models/1ORB00000008RSROA2/histories",
          "id": "1Ot4W000000XezqSAC",
          "isRefreshEnabled": false,
          "label": "Sales_per_Customer",
          "lastModifiedBy": {
            "id": "your-account-id",
            "name": "your-name",
            "profilePhotoUrl": "https://xxx-instance-url-xxx/profilephoto/005/T"
          },
          "lastModifiedDate": "2020-08-31T21:23:55.000Z",
          "model": {
             "id": "1OT4W000000LejUWAS"
          },
          "modelType": "Regression",
          "name": "Sales_per_Customer",
          "predictionDefinitionUrl": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2",
          "prescribableFields": [
            {
              "customDefinitions": [],
              "field": {
                "label": "Quantity",
                "name": "Quantity",
                "type": "Number"
              }
            }
          ],
          "sortOrder": 0,
          "status": "Enabled",
          "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models/1Ot4W000000XezqSAC"
        }
      ],
      "totalSize": 1,
      "url": "/services/data/v55.0/smartdatadiscovery/predictiondefinitions/1ORB00000008RSROA2/models"
    }

Observe fieldMappingList, que proporciona la lista de campos en el modelo. Los usaremos en el siguiente paso.

Paso 7: Obtener predicciones

Ahora que practicó interactuar con el Servicio de predicción de Einstein, obtengamos algunas predicciones.

  1. Agregue una nueva solicitud, nómbrela Get Predictions (Obtener predicciones) y configure los siguientes parámetros.
    Pantalla de Postman de escritorio: configurar los parámetros de solicitud para las predicciones

    Configuración

    Descripción

    Request Type (Tipo de solicitud)

    Cambie a POST (PUBLICAR)

    Request URL (URL de solicitud)

    Especifique instance_URL/services/data/v55.0/smartdatadiscovery/predict, donde instance_URL es el valor devuelto de su solicitud de autenticación.

  2. Configure los parámetros de autorización (Authorization Type [Tipo de autorización] y Access Token [Token de acceso]) como antes. En Add Authorization Request To (Agregar solicitud de autorización para), asegúrese de seleccionar Request Headers (Solicitar encabezados).
  3. Dado que esta es una solicitud POST, debemos especificar el cuerpo de la solicitud. Haga clic en la ficha Body (Cuerpo) y seleccione las siguientes opciones.

    Configuración

    Descripción

    Body Type (Tipo de cuerpo)

    Seleccione RAW (Sin procesar)

    Body Type Request (Solicitud de tipo de cuerpo)

    Seleccione JSON

  4. Agregue el cuerpo de la solicitud en formato JSON.
{  "predictionDefinition": "
yourPredictionDefinitionId
",
   "type": "RawData",
   "columnNames": ["Quantity","Category","Sub_Category","Sales","Profit_per_Order"],
   "rows": [
      ["2","Furniture","Chairs","300","10"]
   ]
}
  1. Reemplace yourPredictionDefinitionId por la Id. de la predicción que recuperó anteriormente. Algunas notas sobre el cuerpo de la solicitud:

    Elemento

    Notas

    "type":"RawData"

    El tipo RawData permite especificar los valores de entrada sin procesar directamente en la solicitud de predicción. Hay otros dos tipos, Records y RecordOverrides, que puede usar cuando la predicción está asociada al objeto de Salesforce. No obstante, nuestra predicción no está afiliada a un objeto de Salesforce.

    "columnNames"

    Lista de nombres separados por coma que el modelo espera como variables de entrada. Estos corresponden al elemento "modelField":"Name" en el valor fieldMappingList devuelto en la respuesta del paso 5.

    "rows"

    Lista separada por comas de los valores de texto para enviar al modelo. Estas son las variables de entrada que el modelo usa para obtener una predicción.

  2. Guarde la solicitud, haga clic en Send (Enviar) y revise la respuesta. Debería ser similar al siguiente ejemplo.
{
  "predictionDefinition": "1ORB00000008RSR",
  "predictions": [
      {
        "model": {
          "id": "1OtB00000008S34KAE"
         },
      "prediction": {
        "middleValues": [],
        "total": 88.68177540182317
      },
      "prescriptions": [],
      "status": "Success"
    }
  ],
  "settings": {
    "maxMiddleValues": 0,
    "maxPrescriptions": 0,
    "prescriptionImpactPercentage": 0
  }
}

El valor "prediction":"total" representa las ventas predichas por cliente que el modelo calculó en función de los valores de entrada.

  1. A continuación, copie y pegue el siguiente código en el cuerpo de la solicitud (reemplace lo que se encuentre allí). Agregue su Id. de predicción y haga clic en Send (Enviar).
{  "predictionDefinition": "yourPredictionDefinitionId",
  "type": "RawData",
  "columnNames": ["Quantity","Category","Sub_Category","Sales","Profit_per_Order"],
  "rows": [
    ["2","Furniture","Chairs","262","42"],
    ["5","Office Supplies","Art","7","25"]   
  ]
}

La predicción debería ser similar al siguiente ejemplo (los valores de predicción pueden variar).

{
  "predictionDefinition": "1ORB00000008RSR",
  "predictions": [
    {
      "model": {
        "id": "1OtB00000008S34KAE"
      },
      "prediction": {
        "middleValues": [],
        "total": 88.68177540182317
      },
      "prescriptions": [],
      "status": "Success"
    },
    {
      "model": {
        "id": "1OtB00000008S34KAE"
      },
      "prediction": {
        "middleValues": [],
        "total": -155.263449836085
      },
      "prescriptions": [],
      "status": "Success"
    }
  ],
  "settings": {
    "maxMiddleValues": 0,
    "maxPrescriptions": 0,
    "prescriptionImpactPercentage": 0
  }
}

El orden de las predicciones en la respuesta coincide con el orden de los valores de entrada en el cuerpo de la solicitud.

  1. Por último, recuperemos también los factores principales y las mejoras en la respuesta. Elimine la segunda línea de datos, agregue las siguientes líneas a la solicitud y, a continuación, haga clic en Send (Enviar).
{  "predictionDefinition": "yourPredictionDefinitionId",
  "type": "RawData",
  "columnNames": ["Quantity","Category","Sub_Category","Sales","Profit_per_Order"],
  "rows": [
    ["2","Furniture","Chairs","262","42"]
  ],
  "settings": {
    "maxMiddleValues": 2,
    "maxPrescriptions": 2}
}

En esta solicitud:

  • maxMiddleValues permite la devolución de los factores principales (hasta 2, en este ejemplo).
  • maxPrescriptions permite la devolución de mejoras (hasta 2, en este ejemplo).

La respuesta debería ser similar al siguiente ejemplo:

{
  "predictionDefinition": "1ORB00000008RSR",
  "predictions": [
    {
      "model": {
        "id": "1OtB00000008S34KAE"
      },
    "prediction": {
      "baseLine": 438.5059113062626,
      "middleValues": [
        {
        "columns": [
          {
            "columnLabel": "Sub-Category",
            "columnName": "Sub_Category",
            "columnValue": "Chairs"
          },
          {
            "columnLabel": "Sales",
            "columnName": "Sales",
            "columnValue": "262"
          }
        ],
          "value": -730.8852909080902
        },
      {
      "columns": [
        {
          "columnLabel": "Sales",
          "columnName": "Sales",
          "columnValue": "262"
        }
      ],
          "value": 244.82002630727217
          }
        ],
        "other": 136.2411286963786,
        "smallTermCount": 3,
        "total": 88.68177540182317
      },
      "prescriptions": [],
      "status": "Success"
    }
  ],
  "settings": {
    "maxMiddleValues": 2,
    "maxPrescriptions": 2,
    "prescriptionImpactPercentage": 0
  }
}

En esta respuesta: 

  • total representa el valor de predicción.
  • La sección middlevalues describe los dos factores principales que devuelve esta predicción. En este ejemplo:
    • Cuando el valor Sub Category (Subcategoría) es igual a chairs (sillas) y Sales (Ventas) es 262, el resultado es una reducción en la predicción de aproximadamente 731 (-730.8852).
    • Cuando Sales (Ventas) es 262, el resultado es un aumento en la predicción de aproximadamente 245 (244.8200).

Para obtener más información sobre otros elementos de la respuesta, consulte Obtener predicciones en la ayuda de Salesforce.

Revisar la supervisión de uso

Einstein Discovery supervisa las estadísticas de uso en tiempo real. Para ver las estadísticas de uso de su organización, desde Setup (Configuración), en el cuadro de búsqueda rápida, ingrese discovery (detección) y seleccione Usage (Uso).

Pantalla de supervisión de uso de Einstein Discovery que muestra la cantidad de llamadas de API de predicciones ejecutadas en el día

Einstein realiza un seguimiento de las solicitudes de la API de REST, junto con otras solicitudes de predicciones programáticas, en Number of prediction API calls run today (Número de llamadas de API de predicciones ejecutadas hoy).

Recursos

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios