Skip to main content
Hier is hoe je te werk moet gaan:
1

Mijn API-sleutels verkrijgen

Als je nog geen API-sleutels hebt, volg dan de stappen in de sectie Mijn API-sleutels verkrijgen
2

De API ontdekken

Raadpleeg de gedetailleerde documentatie van de API post applicants. Het zal ook nuttig zijn om het concept van Aangepaste velden te begrijpen
3

Laat je inspireren door integratie-voorbeelden

Je bent zeker niet de eerste, wees gerust, en hieronder vind je waarschijnlijk voorbeelden van integraties die vergelijkbaar zijn met wat je zoekt.
Hier is een voorbeeld van een Wordpress-integratie met behulp van de QuForm-plugin voor formulieren.
  add_action('quform_post_process_{ID_FORM}', function (array $result, Quform_Form $form){
      $file_content = file_get_contents( $this->attachments[ 0 ] );
      $file_base_64_content = base64_encode( $file_content );

      $data = [
          'firstName' => $form->getValue('quform_{ID_FORM}_5'),
          'lastName' => $form->getValue('quform_{ID_FORM}_7'),
          'fullName' => $form->getValue('quform_{ID_FORM}_6') . ' ' . $form->getValue('quform_{ID_FORM}_7'),
          'cb9d4872-bfaa-4c57-b1af-91c008883386' => $form->getValue('quform_{ID_FORM}_10'), // Poste
          '17fe3ebf-3641-4a94-ac9f-f11a6d429107' => $form->getValue('quform_{ID_FORM}_31'), // Exp SaaS
          '6b751e8d-3947-43f9-af52-1db532210c6d' => $form->getValue('quform_{ID_FORM}_12'), // 1e année CDI
          'region' => $form->getValue('quform_{ID_FORM}_15'),
          'linkedinUrl' => $form->getValue('quform_{ID_FORM}_17'),
          'phoneNumbers' => $form->getValue('quform_{ID_FORM}_20'),
          'emailAddresses' => $form->getValue('quform_{ID_FORM}_22'),
          "resumesFiles": [
            {
              "data": $file_base_64_content,
              "fileName": $this->attachments[ 0 ]->file_name
            }
          ]
      ];

      wp_remote_post('https://functions.prod.jarvi.tech/v1/public-api/rest/applicants', [
          'body' => json_encode($data),
          'headers' => array(
              'Content-Type' => 'application/json',
              'X-Api-Key' => '{JARVI_PRIVATE_API_KEY}'
            ),
      ]);

      return $result;
  }, 10, 2);
Hier is een voorbeeld van een integratie in WebFlow. Deze integratie werkt ook voor een klassieke website.
  document.querySelector('#form-submit-button').addEventListener('click', function() {
      var formElement = document.querySelector('.inscription-candidat-form');
      var formData = new FormData(formElement);
      var formDataAsObject = {}

      for (var [key, value] of formData.entries()) {
        console.log(key, value);
        formDataAsObject[key] = value
      }

      if(!formDataAsObject.linkedinUrl) console.error("linkedinUrl is mandatory");

      const data = {
          "referenceId":"PROJECT-REFERENCE-ID",
          ...formDataAsObject
      }

      console.log("data to send",data)

      fetch('https://functions.prod.jarvi.tech/v1/public-api/rest/applicants', {
          method: 'POST',
          mode:'cors',
          headers: {
            'Content-Type': 'application/json',
            'X-Api-Key': 'JARVI_PRIVATE_API_KEY'
          },
          body: JSON.stringify(data)
      })
      .then(response => response.json())
      .then(data => console.log("data sent",data))
      .catch((error) => {
          console.error('Error:', error);
      });
  });
Hier is een voorbeeld van een integratie in WebFlow. Deze integratie werkt ook voor een klassieke website.

// Vul deze constanten in met je eigen waarden
const FORM_SELECTOR = "#candidature-form";
const SUBMIT_BUTTON_SELECTOR = "#form-submit-button";
const RESUME_INPUT_NAME = "resumesFiles";
const PROJECT_REFERENCE_ID = "PROJECT-REFERENCE-ID";
const JARVI_PRIVATE_API_KEY = "YOUR JARVI PRIVATE API KEY";

// Hulpfunctie om bestand als base64 te lezen
const readFileAsBase64 = (file) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (event) => resolve(event.target.result);
reader.onerror = (error) => reject(error);
reader.readAsDataURL(file);
});
};

// Hulpfunctie om formuliergegevens te valideren
const validateFormData = (formData) => {
if (!formData.linkedinUrl) {
throw new Error("LinkedIn URL is verplicht");
}
return true;
};

// Hoofdfunctie voor formulierindiening
document.querySelector(SUBMIT_BUTTON_SELECTOR).addEventListener("click", async function (event) {
event.preventDefault(); // Voorkom standaard formulierindiening

try {
const formElement = document.querySelector(FORM_SELECTOR);
if (!formElement) {
throw new Error("Formulierelement niet gevonden");
}

// Converteer FormData naar object
const formData = new FormData(formElement);
const formDataAsObject = Object.fromEntries(formData.entries());

// Valideer formuliergegevens
validateFormData(formDataAsObject);

// Haal bestand op en valideer
const fileInput = formElement.querySelector(`input[name="${RESUME_INPUT_NAME}"]`);
if (!fileInput) {
  throw new Error("CV-invoerveld niet gevonden");
}

const file = fileInput.files[0];
if (!file) {
  throw new Error("Geen bestand geüpload");
}

// Lees bestand en bereid gegevens voor
const base64Data = await readFileAsBase64(file);
const resumesFiles = [
  {
    fileName: file.name,
    data: base64Data,
  },
];

const data = {
  referenceId: "PROJECT-REFERENCE-ID", // Update met je project referentie ID
  ...formDataAsObject,
  resumesFiles,
};

console.log("Gegevens verzenden:", data);

// Stuur gegevens naar API
const response = await fetch("https://functions.prod.jarvi.tech/v1/public-api/rest/v2/applicants", {
  method: "POST",
  mode: "cors",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": JARVI_PRIVATE_API_KEY,
  },
  body: JSON.stringify(data),
});

if (!response.ok) {
  throw new Error(`HTTP-fout! status: ${response.status}`);
}

const responseData = await response.json();
console.log("Gegevens succesvol verzonden:", responseData);

// Optioneel: Toon succesbericht aan gebruiker
alert("Sollicitatie succesvol ingediend!");

} catch (error) {
console.error("Fout:", error);
alert(`Fout: ${error.message}`);
}
});