Skip to main content
So gehen Sie vor:
1

API-Schlüssel erhalten

Wenn Sie Ihre API-Schlüssel noch nicht haben, folgen Sie der Anleitung im Abschnitt API-Schlüssel erhalten
2

Die API kennenlernen

Lesen Sie die detaillierte Dokumentation der API post applicants. Es wird auch hilfreich sein, das Konzept der Benutzerdefinierten Felder zu verstehen
3

Lassen Sie sich von Integrationsbeispielen inspirieren

Keine Sorge, Sie sind nicht der Erste, und Sie werden wahrscheinlich unten Beispiele für Integrationen finden, die Ihren Wünschen ähnlich sind.
Hier ist ein Beispiel für eine Wordpress-Integration mit dem QuForm-Plugin für Formulare.
  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 ist ein Beispiel für eine Integration in Webflow. Diese Integration funktioniert auch für eine klassische 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 ist ein Beispiel für eine Integration in Webflow. Diese Integration funktioniert auch für eine klassische Website.

// Fill those constants with your own values
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";

// Helper function to read file as base64
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);
});
};

// Helper function to validate form data
const validateFormData = (formData) => {
if (!formData.linkedinUrl) {
throw new Error("LinkedIn URL is mandatory");
}
return true;
};

// Main form submission handler
document.querySelector(SUBMIT_BUTTON_SELECTOR).addEventListener("click", async function (event) {
event.preventDefault(); // Prevent default form submission

try {
const formElement = document.querySelector(FORM_SELECTOR);
if (!formElement) {
throw new Error("Form element not found");
}

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

// Validate form data
validateFormData(formDataAsObject);

// Get and validate file
const fileInput = formElement.querySelector(`input[name="${RESUME_INPUT_NAME}"]`);
if (!fileInput) {
  throw new Error("Resume input field not found");
}

const file = fileInput.files[0];
if (!file) {
  throw new Error("No file uploaded");
}

// Read file and prepare data
const base64Data = await readFileAsBase64(file);
const resumesFiles = [
  {
    fileName: file.name,
    data: base64Data,
  },
];

const data = {
  referenceId: "PROJECT-REFERENCE-ID", // Update with your project reference ID
  ...formDataAsObject,
  resumesFiles,
};

console.log("Sending data:", data);

// Send data to 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 error! status: ${response.status}`);
}

const responseData = await response.json();
console.log("Data sent successfully:", responseData);

// Optional: Show success message to user
alert("Application submitted successfully!");

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