Inhoudsopgave
1 - Verbinding opzetten met Tigris/Salesforce
2 - Ontvangen van de vacatures
3 - Vacature gegevens terug sturen naar Tigris
4 - Sollicitaties doorsturen naar Tigris
- Post van sollicitatie
- Sollicitatie op vacature of open sollicitatie
- Post van cv (en/of andere bijlages)
- UTM / Bron van sollicitatie
- AVG / privacy verklaring
- Foutafhandeling
Belangrijke zaken vooraf
Met de Tigris Website API is het mogelijk om uw eigen website te integreren met uw Tigris
omgeving. Hierdoor is het mogelijk om vanuit het systeem vacatures op je website te plaatsen en sollicitaties automatisch binnen te laten komen in Tigris. Zorg ervoor dat de volgende zaken gecheckt worden voordat de connectie opgezet wordt:
API-Versies
Salesforce released met elke update (Spring, Summer, Fall en Winter), een nieuwe API versie uit.
Gebruik daarom zoveel mogelijk de nieuwste API versie. De meest actuele versie is op te halen via Setup van de omgeving waar je mee wilt koppelen. Uw Tigris consultant kan u helpen aan de meest recente versie:
Je kunt dit versienummer ophogen in de url waartoe je de request/post doet. Bijvoorbeeld: https://<jouwdomein>.my.salesforce.com/services/data/v65.0/sobjects/tigris__vacancy__c/<recordid>
Huidige versie (Winter '26): v65.0
SSL certificaat
Het (test) domein dient te beschikken over een geldig SSL-certificaat. Let erop dat hier specifieke eisen aan verbonden zijn vanuit Salesforce. De exacte uitleg en vereisten vind je hier
Om direct te testen of het certificaat aan alle eisen voldoet, kun je hier je domein checken. Als 1 van de check faalt, dan moet het certificaat geüpdatet worden om de verbinding met Tigris tot stand te kunnen brengen
1 - Verbinding opzetten met Tigris/Salesforce
De verbinding wordt opgezet middels een connected app in Salesforce. Een Tigris consultant zal deze app aanmaken, waarna de tokens voor de verbinding veilig worden gedeeld via Lastpass.
Om de verbonden app goed in te kunnen stellen heeft Tigris, en om vacatures te kunnen posten zijn de onderstaande URL's nodig:
1. Callback URL (voor authenticatie)
2. Streaming URL (voor het posten van de XML met de vacatures)
Deze URL's moeten dus zo snel mogelijk aan Tigris verstrekt worden, zodat de app opgezet kan worden. Vervolgens worden de tokens gedeeld met de webbouwer. Deze kan dan aan de slag om de connectie op te zetten.
Zie voor de technische aspecten van het opzetten van de connectie en het uitwisselen van data de Salesforce REST API documentatie. Kies altijd een door Salesforce aanbevolen autorisatie, dus maak geen gebruik van de volgende autorisatie flows: client credential flow, username/password flow, implicit grant flow, web flow:
- Algemene REST API documentatie: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_defining_remote_access_applications.htm
- Gebruikte endpoints: https://help.salesforce.com/articleView?id=remoteaccess_oauth_endpoints.htm&type=5
-
Autorisatie flow:
- OAuth 2.0 Refresh Token Flow: https://help.salesforce.com/articleView?id=sf.remoteaccess_oauth_refresh_token_flow.htm&type=5 of
- OAuth 2.0 JWT Bearer Flow: https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_jwt_flow.htm&type=5
Let op: Met de consumer key en consumer secret is het mogelijk om de verbinding op te zetten en een bearer token op te halen. Deze token verloopt ook weer. Aan de kant van de website dient dus gecontroleerd te worden of de bearer token nog geldig is. Zo niet dan dient hij opnieuw aangevraagd te worden voordat je een API call kunt doen. Maak nooit gebruik van alleen de Salesforce gebruikersnaam en wachtwoord zelf. Deze kunnen namelijk veranderen waardoor de verbinding daarna er uit zal liggen.
2 - Ontvangen van de vacatures
Tigris stuurt een vacature door naar de opgegeven streaming URL (uit stap 1) wanneer er een vacature is gemaakt en bij elke wijziging
Een voorbeeld van de volledige POST inclusief de XML die verzonden wordt (afhankelijk van welke velden nodig zijn):
{
"method": "POST",
"url": "<streaming-URL>",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "host",
"value": "<domein>"
},
{
"name": "connection",
"value": "close"
},
{
"name": "accept-encoding",
"value": "gzip"
},
{
"name": "x-forwarded-for",
"value": "<IP>,<IP>, <IP>"
},
{
"name": "cf-ray",
"value": "654eba7f4f41592e-IAD"
},
{
"name": "x-forwarded-proto",
"value": "http"
},
{
"name": "cf-visitor",
"value": "{\"scheme\":\"http\"}"
},
{
"name": "content-type",
"value": "text/xml"
},
{
"name": "accept",
"value": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2"
},
{
"name": "cf-connecting-ip",
"value": "<IP>"
},
{
"name": "cdn-loop",
"value": "cloudflare"
},
{
"name": "cf-request-id",
"value": "0a4512e3910000592eb6175000000001"
},
{
"name": "x-request-id",
"value": "7de7ce4d-27c4-46fd-837c-8afb5f7d1c5b"
},
{
"name": "x-forwarded-port",
"value": "80"
},
{
"name": "via",
"value": "1.1 vegur"
},
{
"name": "connect-time",
"value": "1"
},
{
"name": "x-request-start",
"value": "1621945338789"
},
{
"name": "total-route-time",
"value": "0"
},
{
"name": "content-length",
"value": "4758"
}
],
"queryString": [
{
"name": "foo",
"value": [
"bar",
"baz"
]
}
],
"postData": {
"mimeType": "text/xml",
"text": "<?xml version="1.0" encoding="UTF-8"?>
<Data>
<OrganizationId> <![CDATA[00D1t000000qDyLEAU]]> </OrganizationId>
<Notifications><Notification>
<ActionType> <![CDATA[update]]> </ActionType>
<sObject>
<Id> <![CDATA[a0m6N000000oXzwQAE]]></Id>
<Name> <![CDATA[Consultant]]> </Name>
<Tigris__Offline__c> <![CDATA[false]]> </Tigris__Offline__c>
<Tigris__Geplaatst__c> <![CDATA[true]]> </Tigris__Geplaatst__c>
<CreatedById> <![CDATA[0051t000000x2b5AAA]]></CreatedById>
<CreatedDate> <![CDATA[2021-05-25 12:22:09]]></CreatedDate>
<Tigris__Bedrijfsomschrijving__c> <![CDATA[<p>Dit is en voorbeeld van de bedrijfsomschrijving!</p>]]></Tigris__Bedrijfsomschrijving__c>
<Tigris__Branche__c> <![CDATA[ICT]]> </Tigris__Branche__c>
<Tigris__Company_name__c> <![CDATA[Tigris]]> </Tigris__Company_name__c>
<Tigris__Company_site__c> <![CDATA[www.tigris.nl]]> </Tigris__Company_site__c>
<Tigris__Functiegroep__c> <![CDATA[ICT]]> </Tigris__Functiegroep__c>
<Tigris__Geboden_wordt__c> <![CDATA[<p>Dit is een voorbeeld van wat er geboden wordt aan de sollicitant!</p>]]></Tigris__Geboden_wordt__c>
<Tigris__Gevraagd_wordt__c> <![CDATA[<p>Dit is een voorbeeld van wat er gevraagd wordt aan de sollicitant!</p>]]></Tigris__Gevraagd_wordt__c>
<Tigris__Interne_vacature__c> <![CDATA[false]]> </Tigris__Interne_vacature__c>
<Tigris__Introductie__c> <![CDATA[Dit is een introductie naar de vacature]]></Tigris__Introductie__c>
<Tigris__Land__c> <![CDATA[Nederland]]> </Tigris__Land__c>
<Tigris__Language__c> <![CDATA[Nederlands]]> </Tigris__Language__c>
<Tigris__Opleidingsniveau__c> <![CDATA[HBO]]> </Tigris__Opleidingsniveau__c>
<Tigris__Owner_name__c> <![CDATA[Demo Tigris]]> </Tigris__Owner_name__c>
<Tigris__Photo_URL__c> <![CDATA[https://tigris-public.s3.amazonaws.com/00D1t000000qDyLEAU/3c967e84-338b-9e43-f549-080021479030/a0w6N000000x5BXQAY/Fotografietips-Licht-tijdens-ondergaande-zon.jpg]]></Tigris__Photo_URL__c>
<Tigris__Plaats__c> <![CDATA[Alblasserdam]]> </Tigris__Plaats__c>
<Tigris__Postcode__c> <![CDATA[2952 AD]]> </Tigris__Postcode__c>
<Tigris__Region__c> <![CDATA[Zuid-Holland]]> </Tigris__Region__c>
<Tigris__Salaris_per__c> <![CDATA[Maand]]> </Tigris__Salaris_per__c>
<Tigris__Salaris_tot__c> <![CDATA[2500.00]]> </Tigris__Salaris_tot__c>
<Tigris__Salaris_van__c> <![CDATA[3500.00]]> </Tigris__Salaris_van__c>
<Tigris__Soort_dienstverband__c> <![CDATA[Vast]]> </Tigris__Soort_dienstverband__c>
<Tigris__Uren_per_week__c> <![CDATA[40.00]]> </Tigris__Uren_per_week__c>
<Tigris__Vacature_omschrijving__c> <![CDATA[<p>Dit is en voorbeeld van de vacature omschrijving</p>]]></Tigris__Vacature_omschrijving__c>
<Tigris__Vacaturenummer__c> <![CDATA[V-00003555]]> </Tigris__Vacaturenummer__c>
<Tigris__Video_url__c> <![CDATA[URL]> </Tigris__Video_url__c>
</sObject>
</Notification></Notifications>
</Data>",
"params": []
},
"headersSize": 668,
"bodySize": 4758
}
Vacature online plaatsen/offline halen
Tigris__Offline__c = Wanneer deze op “true” staat is de vacature offline gehaald.
Tigris__Geplaatst__c = Wanneer deze op “true” staat is de vacature online gezet.
Wanneer ze beide op true staan dan dient de vacature offline te zijn.
Vacature wordt verwijderd
Als een vacature volledig wordt verwijderd uit Tigris zonder dat deze eerst offline is gehaald, wordt er ook een signaal gestuurd naar de website zodat de vacature wel netjes offline gehaald kan worden. De POST die dan gestuurd wordt heeft een ActionType = delete
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<OrganizationId><![CDATA[00D1t000000qDyLEAU]]></OrganizationId>
<Notifications><Notification>
<ActionType><![CDATA[delete]]></ActionType>
<sObject>
<Id><![CDATA[a0m6N000000co8pQAA]]></Id>
</sObject>
</Notification></Notifications>
</Data>
Voorbeeld volledig POST
{
"method": "POST",
"url": "http://mockbin.org/bin/bcf397ad-3a9c-4d11-bb5a-ab6239a8b7be?foo=bar&foo=baz",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{ "name": "host", "value": "mockbin.org" },
{ "name": "connection", "value": "close" },
{ "name": "accept-encoding", "value": "gzip" },
{ "name": "x-forwarded-for", "value": "85.222.150.8,18.193.224.214, 172.68.50.172" },
{ "name": "cf-ray", "value": "6d9d4ae7ae490d5e-VIE" },
{ "name": "x-forwarded-proto", "value": "http" },
{ "name": "cf-visitor", "value": "{\"scheme\":\"http\"}" },
{ "name": "content-type", "value": "text/xml" },
{ "name": "accept", "value": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2" },
{ "name": "cf-connecting-ip", "value": "18.193. 224.214" },
{ "name": "cdn-loop", "value": "cloudflare" },
{ "name": "x-request-id", "value": "fb295283-9322-4ca1-93fc-c608f5a768f8" },
{ "name": "x-forwarded-port", "value": "80" },
{ "name": "via", "value": "1.1 vegur" },
{ "name": "connect-time", "value": "0" },
{ "name": "x-request-start", "value": "1644243979695" },
{ "name": "total-route-time", "value": "0" },
{ "name": "content-length", "value": "275" }
],
"queryString": [
{ "name": "foo", "value": [ "bar", "baz" ] }
],
"postData": { "mimeType": "text/xml", "text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Data>
<OrganizationId><![CDATA[00D1t000000qDyLEAU]]></OrganizationId>
<Notifications><Notification>
<ActionType><![CDATA[delete]]></ActionType>
<sObject>
<Id><![CDATA[a0m6N000000co8pQAA]]></Id>
</sObject>
</Notification></Notifications>
</Data>",
"params": [] },
"headersSize": 618,
"bodySize": 275
}
3 - Vacature gegevens terug sturen naar Tigris
Nadat de vacature zichtbaar is op de website is het nodig om het externe ID (Post ID) en URL
van de vacature terug te sturen naar Tigris.
Het externe ID wordt gebruikt om een sollicitatie te matchen aan een vacature (zie stap 4). De vacature URL wordt voor 2 zaken gebruikt:
- De gebruiker in Tigris kan direct de vacature controleren door op de URL te klikken.
- de URL wordt meegegeven in de integratie voor multiposting (VONQ) en Indeed.
Om de gegevens terug te sturen naar Tigris wordt een patch methode gebruikt.
URL die gebruikt wordt om te updaten: https://<jouwdomein>.my.salesforce.com/services/data/v57.0/sobjects/tigris__vacancy__c/<recordid>
Het vacaturenummer van de vacature is zichtbaar geworden op de website.
Voorbeeld json:
{
"Tigris__Vacature_url__c": "www.tigris.nl/hello",
"Tigris__Extern_vacature_ID__c": "12345"
}Wanneer je een compleet nieuwe vacature wil sturen is dit mogelijk met de volgende URL: https://<jouwdomein>.my.salesforce.com/services/data/v57.0/sobjects/Tigris__Vacancy__c
Alle velden die in de eerder genoemde voorbeeld XML zichtbaar zijn, zijn te vullen. Mocht het nodig zijn dan is het mogelijk om aan de Tigris kant extra velden aan te maken.
4 - Sollicitaties doorsturen naar Tigris
Post van sollicitatie
Wanneer er op een vacature gesolliciteerd wordt dient dit naar Tigris gestuurd te worden.
Hiervoor wordt een post methode gebruikt.
Sollicitatie endpoint
POST: https://<jouwdomein>.my.salesforce.com/services/data/v65.0/sobjects/Tigris__sollicitatie__c
Sollicitatie op vacature of open sollicitatie
Er zijn 2 sollicitatie flows in Tigris: De eerste betreft een sollicitatie op een specifieke vacature en de tweede gaat om een open sollicitatie die dus niet aan een vacature gekoppeld moet worden. Hieronder een overzicht van de velden die meestal worden meegestuurd, met daarbij de aandachtpunten voor de betreffende sollicitatietypes. Het is mogelijk om extra (custom) velden mee te geven. Als dit nodig is, stem dit dan af met de klant en Tigris
| Sollicitatie op vacature | Beschrijving |
|---|---|
Tigris__Achternaam_kandidaat__c |
Verplicht veld (max 80 tekens) |
Tigris__Voornaam_kandidaat__c |
Aanbevolen (max 80 tekens) |
Tigris__Mobiel_nummer__c |
Aanbevolen (max 40 tekens) |
Tigris__Email__c |
Aanbevolen -> wordt gebruikt om in Tigris een kandidaat op de matchen. (moet een valide emailadres zijn) |
Tigris__UTM_url__c |
Aanbevolen -> zie ook UTM / Bron van sollicitatie (max 255 tekens) |
Tigris__Opmerking__c |
Optioneel (max 255 tekens) |
Tigris__Extern_vacature_ID__c |
Verplicht veld om de sollicitatie goed af te kunnen handelen. We verwachten hier het hetzelfde externe Id wat in stap 3 naar Tigris is teruggestuurd op de vacature (max 40 tekenst) |
Velden die in ieder geval niet meegestuurd moeten worden bij een sollicitatie op een vacature
OwnerIdTigris__Office_from_website__c
Voorbeeld json voor sollicitatie op een vacature:
{
"Tigris__Voornaam_kandidaat__c": "MaxwellHo",
"Tigris__Achternaam_kandidaat__c": "Lambert",
"Tigris__Mobiel_nummer__c": "+1 (867) 429-2788",
"Tigris__Email__c": "test@tigris.nl",
"Tigris__Extern_vacature_ID__c" : "extern id van de vacature",
"Tigris__UTM_url__c ": "url inclusief utm”,
"Tigris__Opmerking__c":"Motivatie/Tekstvlak op de website"
}| Open sollicitatie | Beschrijving |
|---|---|
Tigris__Achternaam_kandidaat__c |
Verplicht veld (max 80 tekens) |
Tigris__Voornaam_kandidaat__c |
Aanbevolen (max 80 tekens) |
Tigris__Mobiel_nummer__c |
Aanbevolen (max 40 tekens) |
Tigris__Email__c |
Aanbevolen -> wordt gebruikt om in Tigris een kandidaat op de matchen. (moet een valide emailadres zijn) |
Tigris__UTM_url__c |
Aanbevolen -> zie ook UTM / Bron van sollicitatie (max 255 tekens) |
Tigris__Opmerking__c |
Optioneel (max 255 tekens) |
Tigris__Office_from_website__c |
Verplicht veld. Wordt gebruikt om de sollicitatie aan de juiste gebruiker (Owner) te kunnen koppelen. In dit veld moet de exacte benaming van de vestiging zoals deze in Tigris aanwezig is worden doorgestuurd, en niet het Id (max 40 tekens) |
Velden die in ieder geval niet meegestuurd moeten worden bij een open sollicitatie:
OwnerIdTigris__Extern_vacature_ID__c
Voorbeeld json voor open sollicitatie:
{
"Tigris__Voornaam_kandidaat__c": "MaxwellHo",
"Tigris__Achternaam_kandidaat__c": "Lambert",
"Tigris__Mobiel_nummer__c": "+1 (867) 429-2788",
"Tigris__Email__c": "test@tigris.nl",
"Tigris__UTM_url__c ": "url inclusief utm”,
"Tigris__Opmerking__c":"Motivatie/Tekstvlak op de website",
"Tigris__Office_from_website__c": "Alblasserdam"
}Na insert van een Sollicitatie record wordt er een succesbericht teruggestuurd, met daarin het Id van het sollicitatierecord (recordId).
Voorbeeld succesbericht
{
"id": "a0V1n00000DjC1dEAF",
"success": true,
"errors": []
}Als er geen succesbericht terugkomt, dan is de sollicitatie niet aangemaakt in Tigris. Zorg voor een goede afhandeling hiervan, zie Foutafhandeling
Post van cv (en/of andere bijlages)
Het Id wat als succes is teruggestuurd moet gebruikt worden om de bijlage(n) te relateren aan het sollicitatierecord. Dit moet direct gebeuren nadat het sollicitatierecord is aangemaakt, om te zorgen dat de sollicitatie in Tigris correct inclusief cv wordt verwerkt.
Belangrijk: Als de bijlage een cv is, dan moet de naam van het cv suffix _cv hebben. Op basis hiervan wordt in Tigris bepaald dat het een cv is die ook geparst moet worden.
File endpoint
POST: https://<jouwdomein>.my.salesforce.com//services/data/v65.0/sobjects/ContentVersion
Voorbeeld bijlage toevoegen
{
"Title": "Voorbeeld", // Bestandsnaam zonder extensie
"PathOnClient": "Voorbeeld.pdf", // Bestandsnaam met extensie
"VersionData": "JVBERi0xLjQKJb/...", // Base64-gecodeerde bestandsinhoud
"FirstPublishLocationId": "001XXXXXXXXXXXX" // Verwijzing naar het Sollicitatie-record
}
UTM / Bron van sollicitatie
Tigris__UTM_url__c = Hier verwacht Tigris de volledige sollicitatie URL. Dit is de URL van de vacature + de beschikbare UTM. Op basis hiervan herkent Tigris de bron en de eventuele overige gegevens. Tigris herkent de volgende tags:
- <tag1> = utm_source: (Oorspronkelijke) bron van de kandidaat
- <tag2> = utm_medium: medium wat gebruikt is (bijv. referral of cpc)
- <tag3> = utm_campaign: campagne tag
De URL kan als volgt worden doorgegeven: <vacaturelink>?<tag1>&<tag2>&<tag3>
Voorbeeld van een URL inclusief UTM:
https://tigris.nl/vacatures/leerling-timmerman?utm_source=Indeed&utm_medium=referral&utm_campaign=BouwAVG / privacy verklaring
Als de sollicitant akkoord gaat met de algemene voorwaarden/privacy verklaring, moet dit worden doorgegeven bij de sollicitatie zodat de verdere afhandeling voor de AVG in Tigris goed kan worden afgehandeld. Hiervoor zijn drie checkboxen aanwezig op het Sollicitatie object. De eerste 2 moeten op TRUE gezet worden als iemand toestemming geeft om zijn gegevens op te slaan.
De laatste kan op TRUE gezet worden als er toestemming is om bijv. marketing mails te versturen.
- Tigris__Approval_data_processing__c
- Tigris__Akkoord_algemene_voorwaarden__c
- (optioneel) Tigris__Approval_marketing__c
Foutafhandeling
Als een sollicitatierecord niet kan worden aangemaakt, dan stuurt Salesforce of een error terug in plaats van een succesbericht, of er komt gewoon geen succesbericht terug.
Als er een fout terugkomt, dan zal er ook duidelijk zijn wat het probleem is (bv geen valide emailadres).In deze gevallen kan de sollicitatie opnieuw ingestuurd worden met valide data.
Als er geen specifieke fout terugkomt, is er bijna altijd sprake van een te strikte configuratie aan de klantkant (bijvoorbeeld een verkeerde validatie), waardoor het opnieuw insturen ook weer zal mislukken. Best practice is dus om dit maximaal 2 of 3 keer te proberen, en mocht de fout blijven om dan de klant te informeren.
Dit moet aan de websitekant worden afgehandeld. Als een record niet aangemaakt kan worden, dan ziet Tigris dit namelijk niet, dus de monitoring/signalering hiervan moet aan de websitekant worden gedaan.
Extra opties
XML / Velden aanpassen
Het is mogelijk om extra velden mee te geven in de XML die via de streaming URL wordt gestuurd. Hiervoor is er een veldset API Access Fieldset Job Detailed op het object Vacature.
In dit veldset kun je (custom) velden toevoegen, deze worden dan vervolgens meegegeven in de XML
XML bestand testen
Als je de XML wilt testen zonder dat je zelf al iets hebt gebouwd om de XML te ontvangen, dan kun je dit bijvoorbeeld via Mockbin doen.
Hier maak je vervolgens een 'bin' aan
Je krijgt vervolgens een streaming URL te zien waar je posts heen kunt sturen.
Deze streaming URL stel je in in Tigris:
Vervolgens kun je een testvacature posten en via de site de volledige POST + header inzien:
Check op online vacatures
Het is mogelijk om ter controle alle vacatures eens per dag op te halen. Je kunt hier
een query voor bouwen. Een voorbeeld hiervan:
https://<jouwdomein>.my.salesforce.com/services/data/v65.0/query/?q=SELECT+name,
Tigris__geplaatst__c+from+Tigris__Vacancy__c+where+Tigris__geplaatst__c=true