# Salesforce

Debido a esta bidireccionalidad es importante saber donde está el maestro o la gobernanza del dato, pues aunque podamos sincronizar ambos sistemas, se debe tener los flujos de trabajo de los agentes muy bien definidos, así como dónde comienzan los circuitos.

### Modelo Oportunidades

Este modelo inicia en Salesforce como embudo de captación y, cuando tenemos una *opportunity* que consideramos interesante, se envía hacia Classlife como **nueva Admisión** para que el alumno inicie todo el proceso dentro de Admisión en Classlife (pagos, documentación, entrevistas, etc)

### Modelo Ventas

El inicio y gestión del *funnel* se realiza en Salesforce. Contacto, entrevistas, documentación y todo lo necesario y solo cuando se cierra la venta, como "ganada" se envía a Classlife como **nueva Matrícula** y solo viajan los datos referentes a la matrícula.

### Modelo Classlife

Este modelo se inicia en Classlife como maestro del dato, pero interesa que en Salesforce tener trazabilidad de los datos. Por tanto, Classlife envía datos a Salesforce.

Usando el CRM de Classlife como Contacto, y luego pasa a Admisión (pre-matrícula) se utiliza todo el flujo y operaciones del CRM de Classlife junto con el Módulo de Admisiones y Gestión académica y se va lanzando información desde Classlife a Salesforce para que tengan seguimiento en qué etapa y situación está cada alumno.

### Transmisión de datos

En los 3 modelos se envían datos de una aplicación a la otra y es necesario tener en cuenta 2 factores:

* Mapping: ¿Qué datos enviar?
* Trigger: ¿Cuándo se envían?

#### Mapping: ¿Qué datos enviar?

Es necesario tener un documento de consenso que identifique:

* Los campos necesarios que deben viajar de una plataforma a otra
* Los Identificadores únicos para relacionar cada entidad
* Los campos *lookup* tipo clave-valor

#### Trigger: ¿Cuándo se envían?

Hay que definir cuándo y cómo se envía la información entre ambas plataforma y eso aplica a cada plataforma por separado.&#x20;

Hay que definir en cada comunicación qué entidades y datos enviar y tener previsto en la plataforma receptora que esa información encaje y pueda almacenarla

Estos disparadores pueden ser de dos tipos

* Trigger Manual:  Un botón situado en la plataforma que lanza la comunicación y acción concreta
* Trigger Automático: Un disparador en base a un evento que ocurre en la plataforma y lanza la comunicación y traspaso de datos.

### Requisitos para la integración

#### 1) Documento funcional y definiciones

Necesitamos tener el documento funcional que defina claramente qué modelo de integración y todo el detalle de Mapping y Triggers, que se adjuntará con una hoja de cálculo detallada

#### 2) Acceso Front de Salesforce en entorno TEST

Necesitamos un USER/PWD para verificar a modo de QA que las integraciones se realizan correctamente, los usuarios y etapas se actualizan o poder lanzar desde Salesforce los datos hacia Classlife.&#x20;

Si esto no es posible, será el Cliente quién deba realizar toda esta operatoria de QA

#### 3) Datos técnicos

De la parte de SalesForce se necesita:

* URL-Endopints de la API de Salesforce en PROD/TEST
* User/Pwd de credenciales&#x20;

De la parte de Classlife se necesita

* ApiKey específica para la comunicación en cada entorno PROD/TEST
* Los endpoints de Classlife que son:
  * PROD:  (pending)&#x20;
  * TEST: (pending)

## Envío de Solicitude de Nueva Matricula de SF a Claslife

<mark style="color:green;">`POST`</mark> `https://{YOUR_CLASSLIFE_DOMAIN}/app/apilead.php`

Crear admisiones para nuevo alumno

#### Request Body

| Name                                               | Type   | Description     |
| -------------------------------------------------- | ------ | --------------- |
| apiKey<mark style="color:red;">\*</mark>           | String | { APIKEY }      |
| perform<mark style="color:red;">\*</mark>          | String | newAdmission    |
| salesforce\_data<mark style="color:red;">\*</mark> | Json   | { Objeto JSON } |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    "status": "sucess",
    "data":[
        "student_id": {ID de alumno},
        "enroll_id": {ID de matrícula}
    ],
    "context": "Student pre-enrolled"
}
```

{% endtab %}
{% endtabs %}
