HaloPSA Integratie - Automate365
Doel
Koppeling tussen Automate365 en HaloPSA zodat we per tenant:
Tickets kunnen ophalen en tonen
Contactpersonen kunnen koppelen/ontkoppelen aan rollen (technisch, primair, secundair, financieel)
Contactpersonen kunnen aanmaken
Tickets kunnen aanmaken en sluiten
Authenticatie
OAuth2 Client Credentials flow.
Veld | Waarde |
|---|---|
Resource Server |
|
Authorisation Server |
|
Token endpoint |
|
Grant type |
|
Scope |
|
Content-Type |
|
Token is ~1 uur geldig. Body: grant_type=client_credentials&client_id={id}&client_secret={secret}&scope=all
Matching: Automate365 tenant <> HaloPSA organisatie
Custom field: CFMicrosofTenantId
Het custom field op de HaloPSA Client:
Eigenschap | Waarde |
|---|---|
Field ID |
|
Naam |
|
Label |
|
Type |
|
Usage |
|
Tab |
|
Dit veld moet per klant gevuld worden met het Microsoft tenant ID. Momenteel gevuld bij Dirkzwager Groep BV en Innovative365.
Matching strategie
Er is geen server-side filter op custom fields via de HaloPSA API. Matching gaat als volgt:
Haal alle clients op:
GET /api/Client?count=500Haal per client het detail op:
GET /api/Client/{id}Zoek in
customfields[]naar het veld metname: "CFMicrosofTenantId"Match de
valuemet het Microsoft tenant ID uit Automate365
Het custom field zit in het customfields array van de client detail response:
Custom field: Contactrol (CFContact)
Dropdown veld op de User/Contact entity om contactpersonen te koppelen aan een rol.
Eigenschap | Waarde |
|---|---|
Field ID |
|
Naam |
|
Label |
|
Type |
|
Usage |
|
Dropdown waarden
Value | Naam |
|---|---|
| Technisch contact 1 |
| Technisch contact 2 |
| Financieel contact |
Contactrol lezen en schrijven
Lezen via GET /api/Users/{id}:
Schrijven via POST /api/Users:
Ontkoppelen — waarde leegmaken:
API Endpoints
1. Organisatie ophalen
Relevante velden in response:
id— HaloPSA client ID (integer)name— Organisatienaamaccountsid— Account code (bijv. "INN001")inactive— Actief/inactiefcustomfields[]— Custom fields (incl.CFMicrosofTenantId)external_links[]— Koppelingen naar Pax8 etc.
2. Tickets ophalen
Er is geen server-side filter op categorie. Filteren op category_1 == "Automate365" moet client-side.
Relevante velden per ticket:
Veld | Beschrijving | Voorbeeld |
|---|---|---|
| Ticket ID |
|
| Onderwerp |
|
| Omschrijving | (HTML/tekst) |
| Categorie |
|
| Status ID |
|
| Boolean gesloten |
|
| Aanmaakdatum |
|
| Sluitdatum |
|
| Melder (HaloPSA user ID) |
|
| Melder naam |
|
| Toegewezen agent |
|
| Team |
|
| Prioriteit |
|
| Locatie |
|
3. Contactpersonen ophalen
List view bevat basisvelden. Voor alle velden (incl. rol, contactrol en azure info) moet je de detail view gebruiken:
Relevante velden per contact:
Veld | Beschrijving | Voorbeeld |
|---|---|---|
| HaloPSA user ID |
|
| Voornaam |
|
| Achternaam |
|
|
| |
| Telefoonnummer |
|
| Locatie (custom gebruik) |
|
| Rol/functie (custom gebruik) |
|
| Organisatie ID |
|
| Actief/inactief |
|
| MS tenant ID (alleen detail) |
|
| Entra Object ID (alleen detail) |
|
| Vestiging |
|
| Custom fields (incl. | Zie sectie CFContact |
4. Contactpersoon aanmaken (nog te testen)
Verwachte body (minimaal):
5. Ticket aanmaken
Let op: Body moet een array zijn, niet een enkel object.
Getest en werkend. Retourneert het volledige ticket object met o.a.:
id— nieuw ticket IDstatus_id: 1— standaard openpriority_id: 4— standaard Lowteam_id: 13— YOD - 1st Line Support (automatisch toegewezen)agent_id: 1— automatisch toegewezen agentsla_id: 5— SLA wordt automatisch gekoppeld
6. Ticket sluiten
Getest en werkend. status_id: 9 sluit het ticket. Response bevat hasbeenclosed: true en dateclosed.
7. Custom field op Client updaten
8. Custom field op User updaten (contactrol)
Testdata: Innovative365
HaloPSA Client ID:
23Microsoft Tenant ID:
8f3d46f0-9151-4904-be93-69420b7d9d61(opgeslagen inCFMicrosofTenantId)Aantal contactpersonen: 35
Automate365 tickets: 13 (allemaal gesloten, incl. test ticket #4407)
Categorie in Halo:
Automate365Danny Spits Warnars (user ID 651):
CFContact= Technisch contact 1
Open punten
[x] Custom field
CFMicrosofTenantIdop HaloPSA Client — werkt, gevuld bij Innovative365 en Dirkzwager[x] Ticket aanmaken via POST — getest en werkend
[x] Ticket sluiten via POST met
status_id: 9— getest en werkend[x] Contactrol (
CFContact) lezen en schrijven — getest en werkend[ ] POST endpoint testen voor Users (contactpersoon aanmaken)
[ ] Primair contact en Secundair contact toevoegen als opties in CFContact dropdown
[ ]
CFMicrosofTenantIdvullen bij alle klanten[ ] Token caching en refresh strategie bepalen
[ ] Rate limiting van HaloPSA API onderzoeken