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.
Wordpress (quform)
Wordpress (quform)
Hier is een voorbeeld van een Wordpress-integratie met behulp van de QuForm-plugin voor formulieren.
Copy
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);
Webflow (zonder CV)
Webflow (zonder CV)
Hier is een voorbeeld van een integratie in WebFlow. Deze integratie werkt ook voor een klassieke website.
Copy
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);
});
});
Webflow (MET CV)
Webflow (MET CV)
Hier is een voorbeeld van een integratie in WebFlow. Deze integratie werkt ook voor een klassieke website.
Copy
// 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}`);
}
});